Wiktionary
viwiktionary
https://vi.wiktionary.org/wiki/Wiktionary:Trang_Ch%C3%ADnh
MediaWiki 1.47.0-wmf.24
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
olifant
0
1646
2573825
2479697
2026-10-27T08:08:08Z
Hiyuune
50834
(By [[meta:Indic-TechCom/Tools|FindAndReplace]])
2573825
wikitext
text/x-wiki
=={{langname|af}}==
==={{section|etym}}===
Từ {{inh|af|nl|olifant}}, từ {{inh|af|dum|olifant}}, từ {{der|af|fro|olifant}}, từ {{der|af|la|elephantus}}, từ {{der|af|grc|ἐλέφᾱς}}.
==={{section|pron}}===
* {{IPA|af|/ˈʊə̯.liˌfant/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-olifant.wav}}
==={{section|n}}===
{{af-noun|olifante}}
# [[voi|Voi]].
{{c|af|Họ Voi}}
=={{langname|pl}}==
{{wp|pl:}}
{{img
|image1=Horn of Saint Blaise, 1100-1200 AD, South Italy or Sicily, ivory - Cleveland Museum of Art - DSC08529.JPG|caption1={{l|pl|olifant}}
}}
==={{section|etym}}===
{{ety|pl|:bor|fr:olifant<ref:{{R:pl:WSWO}} !!! {{R:pl:USJP}} !!! {{R:pl:PSWP}} !!! {{R:pl:SJPD}}>|text=+|tree=1|etydate=1872<ref:{{cite-journal|pl|journal=Czas|volume=25|issue=172|date=1872-07-31|page=1|pageurl=https://polona2.pl/item/czas-r-25-ner-172-31-lipca-1872,Nzk3NjYwNjA/0/#info:search:olifant}}>}}
==={{section|pron}}===
{{pl-pr|a=LL-Q809 (pol)-Olaf-olifant.wav}}
==={{section|n}}===
{{pl-noun|m-in}}
# [[tù và|Tù và]].
===={{section|decl}}====
{{pl-decl-noun-m-in}}
==={{section|ref}}===
{{reflist}}
==={{section|further}}===
* {{R:pl:PWN}}
=={{langname|nl}}==
==={{section|etym}}===
Từ {{inh|nl|dum|olifant}}, từ {{der|nl|fro|olifant}}, từ {{der|nl|la|elephantus}}, từ {{der|nl|grc|ἐλέφᾱς}}.
==={{section|pron}}===
* {{IPA|nl|/ˈoː.liˌfɑnt/}}
* {{audio|nl|Nl-olifant.ogg}}
* {{hyphenation|nl|oli|fant}}
==={{section|n}}===
{{nl-noun|m|-en|+}}
# [[voi|Voi]].
===={{section|hyper}}====
* {{l|nl|olifantachtige}}
* {{l|nl|slurfdier}}
===={{section|drv}}====
{{col|nl
|kamerolifant
|krijgsolifant
|olifantachtig
|olifantengeheugen
|olifantenpad
|zeeolifant
}}
===={{section|desc}}====
* {{desc|af|olifant}}
* {{desc|bor=1|pap|olefante|olifant}}
{{C|nl|Họ Voi}}
=={{langname|fr}}==
[[file:Le Musée Paul Dupuy - Olifant dit Cor de Roland, XIe siècle 9.5x52 Inv.18036.jpg|thumb|300px|un olifant]]
==={{section|etym}}===
{{ety|fr|:inh|fro:olifan}}
{{inh+|fr|fro|olifan}}.
==={{section|pron}}===
* {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-olifant.wav|a=Lyon}}
==={{section|n}}===
{{fr-noun|m}}
# [[tù và|Tù và]] (bằng [[ngà]]).
==={{section|ref}}===
* {{R:FVDP|db=fv}}
==={{section|further}}===
* {{R:fr:TLFi}}
=={{langname|fro}}==
==={{section|n}}===
{{fro-noun|m}}
# {{alternative form of|fro|olifan}}
3f1ggwj0c3qooqo4saoqheij62jxos8
2573826
2573825
2026-10-27T08:08:29Z
Hiyuune
50834
/* Tiếng Ba Lan */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2573826
wikitext
text/x-wiki
=={{langname|af}}==
==={{section|etym}}===
Từ {{inh|af|nl|olifant}}, từ {{inh|af|dum|olifant}}, từ {{der|af|fro|olifant}}, từ {{der|af|la|elephantus}}, từ {{der|af|grc|ἐλέφᾱς}}.
==={{section|pron}}===
* {{IPA|af|/ˈʊə̯.liˌfant/}}
* {{audio|af|LL-Q14196 (afr)-Oesjaar-olifant.wav}}
==={{section|n}}===
{{af-noun|olifante}}
# [[voi|Voi]].
{{c|af|Họ Voi}}
=={{langname|pl}}==
{{wp|pl:}}
{{img
|image1=Horn of Saint Blaise, 1100-1200 AD, South Italy or Sicily, ivory - Cleveland Museum of Art - DSC08529.JPG|caption1={{l|pl|olifant}}
}}
==={{section|etym}}===
{{ety|pl|:bor|fr:olifant<ref:{{R:pl:WSWO}} !!! {{R:pl:USJP}} !!! {{R:pl:PSWP}} !!! {{R:pl:SJPD}}>|text=+|tree=1|etydate=1872<ref:{{cite-journal|pl|journal=Czas|volume=25|issue=172|date=1872-07-31|page=1|pageurl=https://polona2.pl/item/czas-r-25-ner-172-31-lipca-1872,Nzk3NjYwNjA/0/#info:search:olifant}}>}}
==={{section|pron}}===
{{pl-pr|a=LL-Q809 (pol)-Olaf-olifant.wav}}
==={{section|n}}===
{{pl-noun|m-in}}
# [[tù và|Tù và]].
===={{section|decl}}====
{{pl-ndecl|<m.inan.gena:u>}}
==={{section|ref}}===
{{reflist}}
==={{section|further}}===
* {{R:pl:PWN}}
=={{langname|nl}}==
==={{section|etym}}===
Từ {{inh|nl|dum|olifant}}, từ {{der|nl|fro|olifant}}, từ {{der|nl|la|elephantus}}, từ {{der|nl|grc|ἐλέφᾱς}}.
==={{section|pron}}===
* {{IPA|nl|/ˈoː.liˌfɑnt/}}
* {{audio|nl|Nl-olifant.ogg}}
* {{hyphenation|nl|oli|fant}}
==={{section|n}}===
{{nl-noun|m|-en|+}}
# [[voi|Voi]].
===={{section|hyper}}====
* {{l|nl|olifantachtige}}
* {{l|nl|slurfdier}}
===={{section|drv}}====
{{col|nl
|kamerolifant
|krijgsolifant
|olifantachtig
|olifantengeheugen
|olifantenpad
|zeeolifant
}}
===={{section|desc}}====
* {{desc|af|olifant}}
* {{desc|bor=1|pap|olefante|olifant}}
{{C|nl|Họ Voi}}
=={{langname|fr}}==
[[file:Le Musée Paul Dupuy - Olifant dit Cor de Roland, XIe siècle 9.5x52 Inv.18036.jpg|thumb|300px|un olifant]]
==={{section|etym}}===
{{ety|fr|:inh|fro:olifan}}
{{inh+|fr|fro|olifan}}.
==={{section|pron}}===
* {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-olifant.wav|a=Lyon}}
==={{section|n}}===
{{fr-noun|m}}
# [[tù và|Tù và]] (bằng [[ngà]]).
==={{section|ref}}===
* {{R:FVDP|db=fv}}
==={{section|further}}===
* {{R:fr:TLFi}}
=={{langname|fro}}==
==={{section|n}}===
{{fro-noun|m}}
# {{alternative form of|fro|olifan}}
416k6v4jwu15pudiweti6df7z17ovku
bazooka
0
8510
2573839
2367179
2026-10-27T09:06:37Z
Hiyuune
50834
2573839
wikitext
text/x-wiki
{{also|bazooką}}
=={{langname|vi}}==
{{wikipedia}}
==={{ĐM|pron}}===
{{vi-pron|ba|zô|ka}}
==={{ĐM|noun}}===
{{vi-noun}}
# {{senseid|vi|vũ khí}} [[vũ khí|Vũ khí]] [[hình]] [[ống]], [[phóng]] [[đạn]] theo [[nguyên lí]] [[phản lực]], [[chủ yếu]] dùng để [[bắn]] [[xe tăng]].
==={{ĐM|ref}}===
* {{R:Tratu}}
=={{langname|en}}==
{{wp|<dab!>}}
==={{ĐM|pron}}===
* {{IPA|en|/bəˈzuːkə/|a=UK}}
* {{audio|en|en-us-bazooka.ogg|a=US}}
* {{rhymes|en|uːkə|s=3}}
==={{ĐM|etym}} 1===
===={{ĐM|noun}}====
{{en-noun}}
# {{lb|en|quân sự}} [[súng|Súng]] {{l|vi|bazooka}}.
====={{ĐM|drv}}=====
{{col|en|bazookaist|bazookaman|spudzooka|trade bazooka}}
====={{ĐM|desc}}=====
{{col-top|2|desc}}
* {{desc|ar|بازوكة|tr=bāzūka|bor=1}}
* {{desc|my|ဘဇူကာ|bor=1}}
* {{desc|zh|巴祖卡|bor=1}}
* {{desc|fr|bazooka|bor=1}}
* {{desc|nl|bazooka|bor=1}}
* {{desc|fi|bazooka|bor=1}}
* {{desc|de|Bazooka|bor=1}}
* {{desc|id|bazoka|bor=1}}
* {{desc|ja|バズーカ|tr=bazūka|bor=1}}
* {{desc|ko|바주카|bor=1}}
* {{desc|mk|базука|bor=1}}
* {{desc|mrw|basoka|bor=1}}
* {{desc|pl|bazooka|bor=1}}
* {{desc|pt|bazuca|bor=1}}
* {{desc|ro|bazooka|bor=1}}
* {{desc|ru|базу́ка|bor=1}}
* {{desc|es|bazuca|bor=1}}
* {{desc|sv|bazooka|bor=1}}
{{col-bottom}}
===={{ĐM|v}}====
{{en-verb}}
# Bắn [[súng]] {{l|vi|bazooka}}.
==={{ĐM|etym}} 2===
===={{ĐM|n}}====
{{en-noun|-}}
# {{lb|en|slang}} [[crack cocaine|Crack cocaine]].
==={{ĐM|ref}}===
* {{R:FVDP|db=ev}}
=={{langname|pl}}==
{{wp|pl:}}
[[File:Bazookasmithsonian.jpg|thumb|bazooka]]
==={{ĐM|etym}}===
{{ety|pl|:ubor|en:bazooka|text=+|tree=1}}
==={{ĐM|pron}}===
{{pl-pr|bazuka|a=Pl-bazooka.ogg|h=ba.zoo.ka}}
==={{ĐM|n}}===
{{pl-noun|f}}
# {{lb|pl|weaponry}} [[súng|Súng]] {{l|vi|bazooka}}.
===={{ĐM|decl}}====
{{pl-ndecl|<f>}}
==={{ĐM|further}}===
* {{R:pl:PWN}}
=={{langname|fr}}==
==={{ĐM|etym}}===
{{ety|fr|:bor|en:bazooka}}
{{bor+|fr|en|bazooka}}.
==={{ĐM|pron}}===
* {{fr-IPA|bazouka}}
* {{audio|fr|Fr-bazooka.ogg}}
* {{audio|fr|LL-Q150 (fra)-LoquaxFR-bazooka.wav|a=Vosges}}
==={{ĐM|noun}}===
{{fr-noun|m}}
# [[súng|Súng]] {{l|vi|bazooka}}.
==={{ĐM|ref}}===
* {{R:FVDP|db=fv}}
==={{ĐM|further}}===
* {{R:fr:TLFi}}
=={{langname|ro}}==
==={{section|etym}}===
{{ubor|ro|en|bazooka}}.
==={{section|n}}===
{{ro-noun|f|bazooka}}
# {{lb|ro|weapons}} [[súng|Súng]] {{l|vi|bazooka}}.
=={{langname|sv}}==
{{wikipedia|sv:}}
[[File:Soldier_with_Bazooka_M1.jpg|thumb|300px|soldat som håller en '''bazooka''' [soldier holding a '''bazooka'''] ]]
==={{ĐM|etym}}===
{{bor+|sv|en|bazooka}}.
==={{ĐM|n}}===
{{sv-noun|c}}
# {{lb|sv|weaponry}} [[súng|Súng]] {{l|vi|bazooka}}.
===={{ĐM|decl}}====
{{sv-infl-noun-c-or}}
===={{ĐM|see}}====
* {{l|sv|raketgevär}}
==={{ĐM|ref}}===
* {{R:svenska.se|so}}
* {{R:svenska.se|saol}}
kmnsjq0gs30ngp9xqg31tryituwlryb
mấp mô
0
28817
2573794
2181966
2026-10-27T05:44:27Z
~2026-57254-50
62132
/* */
2573794
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-âp|mô}}
{{-pron-}}
{{vie-pron}}
{{-paro-}}
:* [[mập mờ]]
{{-adj-}}
{{vie-adj|head=mấp [[mô]]}}
# [[gồ ghề|Gồ ghề]], không [[bằng phẳng]].
#: {{ux|vi|Đường sá '''mấp mô'''.}}
{{-reference-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
kua77rdrzt6hl6pd5oakyl4w3r4mkd0
kếch xù
0
31566
2573805
2183175
2026-10-27T06:29:12Z
Hiyuune
50834
2573805
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|etym}}===
Từ ghép giữa {{compound|vi|kếch|xù}}.
==={{section|pron}}===
{{vi-pron}}
==={{section|adj}}===
{{vi-adj}}
# {{lb|vi|colloquial}} [[to lớn|To lớn]] quá mức [[bình thường]].
#: {{ux|vi|Túi bạc '''kếch xù'''.}}
==={{section|ref}}===
* {{R:FVDP}}
s7t72whf4ddih9rls5qsr3jcexjelmo
lạnh lẽo
0
31769
2573803
1870752
2026-10-27T05:51:37Z
~2026-57254-50
62132
/* */
2573803
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-eo|lạnh}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
'''lạnh lẽo'''
# {{like-entry|lạnh}}
#: ''Tiết thu '''lạnh lẽo'''.''
# Không [[ấm cúng]], [[thiếu]] [[thân mật]].
#: ''Gian phòng '''lạnh lẽo'''.''
#: ''Sống '''lạnh lẽo'''.''
{{-adv-}}
'''lạnh lẽo'''
# {{like-entry|#tính từ|tính từ}}
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Tính từ tiếng Việt]]
mcos02yvg8iar5wbqyz9odrl8t7ewu1
nhấp nháy
0
32355
2573793
1880815
2026-10-27T05:44:02Z
~2026-57254-50
62132
/* */
2573793
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-âp|nháy}}.
{{-pron-}}
{{vie-pron}}
{{-verb-}}
{{vi-verb|head=nhấp [[nháy]]}}
# [[nói|Nói]] [[mắt]] [[mở]] [[nhắm]] [[liên tiếp]].
#: ''Chói ánh mặt trời, mắt cứ '''nhấp nháy''' luôn.''
# [[nói|Nói]] [[ánh sáng]] khi [[tỏ]] khi [[mờ]].
#: ''Ngọn đèn '''nhấp nháy'''.''
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
hcmkqzpy3nsaj8s85w0f6gv6szsnzq5
paella
0
36400
2573840
2351215
2026-10-27T09:07:34Z
Hiyuune
50834
2573840
wikitext
text/x-wiki
{{also|Paella|paëlla|paellą}}
=={{langname|en}}==
{{wp|en:}}
[[image:01 Paella Valenciana original.jpg|thumb|A Valencian paella]]
==={{section|etym}}===
Được vay mượn từ {{bor|en|ca|paella}}, từ {{der|en|fro|paelle}}, từ {{der|en|la|patella}}.<ref>{{R:OED Online|code=135972}}</ref><ref>{{R:OED Online|code=136047|entry=pail, n.1}}</ref> {{doublet|en|patella}} và có khả năng từ {{mention|en|pail}}.
==={{section|pron}}===
* {{IPA|en|/paɪˈ(j)ɛl(j)ə/|/pɑːˈɛ.(l)(j)ə/|a=UK}}
** {{audio|en|LL-Q1860 (eng)-Vealhurl-paella.wav|a=Southern England}}
* {{IPA|en|/pɑːˈeɪ.(j)ə/|/paɪˈ(j)eɪ.(j)ə/|a=US}}
** {{audio|en|En-us-paella.ogg|a=US}}
* {{rhymes|en|ɛlə|s=3}}
* {{rhymes|en|eɪə|s=3}}
* {{hyph|en|pa|e|lla}}
==={{section|n}}===
{{en-noun|~}}
# {{senseid|vi|Q212121}} [[cơm|Cơm]] [[thập cẩm]] từ [[Valencia]], [[Tây Ban Nha]].
===={{section|hypo}}====
* {{l|en|paella valenciana}} / {{l|en|paella Valenciana}} / {{l|en|paella Valencia}} / {{l|en|Valencian paella}}
* {{l|en|paella de marisco}} / {{l|en|seafood paella}}
** {{l|en|paella marinera}} / {{l|en|paella marinara}}
** {{l|en|arroz a la marinera}}
===={{section|drv}}====
{{col|en|paellalike|paellera|paella pan}}
==={{section|ref}}===
<references />
==={{section|ref}}===
* {{anagrams|en|a=aaellp|apella|paleal|pallae}}
{{C|en|Thực phẩm}}
=={{langname|ast}}==
==={{section|etym}}===
{{bor+|ast|es|paella}}, từ tiếng Catalan {{l|ca|paella}}, từ tiếng Latinh {{l|la|patella}}. {{dbt|ast|payella|padiella}}.
==={{section|n}}===
{{ast-noun|f|paelles}}
# {{tcl|ast|paella|id=Q212121}}
{{C|ast|Thực phẩm}}
=={{langname|pl}}==
{{wp|pl:}}
[[File:Paella Marinara.JPG|thumb|paella]]
==={{section|etym}}===
{{dercat|pl|ca|fro|la}}
{{ubor|pl|es|paella}}.
==={{section|pron}}===
{{pl-pr|paeja|a=LL-Q809 (pol)-Olaf-paella.wav|h=pa.e.lla}}
==={{section|n}}===
{{pl-noun|f}}
# {{tcl|pl|paella|id=Q212121}}
===={{section|decl}}====
{{pl-decl-noun-f|genp=paelli/paell}}
==={{section|further}}===
* {{R:pl:WSJP}}
* {{R:pl:PWN}}
* {{R:pl:PWN Encyclopedia}}
{{C|pl|Thực phẩm}}
=={{langname|ca}}==
==={{section|etym}}===
Từ {{der|ca|fro|paelle}}, từ{{der|ca|la|patella}}. So sánh với {{cog|oc|paela}}.
==={{section|pron}}===
* {{ca-IPA|é}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-paella.wav|a=Catalunya}}
==={{section|n}}===
{{ca-noun|f}}
# [[nồi|Nồi]] [[chiên]].
# {{tcl|ca|paella|id=Q212121}}
===={{section|desc}}====
* {{desctree|es|paella|bor=1}}
==={{section|further}}===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
{{C|ca|Thực phẩm}}
=={{langname|gl}}==
==={{section|alt}}===
* {{alt|gl|paelha||reinteg}}
==={{section|etym}}===
Từ {{der|gl|ca|paella}}.
==={{section|pron}}===
{{rfp|gl}}
==={{section|n}}===
{{gl-noun|f}}
# {{tcl|gl|paella|id=Q212121}}
==={{section|further}}===
* {{R:gl:DRAG}}
{{C|gl|Thực phẩm}}
=={{langname|fi}}==
==={{section|etym}}===
Được vay mượn từ {{bor|fi|es|paella}}, từ {{der|fi|ca|paella}}.
==={{section|pron}}===
{{fi-p}}
==={{section|n}}===
{{fi-noun}}
# {{tcl|fi|paella|id=Q212121}}
===={{section|decl}}====
{{fi-decl-katiska|paell|a}}
==={{section|further}}===
* {{R:fi:KTSK|accessdate=2023-07-03}}
==={{section|ana}}===
* {{anagrams|fi|a=aaellp|apella|pallea}}
{{C|fi|Thực phẩm}}
=={{langname|fr}}==
==={{section|alt}}===
* {{alt|fr|paélia||post-1990}}
* {{alt|fr|paëlla}}
==={{section|etym}}===
{{bor+|fr|ca|paella}} hoặc {{bor|fr|es|paella}}, từ {{der|fr|la|patella}}. {{doublet|fr|poêle}}.
==={{section|pron}}===
* {{fr-IPA|paéilla|paélia|paélla}}
* {{audio|fr|LL-Q150 (fra)-DSwissK-paella.wav|a=Valais}}
==={{section|n}}===
{{fr-noun|f}}
# {{lb|fr|countable and uncountable}} {{tcl|fr|paella|id=Q212121}}
==={{section|further}}===
* {{R:fr:TLFi}}
{{C|fr|Thực phẩm}}
=={{langname|es}}==
==={{section|etym}}===
{{bor+|es|ca|paella}}, từ {{der|es|la|patella}}. {{dbt|es|padilla|paila|puela}}.
==={{section|pron}}===
{{es-pr|+<audio:LL-Q1321 (spa)-Marreromarco-paella.wav<a:Venezuela>>}}
==={{section|n}}===
{{es-noun|f}}
# {{tcl|es|paella|id=Q212121}}
===={{section|hypo}}====
* {{l|es|paella valenciana}}
* {{l|es|paella de marisco}}
** {{l|es|paella marinera}}
** {{l|es|arroz a la marinera}}
===={{section|desc}}====
* {{desc|tl|paelya|bor=1}}
===={{section|see}}====
* {{l|es|arroz con cosas}}
==={{section|further}}===
* {{R:es:DRAE}}
{{C|es|Thực phẩm}}
1xz17r2ndz8xeh4079x836jae8otstb
2573841
2573840
2026-10-27T09:08:08Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2573841
wikitext
text/x-wiki
{{also|Paella|paëlla|paellą}}
=={{langname|en}}==
{{wp|en:}}
[[image:01 Paella Valenciana original.jpg|thumb|A Valencian paella]]
==={{section|etym}}===
Được vay mượn từ {{bor|en|ca|paella}}, từ {{der|en|fro|paelle}}, từ {{der|en|la|patella}}.<ref>{{R:OED Online|code=135972}}</ref><ref>{{R:OED Online|code=136047|entry=pail, n.1}}</ref> {{doublet|en|patella}} và có khả năng từ {{mention|en|pail}}.
==={{section|pron}}===
* {{IPA|en|/paɪˈ(j)ɛl(j)ə/|/pɑːˈɛ.(l)(j)ə/|a=UK}}
** {{audio|en|LL-Q1860 (eng)-Vealhurl-paella.wav|a=Southern England}}
* {{IPA|en|/pɑːˈeɪ.(j)ə/|/paɪˈ(j)eɪ.(j)ə/|a=US}}
** {{audio|en|En-us-paella.ogg|a=US}}
* {{rhymes|en|ɛlə|s=3}}
* {{rhymes|en|eɪə|s=3}}
* {{hyph|en|pa|e|lla}}
==={{section|n}}===
{{en-noun|~}}
# {{senseid|vi|Q212121}} [[cơm|Cơm]] [[thập cẩm]] từ [[Valencia]], [[Tây Ban Nha]].
===={{section|hypo}}====
* {{l|en|paella valenciana}} / {{l|en|paella Valenciana}} / {{l|en|paella Valencia}} / {{l|en|Valencian paella}}
* {{l|en|paella de marisco}} / {{l|en|seafood paella}}
** {{l|en|paella marinera}} / {{l|en|paella marinara}}
** {{l|en|arroz a la marinera}}
===={{section|drv}}====
{{col|en|paellalike|paellera|paella pan}}
==={{section|ref}}===
<references />
==={{section|ref}}===
* {{anagrams|en|a=aaellp|apella|paleal|pallae}}
{{C|en|Thực phẩm}}
=={{langname|ast}}==
==={{section|etym}}===
{{bor+|ast|es|paella}}, từ tiếng Catalan {{l|ca|paella}}, từ tiếng Latinh {{l|la|patella}}. {{dbt|ast|payella|padiella}}.
==={{section|n}}===
{{ast-noun|f|paelles}}
# {{tcl|ast|paella|id=Q212121}}
{{C|ast|Thực phẩm}}
=={{langname|pl}}==
{{wp|pl:}}
[[File:Paella Marinara.JPG|thumb|paella]]
==={{section|etym}}===
{{dercat|pl|ca|fro|la}}
{{ubor|pl|es|paella}}.
==={{section|pron}}===
{{pl-pr|paeja|a=LL-Q809 (pol)-Olaf-paella.wav|h=pa.e.lla}}
==={{section|n}}===
{{pl-noun|f}}
# {{tcl|pl|paella|id=Q212121}}
===={{section|decl}}====
{{pl-ndecl|<f.genpli:->}}
==={{section|further}}===
* {{R:pl:WSJP}}
* {{R:pl:PWN}}
* {{R:pl:PWN Encyclopedia}}
{{C|pl|Thực phẩm}}
=={{langname|ca}}==
==={{section|etym}}===
Từ {{der|ca|fro|paelle}}, từ{{der|ca|la|patella}}. So sánh với {{cog|oc|paela}}.
==={{section|pron}}===
* {{ca-IPA|é}}
* {{audio|ca|LL-Q7026 (cat)-Unjoanqualsevol-paella.wav|a=Catalunya}}
==={{section|n}}===
{{ca-noun|f}}
# [[nồi|Nồi]] [[chiên]].
# {{tcl|ca|paella|id=Q212121}}
===={{section|desc}}====
* {{desctree|es|paella|bor=1}}
==={{section|further}}===
* {{R:ca:IEC2}}
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
* {{R:ca:DCVB}}
{{C|ca|Thực phẩm}}
=={{langname|gl}}==
==={{section|alt}}===
* {{alt|gl|paelha||reinteg}}
==={{section|etym}}===
Từ {{der|gl|ca|paella}}.
==={{section|pron}}===
{{rfp|gl}}
==={{section|n}}===
{{gl-noun|f}}
# {{tcl|gl|paella|id=Q212121}}
==={{section|further}}===
* {{R:gl:DRAG}}
{{C|gl|Thực phẩm}}
=={{langname|fi}}==
==={{section|etym}}===
Được vay mượn từ {{bor|fi|es|paella}}, từ {{der|fi|ca|paella}}.
==={{section|pron}}===
{{fi-p}}
==={{section|n}}===
{{fi-noun}}
# {{tcl|fi|paella|id=Q212121}}
===={{section|decl}}====
{{fi-decl-katiska|paell|a}}
==={{section|further}}===
* {{R:fi:KTSK|accessdate=2023-07-03}}
==={{section|ana}}===
* {{anagrams|fi|a=aaellp|apella|pallea}}
{{C|fi|Thực phẩm}}
=={{langname|fr}}==
==={{section|alt}}===
* {{alt|fr|paélia||post-1990}}
* {{alt|fr|paëlla}}
==={{section|etym}}===
{{bor+|fr|ca|paella}} hoặc {{bor|fr|es|paella}}, từ {{der|fr|la|patella}}. {{doublet|fr|poêle}}.
==={{section|pron}}===
* {{fr-IPA|paéilla|paélia|paélla}}
* {{audio|fr|LL-Q150 (fra)-DSwissK-paella.wav|a=Valais}}
==={{section|n}}===
{{fr-noun|f}}
# {{lb|fr|countable and uncountable}} {{tcl|fr|paella|id=Q212121}}
==={{section|further}}===
* {{R:fr:TLFi}}
{{C|fr|Thực phẩm}}
=={{langname|es}}==
==={{section|etym}}===
{{bor+|es|ca|paella}}, từ {{der|es|la|patella}}. {{dbt|es|padilla|paila|puela}}.
==={{section|pron}}===
{{es-pr|+<audio:LL-Q1321 (spa)-Marreromarco-paella.wav<a:Venezuela>>}}
==={{section|n}}===
{{es-noun|f}}
# {{tcl|es|paella|id=Q212121}}
===={{section|hypo}}====
* {{l|es|paella valenciana}}
* {{l|es|paella de marisco}}
** {{l|es|paella marinera}}
** {{l|es|arroz a la marinera}}
===={{section|desc}}====
* {{desc|tl|paelya|bor=1}}
===={{section|see}}====
* {{l|es|arroz con cosas}}
==={{section|further}}===
* {{R:es:DRAE}}
{{C|es|Thực phẩm}}
sy5e0d2z3uyvhk0h2atp1sbbmntw794
hostilement
0
46183
2573814
2478512
2026-10-27T06:51:59Z
Hiyuune
50834
2573814
wikitext
text/x-wiki
=={{langname|fr}}==
==={{section|etym}}===
{{ety|fr|:af|hostil|-ment<id:phó từ>}}
Từ {{af|fr|hostil|-ment<id:phó từ>}}.
==={{section|pron}}===
* {{fr-muteh}} {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-hostilement.wav|a=Lyon}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-hostilement.wav|a=Vosges}}
==={{section|adv}}===
{{fr-adv}}
# [[thù địch|Thù địch]]; [[chống đối]].
==={{section|ref}}===
* {{R:FVDP|db=fv}}
==={{section|further}}===
* {{R:fr:TLFi}}
mh0g08rvpvgkmcf0tcnv6liac14whia
2573815
2573814
2026-10-27T06:53:42Z
Hiyuune
50834
2573815
wikitext
text/x-wiki
=={{langname|fr}}==
==={{section|etym}}===
{{ety|fr|:af|hostil|-ment<id:trạng ngữ>}}
Từ {{af|fr|hostil|-ment<id:trạng ngữ>}}.
==={{section|pron}}===
* {{fr-muteh}} {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-hostilement.wav|a=Lyon}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-hostilement.wav|a=Vosges}}
==={{section|adv}}===
{{fr-adv}}
# [[thù địch|Thù địch]]; [[chống đối]].
==={{section|ref}}===
* {{R:FVDP|db=fv}}
==={{section|further}}===
* {{R:fr:TLFi}}
eysd8jyu0ijreczrgbe6c99uv96dafu
chloroplast
0
55881
2573843
2512225
2026-10-27T09:10:01Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2573843
wikitext
text/x-wiki
{{also|Chloroplast}}
=={{langname|en}}==
{{wp|en:}}
==={{ĐM|etym}}===
Từ {{confix|en|chloro|plast}}.
==={{ĐM|pron}}===
* {{IPA|en|/ˈklɔːɹəʊˌplæst/}}
* {{audio|en|En-us-ncalif-chloroplast.ogg|a=Bắc California}}
==={{ĐM|n}}===
{{en-noun}}
# {{lb|en|cytology}} [[lục lạp|Lục lạp]].
#: {{syn|en|chloroplastid<qq:cổ xưa>}}
===={{ĐM|hyper}}====
* {{l|en|plastid}}
===={{ĐM|mero}}====
* {{l|en|granum}}
===={{ĐM|coordinate}}====
* {{l|en|leucoplast}}, {{l|en|chromoplast}}
===={{ĐM|drv}}====
{{col|en|chloroplastal|chloroplastic|extrachloroplast|kleptochloroplast|macrochloroplast|nonchloroplast|subchloroplast|chloroplast DNA}}
==={{ĐM|see}}===
* {{l|en|chromoblast}}
* {{l|en|chromoplast}}
* {{l|en|mitochondrion}}
* {{l|en|hydrogenosome}}
==={{ĐM|ref}}===
{{R:FVDP|db=ev}}
* {{R:OneLook}}
* {{pedia|lang=en}}
=={{langname|pl}}==
{{wp|pl:}}
[[File:Bryum capillare leaf cells.jpg|thumb|chloroplasty]]
==={{ĐM|etym}}===
{{intnat|pl}}; so sánh với {{cog|en|chloroplast}}, {{cog|fr|chloroplaste}}, {{cog|de|Chloroplast}}.
==={{ĐM|pron}}===
{{pl-pr|a=LL-Q809 (pol)-Poemat-chloroplast.wav}}
==={{ĐM|n}}===
{{pl-noun|m-in|adj=chloroplastowy}}
# {{lb|pl|cytology}} [[lục lạp|Lục lạp]].
===={{ĐM|decl}}====
{{pl-ndecl|<m.inan>}}
===={{ĐM|rel}}====
{{col|pl|title=danh từ|chloroplastyna}}
==={{ĐM|further}}===
* {{R:pl:WSJP}}
* {{R:pl:PWN}}
* {{R:pl:PWN Encyclopedia}}
cz6xyxfs9fqvxitconm617hmhs8j4f4
театр
0
78069
2573813
2438854
2026-10-27T06:48:13Z
Hiyuune
50834
2573813
wikitext
text/x-wiki
=={{langname|az}}==
==={{section|etym}}===
{{az-noun}}
# {{spelling of|az|Kirin|teatr|t=nhà hát, rạp hát}}
===={{section|decl}}====
{{az-ndecl-c/Cyrl|а}}
=={{langname|ba}}==
{{wp|ba:}}
[[File:Cuckoo's nest.jpg|250px|thumb|'''Театрҙа''' бер күренеш.]]
==={{section|etym}}===
Vay mượn từ {{bor|ba|ru|теа́тр|t=nhà hát, rạp hát}}, từ {{der|ba|fr|théâtre}}, từ {{der|ba|la|theātrum}}, từ {{der|ba|grc|θέατρον}}.
==={{section|pron}}===
* {{IPA|ba|[tʲi.ˈä.tər]}}, dạng ''izafa'' của: '''''театры''''' {{IPAchar|[tʲi.ˈä.trɯ̞]}}
* {{hyphenation|ba|те|атр}}
==={{section|n}}===
{{ba-noun}}
# [[nhà hát]], [[rạp hát]].
===={{section|decl}}====
{{ba-ndecl-c|ы|р}}
=={{langname|bua}}==
==={{section|etym}}===
{{bor+|bua|ru|теа́тр|g=m}}, từ {{der|bua|fr|théâtre|g=m}}, từ {{der|bua|la|theātrum|g=n}}, từ {{der|bua|grc|θέατρον|g=n}}.
==={{section|etym}}===
* {{IPA|bua|[ˈtʲat(ə)r]}}
* {{hyph|bua|теа|тр}}
==={{section|n}}===
{{bua-noun}}
# [[nhà hát]], [[rạp hát]].
===={{section|decl}}====
{{rfinfl|bua|danh từ}}
=={{langname|kk}}==
{{kk-alt}}
{{wp|kk:}}
==={{section|etym}}===
Vay mượn từ {{bor|kk|ru|теа́тр}}, từ {{der|kk|fr|théâtre}}, từ {{der|kk|la|theātrum}}, từ {{der|kk|grc|θέατρον}}.
==={{section|n}}===
{{kk-noun}}
# [[nhà hát]], [[rạp hát]].
===={{section|decl}}====
{{kk-noun-c|а|р}}
=={{langname|ky}}==
==={{section|etym}}===
Vay mượn từ {{bor|ky|ru|теа́тр}}, từ {{der|ky|fr|théâtre}}, từ {{der|ky|la|theātrum}}, từ {{der|ky|grc|θέατρον}}.
==={{section|n}}===
{{ky-noun}}
# [[nhà hát]], [[rạp hát]].
===={{section|decl}}====
{{ky-decl-noun}}
=={{langname|mn}}==
{{mn-variant|ᠲᠢᠶᠠᠲ᠋ᠷ|театр}}
==={{section|etym}}===
{{bor+|mn|ru|теа́тр|g=m-in-s}}, từ {{der|mn|fr|théâtre|g=m-s}}, từ {{der|mn|la|theātrum|g=n-s}}, từ {{der|mn|grc|θέατρον|g=n-s}}.
==={{section|pron}}===
* {{IPA|mn|[tʰi͜äʰt(ə)r̥]}}
* {{hyph|mn|теа|тр}}
==={{section|n}}===
{{mn-noun}}
# [[nhà hát]], [[rạp hát]].
===={{section|decl}}====
{{mn-decl|театр<r.bor>}}
=={{langname|ru}}==
{{wp|ru:}}
==={{section|alt}}===
* {{alter|ru|теа́тръ||ru-PRO}}
* {{alt|ru|ѳеа́тръ|феа́тр||archaic}}
==={{section|etym}}===
{{etymon|ru|:bor|fr:théâtre}}
{{bor+|ru|fr|théâtre}}, từ {{der|ru|la|theātrum}}, từ {{der|ru|grc|θέατρον}} (danh động từ của {{m|grc|θεάομαι}}). {{displaced|ru|феа́тр|sl=1}}, vay mượn từ tiếng Hy Lạp trung cổ.
So sánh theo cách diễn đạt nghĩa tự nhiên với {{m+|cs|divadlo}} (**дива́ло, giống như {{m|ru|диви́ться}}); {{m+|sh|позориште}} (giống như {{m|ru|позо́рище}} (nghĩa ''nhà hát, rạp hát'' trong tiếng Nga không còn dùng)), {{m+|sh|казалиште}} (**каза́лище, giống như {{m|ru|показа́ть}}), {{m+|sl|gledališče}} (**гляда́лище, giống như {{m|ru|гляде́ть}}).
==={{section|pron}}===
* {{ru-IPA|теа́т(о)р}}
* {{audio|ru|Ru-театр.ogg}}
* {{ru-IPA|тя́т(о)р|phon=тя́тр}}
==={{section|n}}===
{{ru-noun+|теа́тр|adj=театра́льный}}
# [[nhà hát]], [[rạp hát]].
===={{section|decl}}====
{{ru-noun-table|теа́тр}}
===={{section|drv}}====
''Từ ghép:''
* {{l|ru|театрове́д|g=m-an}}
''Từ ghép:''
* {{l|ru|арти́ст погоре́лого теа́тра}}
* {{l|ru|теа́тр вое́нных де́йствий|g=m}}
* {{l|ru|теа́тр одного́ актёра|g=m}}
;Tục ngữ
* {{l|ru|теа́тр начина́ется с ве́шалки}}
===={{section|rel}}====
* {{l|ru|театра́л|g=m-an}}
* {{l|ru|театра́льный}}
* {{l|ru|амфитеа́тр|g=m}}
===={{section|desc}}====
{{top3}}
* {{desc|az|-|bor=1}}
*: {{desc|az|театр|sclang=1}}
*: {{desc|az|teatr|sclang=1}}
* {{desc|ba|театр|bor=1}}
* {{desc|bua|театр|bor=1}}
* {{desc|crh|teatr|bor=1}}
* {{desc|evn|театр|bor=1}}
* {{desc|jdt|teatr|bor=1}}
* {{desc|xal|театр|bor=1}}
* {{desc|kk|-|bor=1}}
*: {{desc|kk|تەاتر|sclang=1}}
*: {{desc|kk|театр|sclang=1}}
*: {{desc|kk|teatr|sclang=1}}
* {{desc|kjh|театр|bor=1}}
* {{desc|ky|театр|bor=1}}
* {{desc|olo|teatru|bor=1}}
* {{desc|mn|-|bor=1}}
*: {{desc|mn|театр|sclang=1}}
*: {{desc|mn|ᠲᠢᠶᠠᠲ᠋ᠷ|sclang=1}}
* {{desc|alt|театр|bor=1}}
* {{desc|tg|театр|bor=1}}
* {{desc|tt|театр|bor=1}}
* {{desc|tyv|театр|bor=1}}
* {{desc|ug|-|bor=1}}
*: {{desc|ug|театр|sclang=1}}
*: {{desc|ug|تىياتىر|sclang=1}}
* {{desc|ug|-|der=1}}
*: {{desc|ug|театрхана|sclang=1}}
*: {{desc|ug|تىياتىرخانا|sclang=1}}
* {{desc|uz|-|bor=1}}
*: {{desc|uz|театр|sclang=1}}
*: {{desc|uz|teatr|sclang=1}}
* {{desc|bor=1|sah|театр|тыйаатыр|тийээтир}}
{{bottom}}
===={{section|see}}====
* {{l|ru|балага́н}}
* {{l|ru|верте́п}}
* {{l|ru|раёк}}
* {{l|ru|сце́на}}, {{l|ru|подмо́стки}}
* {{l|ru|за́навес}}
* {{l|ru|тру́ппа}}, {{l|ru|актёр}}, {{l|ru|арти́ст}}
* {{l|ru|лицеде́й}}
* {{l|ru|спекта́кль}}
==={{section|ref}}===
* {{R:FVDP|db=rv}}
* {{R:ru:Vasmer}}
* {{R:ru:Shansky}}
=={{langname|tg}}==
==={{section|etym}}===
{{ety|tg|:bor|ru:теа́тр|text=+|tree=1}}
==={{section|pron}}===
{{tg-IPA}}
==={{section|n}}===
{{fa-regional|تئاتر|تئاتر|театр}}
{{tg-noun}}
# [[nhà hát]], [[rạp hát]].
===={{section|infl}}====
{{tg-infl-noun}}
=={{langname|uk}}==
==={{section|etym}}===
{{ety|uk|:der|fr:théâtre|text=3|tree=1}}
==={{section|pron}}===
* {{uk-IPA|теа́тр}}
* {{audio|uk|Uk-театр.ogg}}
==={{section|n}}===
{{uk-noun|теа́тр<genu>|adj=театра́льний}}
# [[nhà hát]], [[rạp hát]].
===={{section|decl}}====
{{uk-ndecl|теа́тр<genu>}}
===={{section|drv}}====
* {{l|uk|кінотеа́тр}}
==={{section|ref}}===
* {{R:uk:SUM-11}}
* {{R:uk:Horokh}}
* {{R:uk:Slovnyk}}
=={{langname|sah}}==
==={{section|alt}}===
* {{alt|sah|тыйаатыр|тийээтир}}
==={{section|etym}}===
Vay mượn từ {{bor|sah|ru|теа́тр}}, từ {{der|sah|fr|théâtre}}, từ {{der|sah|la|theātrum}}, từ {{der|sah|grc|θέατρον}}.
==={{section|pron}}===
* {{IPA|sah|[te̞.äː.t(ɨ̞)r]}}
* {{hyph|sah|те|а|тр}}
==={{section|n}}===
{{sah-noun}}
# {{lb|sah|literature}} [[nhà hát]], [[rạp hát]].
j5bum37stnx0piv2whd9cmrayfwlfue
Nguyên Thủy Thiên Tôn
0
82737
2573768
1307753
2026-10-27T04:14:00Z
TienMinh-mun6xnChing
57893
/* */
2573768
wikitext
text/x-wiki
{{-vie-}}
{{wikipedia}}
{{-pron-}}
{{vie-pron}}
{{-pr-noun-}}
{{pn}}
# {{term|Đạo giáo}} Một [[vị]] [[tiên]] [[đứng đầu]] trong [[chư]] [[tiên]].
{{-trans-}}
{{-ref-}}
{{R:FVDP}}
{{catname|Danh từ riêng|tiếng Việt}}
mia06sg1uxd7yc80h3osn94d9c9y1zo
2573769
2573768
2026-10-27T04:14:36Z
TienMinh-mun6xnChing
57893
/* */
2573769
wikitext
text/x-wiki
{{-vie-}}
{{wikipedia}}
{{-pron-}}
{{vie-pron}}
{{-pr-noun-}}
{{pn}}
# {{term|Đạo giáo}} Một [[vị]] [[tiên]] [[đứng đầu]] trong [[chư tiên]].
{{-trans-}}
{{-ref-}}
{{R:FVDP}}
{{catname|Danh từ riêng|tiếng Việt}}
9r0y0iarxzrz3ddzfozvisnd1s1gxz9
lạnh lùng
0
92726
2573783
2097498
2026-10-27T05:40:29Z
~2026-57254-50
62132
/* */
2573783
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|ung2|lạnh}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
{{vi-adj|head=[[lạnh]] lùng|[[冷𫥌]], [[泠㳥]], [[冷㳥]], [[冷𨓡]], [[冷𡫶]], [[冷𱐊]], [[冷滝]], [[冷瀧]], [[冷]]}}
# {{term|Id.}} . [[lạnh|Lạnh]], làm [[tác động]] [[mạnh]] đến [[tâm hồn]], [[tình cảm]].
#: ''Mưa gió '''lạnh lùng'''.''
# [[tỏ ra|Tỏ ra]] [[thiếu]] [[hẳn]] [[tình cảm]] trong [[quan hệ]] [[tiếp xúc]] với [[người]], với [[việc]].
#: ''Thái độ '''lạnh lùng'''.''
#: ''Cái nhìn '''lạnh lùng'''.''
#: ''Bình tĩnh đến '''lạnh lùng'''.''
{{-ref-}}
{{R:FVDP}}
cghugkv3dg3whr8tiwju8v9rgqihzsl
nhăn nhó
0
92936
2573798
1880736
2026-10-27T05:47:38Z
~2026-57254-50
62132
/* */
2573798
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|o2|nhăn}}.
{{-pron-}}
{{vie-pron}}
{{-paro-}}
:* [[nhăn nhở]]
{{-adj-}}
{{vi-adj|head=[[nhăn]] nhó}}
# {{term|Mặt}} [[nhăn|Nhăn]] lại, [[hơi]] [[mếu]], [[vẻ]] đau [[khổ]], hoặc [[bất bình]].
#: ''Mặt lúc nào cũng '''nhăn nhó'''.''
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
hgsnzf3tkue21f5x4gmgh4q4xp8nzoy
chậm chạp
0
93429
2573790
1812291
2026-10-27T05:42:35Z
~2026-57254-50
62132
/* */
2573790
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-ap|chậm}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
{{vi-adj|head=[[chậm]] chạp}}
# Có [[tốc độ]], [[nhịp độ]] dưới [[mức]] [[bình thường]] nhiều; rất [[chậm]].
#: ''Xe bò đi '''chậm chạp'''.''
#: ''Bước tiến '''chậm chạp'''.''
# Không được [[nhanh nhẹn]], [[thiếu]] [[linh hoạt]].
#: ''Dáng điệu '''chậm chạp'''.''
{{-syn-}}
; có tốc độ dưới mức bình thường
* [[chậm chà chậm chạp]] {{term|từ láy; ý mức độ nhiều}}
{{-trans-}}
* tiếng Anh: [[slow]]
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
2pgraogixrjv5u2f1c2w59kk05eulcj
gần gũi
0
94114
2573787
2131232
2026-10-27T05:41:47Z
~2026-57254-50
62132
/* */
2573787
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-ui|gần}}.
{{-pron-}}
{{vie-pron}}
{{-paro-}}
* {{vie-l|gần gụi}}
{{-adjective-}}
{{vie-adj|head=[[gần]] gũi}}
# [[gần|Gần]] nhau, về [[quan hệ]] [[tinh thần]], [[tình cảm]] {{q|nói khái quát}}.
#: {{ux|vi|Đi làm xa, ít được '''gần gũi''' con cái.}}
#: {{ux|vi|Bạn bè '''gần gũi'''.}}
{{-verb-}}
{{vie-verb|head=[[gần]] gũi}}
# Có quan hệ [[tốt]], thường xuyên [[tiếp xúc]], [[hiểu]] và [[cảm thông]] [[sâu sắc]] với người dưới mình.
#: {{ux|vi|'''Gần gũi''' với dân.}}
{{-reference-}}
{{R:Tratu|vn|vn}}
{{-further-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
cvya458eapli9yu4jok1gci8wqlw7ka
hở hang
0
94277
2573799
2363368
2026-10-27T05:49:03Z
~2026-57254-50
62132
/* Tiếng Việt */
2573799
wikitext
text/x-wiki
== {{langname|vi}} ==
=== {{ĐM|etym}} ===
{{vi-etym-redup|-ang|hở}}.
=== {{ĐM|paro}} ===
:* [[họ hàng]]
=== {{ĐM|pron}} ===
{{vi-pron}}
=== {{ĐM|adj}} ===
{{vi-adj|head=[[hở]] hang}}
# [[hở|Hở]], không được [[kín]], thường trong cách [[ăn mặc]] {{q|nói khái quát; hàm ý chê}}
#:{{ux|vi|ăn mặc rất '''hở hang'''}}
=== {{ĐM|verb}} ===
{{vi-verb|head=[[hở]] hang}}
# {{like-entry|hở cơ}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
* {{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
ttz9c3c9w4nxualwlk5wu40db6d32kh
thiệt thòi
0
94617
2573777
2100464
2026-10-27T05:37:26Z
~2026-57254-50
62132
/* */
2573777
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|oi1|thiệt}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
{{vi-adj|head=[[thiệt]] thòi|[[舌耒]], [[舌崔]], [[舌催]]}}
* {{synonyms|vi|thiệt|yếu thế}}
#: ''Công đeo đẳng chẳng '''thiệt thòi''' lắm ru (<u>[[w:Truyện Kiều|Truyện Kiều]]</u>)''
#: ''Nhóm người yếu thế/ '''thiệt thòi'''''
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
fd4f27o562e2r3yey7emsmmgo0od57y
ngụy quân
0
95264
2573764
1314932
2026-10-27T04:09:11Z
TienMinh-mun6xnChing
57893
TienMinh-mun6xnChing đã đổi [[nguỵ quân]] thành [[ngụy quân]] qua đổi hướng
1314932
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron|nguỵ|quân}}
{{-see-}}
* {{like-entry|ngụy binh|ngụy binh}}
{{-trans-}}
{{-ref-}}
{{R:FVDP}}
<!-- No category -->
tmkfz7cb5oafx7l82wh0sxfq4mfe071
2573766
2573764
2026-10-27T04:11:02Z
TienMinh-mun6xnChing
57893
/* */
2573766
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron}}
{{-noun-}}
{{pn}}
# [[quân đội|Quân đội]] của [[ngụy quyền]].
#:{{syn|vi|ngụy binh}}
{{-trans-}}
{{-ref-}}
{{R:Tratu}}
{{catname|Danh từ|tiếng Việt}}
0ckw6gm28d08nw8i4xpv7csdk6dr6lp
2573767
2573766
2026-10-27T04:11:21Z
TienMinh-mun6xnChing
57893
/* */
2573767
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron}}
{{-noun-}}
{{pn}}
# [[quân đội|Quân đội]] của [[ngụy quyền]].
#:{{syn|vi|ngụy binh}}
{{-trans-}}
{{-ref-}}
{{R:Tratu|nguỵ quân}}
{{catname|Danh từ|tiếng Việt}}
tod5gmm8zp4ibanc7yd3mi88zxfxca3
2573846
2573767
2026-10-27T10:17:41Z
TheHighFighter2
42988
/* */
2573846
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|alt}}===
* {{alt|vi|nguỵ quân}}
==={{ĐM|etym}}===
{{vi-etym-sino|偽軍}}.
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|noun}}===
{{vi-noun}}
# [[quân đội|Quân đội]] của [[ngụy quyền]].
#:{{syn|vi|ngụy binh}}
===={{ĐM|trans}}====
==={{ĐM|ref}}===
{{R:Tratu|nguỵ quân}}
anw6omvmbh9z52e6xrf88sqv91cn0ik
nước miếng
0
95283
2573804
2520965
2026-10-27T05:58:40Z
~2026-57254-50
62132
/* */
2573804
wikitext
text/x-wiki
{{-vie-}}
{{-info-}}
{{-etym-}}
Từ {{com|vi|nước|miệng}}. Thanh ''nặng'' của ''miệng'' chuyển thành thanh ''sắc'' do đồng hoá thanh điệu với ''nước''. Cùng gốc với {{cog|mtq|-}} Bi {{m|mtq|đác mẽnh||nước miếng}}.
So sánh với {{noncog|zh|口水|tr=kǒushuǐ|lit=nước miệng}}.
{{-pron-}}
{{vie-pron}}
{{-noun-}}
{{vi-noun|head=[[nước]] miếng}}
# [[nước|Nước]] do [[hạch]] ở [[miệng]] [[tiết]] ra để làm cho miệng [[khỏi]] [[khô]] và [[thức ăn]] [[dễ tiêu]].
{{-syn-}}
* [[nước bọt]]
* [[nước dãi]]
{{-trans-}}
{{đầu}}
* {{eng}}: [[saliva]]
* {{jpn}}: [[唾液]]
{{giữa}}
* {{spa}}: [[saliva]] {{g-old|f}}
* {{zho}}: [[唾液]] (''tuò yè'', [[thóa]] [[dịch]])
{{cuối}}
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Dịch cơ thể/Tiếng Việt]]
groa6ajhim7rk8ca2vsb1s6xntjhtqc
2573823
2573804
2026-10-27T07:37:30Z
Hiyuune
50834
2573823
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|etym}}===
Từ {{com|vi|nước|miệng}}. Thanh ''nặng'' của ''miệng'' chuyển thành thanh ''sắc'' do đồng hoá thanh điệu với ''nước''. Cùng gốc với {{cog|mtq|-}} Bi {{m|mtq|đác mẽnh||nước miếng}}.
So sánh với {{noncog|zh|口水|tr=kǒushuǐ|lit=nước miệng}}.
==={{section|n}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun|head=[[nước]] miếng}}
# [[nước|Nước]] do [[hạch]] ở [[miệng]] [[tiết]] ra để làm cho miệng [[khỏi]] [[khô]] và [[thức ăn]] [[dễ tiêu]].
#: {{syn|vi|nước dãi|nước bọt}}
===={{section|trans}}====
{{trans-see|nước bọt}}
==={{section|ref}}===
* {{R:FVDP}}
{{C|vi|Chất lỏng cơ thể}}
t9bb10wn85afa59qmrpinkwi8aiunlr
fun
0
102052
2573647
2537134
2026-10-26T15:04:17Z
WhoAlone
40420
2573647
wikitext
text/x-wiki
{{-eng-}}
{{-pron-}}
* [[Wiktionary:IPA|IPA]]: {{IPA-old|/ˈfən/}}
{{pron-audio
|place=Bắc California, Hoa Kỳ (nữ giới)
|file=En-us-fun.ogg
|pron=ˈfən}}
{{-adj-}}
{{en-adj-old|funn|er|more}}
# {{context|thông tục}} [[thú vị|Thú vị]], [[thích thú]], [[vui]].
#: ''We had a '''fun''' time at the party.''
#: ''He is such a '''fun''' person to be with.''
# {{context|thông tục}} [[chói lọi|Chói lọi]], [[sặc sỡ]], [[rực rỡ]], [[lòe loẹt]].
#: ''This year's fashion style is much more '''fun''' than recent seasons.''
{{-drv-}}
* [[funny]]
{{-noun-}}
{{en-noun-old|-}}
# Sự [[vui đùa]], sự [[vui thích]]; [[trò vui]] [[đùa]].
#: ''to be fond of '''fun''''' — thích vui đùa
#: ''he is great (good) '''fun''''' — anh ta vui thích, anh ta vui đùa
{{-expr-}}
* '''like fun''':
*# [[mạnh mẽ|Mạnh mẽ]]; rất [[nhanh]].
*# Nhiều [[lần]].
*# {{context|Mỹ}} [[chắc chắn|Chắc chắn]] là [[không]]; không [[một chút]] nào; [[đáng ngờ]] lắm.
* '''to make fun of''': {{see-entry|make}}
* '''to poke fun at somebody''': {{see-entry|poke}}
* '''to say something for (in) fun''': [[nói đùa|Nói đùa]].
* '''what fun!''': [[thật là|Thật là]] [[vui thú]]!
{{-intr-verb-}}
'''fun''' ''nội động từ'' {{IPA-old|/ˈfən/}}
# {{context|hiếm|thông tục}} [[đùa|Đùa]], [[nói đùa]] [[đùa cợt]].
{{-forms-}}
{{eng-verb|funs|funning|funned}}
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Tính từ tiếng Anh]]
[[Thể loại:Danh từ tiếng Anh]]
[[Thể loại:Nội động từ tiếng Anh]]
{{-caq-}}
{{-noun-}}
{{head|caq|Danh từ}}
# [[rốn]].
#:{{ux|caq|Si-ti öm va-hav kūö '''fun'''?|Vết đau trên '''rốn '''bạn là sao vậy?}}
{{-ref-}}
* G. Whitehead (1925). ''Dictionary of the Car Nicobarese Language''.
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/fun/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[rốn]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Bộ phận cơ thể}}
klk1bcgc45llmrn1x6u8cs1foigpqrr
Thảo luận Wiktionary:Thảo luận
5
103987
2573625
2571846
2026-10-26T14:01:04Z
MediaWiki message delivery
19980
Mục mới: /* Chuyển đổi máy chủ - Wiki của bạn sẽ sớm chuyển sang chế độ chỉ đọc trong một khoảng thời gian ngắn */
2573625
wikitext
text/x-wiki
<!-- Xin bắt đầu cuộc thảo luận mói ở CUỐI trang! Cám ơn. -->
{{Lưu trữ}}
== Bản tin Kỹ thuật: Tuần 24-2026 ==
<section begin="technews-2026-W24"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/24|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Wikimedia Enterprise đã tăng giới hạn sử dụng miễn phí cho các dịch vụ API của mình. Giới hạn yêu cầu hàng tháng dành cho API Theo yêu cầu đã tăng từ 5.000 lên 50.000 yêu cầu, trong khi giới hạn đối với API Hình chụp nhanh đã tăng từ 15 lên 30 yêu cầu mỗi tháng. Ngoài ra, Nội dung Có cấu trúc của ảnh chụp nhanh hiện đã có sẵn cho các tài khoản miễn phí. Những thay đổi này sẽ mở rộng quyền truy cập vào dữ liệu Wikimedia Enterprise cho các nhà phát triển, nhà nghiên cứu và các tổ chức sử dụng nội dụng Wikimedia. [https://enterprise.wikimedia.com/blog/enhanced-free-api]
'''Cập nhật cho biên tập viên'''
* [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Explore Feed Refresh/Phase 1|Bảng tin Khám phá được làm mới]], nay với tên gọi là Bảng tin Trang chủ, đang được triển khai tới 50% người dùng ứng dụng Wikipedia dành cho Android. Bảng tin Trang chủ giúp người đọc khám phá nội dung liên quan thông qua hai tab mới: ''Cộng đồng'' và ''Dành cho Bạn''. Tab Cộng đồng cung cấp một bảng tin cuộn được chứa những nội dung được chọn lọc cùng những cập nhật từ không gian rộng lớn hơn của cộng đồng và phong trào Wikimedia, trong khi tab ''Dành cho Bạn'' cung cấp trải nghiệm toàn màn hình, có thể vuốt được để hiển thị nội dung được điều chỉnh theo sở thích của người dùng. Việc thiết kế lại này là một phần trong nỗ lực lớn hơn nhằm cải thiện khả năng tìm kiếm và nâng cao trải nghiệm học trong ứng dụng Wikipedia.
* Trò chơi giải đố hàng ngày [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/"Which came first?" Game|Sự kiện nào diễn ra trước nhỉ?]] nay đã có sẵn trong phiên bản beta của ứng dụng Wikipedia dành cho iOS bằng tiếng Anh, tiếng Đức, tiếng Pháp, tiếng Bồ Đào Nha, tiếng Nga, tiếng Tây Ban Nha, tiếng Ả Rập, tiếng Trung và tiếng Thổ Nhĩ Kỳ. Trò chơi này sử dụng các sự kiện lịch sử từ nội dung trong mục "Ngày này năm xưa" của Wikipedia và thử thách người đọc đoán xem sự kiện nào trong hai sự kiện đã xảy ra trước. Trò chơi này đã được phát hành trên Android trước đây. Những cộng đồng quan tâm đến việc cung cấp trò chơi này bằng ngôn ngữ của mình có thể [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Games#Game availability by language|đọc qua hướng dẫn và yêu cầu]].
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Chú thích phụ]], một tính năng MediaWiki mới cho phép biên tập viên tái sử dụng nguồn tham khảo với nhiều chi tiết khác nhau, sẽ bắt đầu được triển khai đến các wiki của Wikimedia sau giải đoạn thí điểm thành công. Việc triển khai sẽ bắt đầu vào ngày 8 tháng 6 đối với hầu hết các [[wikitech:Deployments/Train#Wednesday|wiki Nhóm 1]] và Wikipedia tiếng Pháp, trong khi các phiên bản ngôn ngữ khác của Wikipedia sẽ nhận được tính năng này trong những tháng tới. Các cộng đồng được khuyến khích chuẩn bị bằng cách kiểm tra [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-cite&language=en&action_source=search&filter=%21translated&optional=1&action=translate các thông báo chưa được dịch của phần mở rộng Cite] bằng ngôn ngữ của họ và xem xét bất kỳ việc sử dụng [[mw:Special:MyLanguage/Reference Tooltips|Chú thích nổi]] nào, chúng có thể cần phải được [[:phab:T416304#11668731|cập nhật]] để hỗ trợ chức năng mới này. Những wiki sử dụng [[mw:Special:MyLanguage/Help:Reference Previews|Xem trước Chú thích]] không cần phải thực hiện bất kỳ hành động nào. Các cộng đồng cũng có thể mong muốn tạo [[Special:TrackingCategories|thể loại theo dõi]] ''cite-tracking-category-ref-details'' dưới dạng thể loại ẩn sử dụng <code><nowiki>__HIDDENCAT__</nowiki></code> (hoặc một bản mẫu chuyên dụng), và kết nối nó với khoản mục Wikidata [[d:Q129764848]] tương ứng. [https://phabricator.wikimedia.org/T425662]
* [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews#Experimentation|Thử nghiệm Xem trước Trang]] trên giao diện web di động đã kết thúc. Nhóm đã quyết định không triển khai tính năng này sau khi kết quả cho thấy rằng không có tác động đáng kể nào về mặt thống kê lên tỷ lệ giữ chân người đọc, vì chỉ số thành công chính là việc cải thiện tỷ lệ giữ chân người đọc. Tính năng Xem trước Trang, vốn đã có sẵn trên máy tính để bàn và trong ứng dụng, hiển thị hình thu nhỏ, đoạn mở đầu và liên kết đến bài viết đầy đủ khi người đọc nhấn vào liên kết xanh. Thử nghiệm này đã thử trải nghiệm này trên giao diện web di động trên sáu trang Wikipedia.
* [[mw:Special:MyLanguage/Codex/Design/Icons|Thư viện biểu tượng giao diện người dùng]] sẽ được [[phab:T399175|cập nhật vào cuối tuần này hoặc đầu tuần sau]]. Hầu hết trong số ~300 biểu tượng đã được điều chỉnh một chút và ~30 biểu tượng mới đã được thêm vào. Những thay đổi này cải thiện các biểu tượng để làm cho chúng thêm nhất quán và dễ hiểu hơn, đồng thời mang lại sự cân bằng trực quan hơn khi chúng được sử dụng theo nhóm.
* Giao diện [[mw:Special:MyLanguage/Universal Language Selector|Bộ chọn Ngôn ngữ Toàn cục]] (ULS) trong MediaWiki, công cụ giúp người dùng chọn nội dung bằng các ngôn ngữ khác, đã được cập nhật. Phiên bản mới cải thiện tốc độ và khả năng truy cập, đồng thời giờ đây người dùng trên các dự án Wikimedia có thể ghim các ngôn ngữ để chuyển đổi ngôn ngữ một cách nhanh chóng hơn. Việc triển khai lên các trang web của Wikimedia sẽ diễn ra dần dần trong những tuần tới. Bạn có thể thử nghiệm tính năng này ngay bây giờ bằng cách chọn [[Special:Preferences#mw-prefsection-betafeatures|tính năng beta]] trong tùy chọn hồ sơ của mình và chia sẻ phản hồi của bạn trên [[mw:Special:MyLanguage/Universal Language Selector/New ULS|trang dự án]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:21}} {{PLURAL:21|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến bảng điều khiển Phân tích Lượt xem Trang trên pageviews.wmcloud.org ngừng cập nhật dữ liệu đồ thị vào tháng 5 năm 2026, ảnh hưởng đến tất cả người dùng, đã được giải quyết. [https://phabricator.wikimedia.org/T427171]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Chữ ký hàm cho <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink()</nowiki></code></bdi> đã được đơn giản hóa. Các nhà phát triển nay có thể truyền một đối tượng cấu hình thay vì một danh sách các tham số vị trí khi tạo liên kết portlet. Chữ ký hàm trước đây vẫn được hỗ trợ để đảm bảo khả năng tương thích ngược. Ví dụ, thay vì: <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', '#', 'Stub', 'ca-stubtag', 'Add a stub tag to this page');</nowiki></code></bdi> sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', { href: '#', text: 'Stub', id: 'ca-stubtag', tooltip: 'Add a stub tag to this page' });</nowiki></code></bdi>. Những người bảo trì đoạn mã được khuyến khích xem chỗ nào hiện đang sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink()</nowiki></code></bdi> và cập nhật chúng nếu thích hợp. Thay đổi này sẽ có mặt trên tất cả các wiki từ ngày 11 tháng 6. Xin cảm ơn tình nguyện viên cộng đồng Gerges đã đóng góp cải tiến này. [https://phabricator.wikimedia.org/T427945]
* '''Thảo luận về Danh sách Mong muốn của Cộng đồng''': Nhóm Sản phẩm & Công nghệ [[m:Special:MyLanguage/Community Wishlist/Updates#May 20, 2026: Community Tech becomes a program|đã đưa ra những thay đổi]] nhằm mục đích tăng số lượng và độ phức tạp của những mong muốn được đáp ứng, bao gồm cả việc giải thể nhóm Công nghệ Cộng đồng. Họ đang [[m:Special:MyLanguage/Community Wishlist/Updates|tham gia thảo luận]] về một [[m:Talk:Community Wishlist#Proposed direction for Wishlist|đề xuất hướng đi cho danh sách mong muốn]] từ các thành viên cộng đồng. Bao gồm những cách để cấu trúc việc bỏ phiếu hàng năm, theo dõi mong muốn một cách tốt hơn, loại bỏ các lĩnh vực trọng tâm, và [[m:Special:MyLanguage/Community Wishlist/Updates|điều chỉnh việc quản lý nhân sự]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.6|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/24|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:30, ngày 8 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30650573 -->
== Bản tin Kỹ thuật: Tuần 25-2026 ==
<section begin="technews-2026-W25"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/25|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* [[mw:Special:MyLanguage/Readers/Reader Growth|Nhóm Tăng trưởng Độc giả]] đã cho ra mắt tính năng beta [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Duyệt Hình ảnh]] trên phiên bản web của thiết bị di động tại tất cả các phiên bản Wikipedia. Tính năng này hiển thị ở đầu bài viết một băng chuyền hình ảnh gồm 3 hình ảnh trở lên. Biên tập viên có thể cấu hình cho tính năng này với những thao tác sau: để ẩn một hình ảnh cụ thể khỏi một trang, hãy sử dụng <code>class=notpageimage</code> để loại trừ nó khỏi bản xem trước, hay dùng <code>class=noviewer</code> để loại trừ nó khỏi MediaViewer. Băng chuyền Hình ảnh còn có thể được tắt hoàn toàn ở một trang, với magic word <code><nowiki>__NOMEDIAVIEWERCAROUSEL__</nowiki></code>. Để gửi phản hồi hoặc báo cáo lỗi, hãy truy cập [[mw:Talk:Readers/Reader Growth/Image Browsing|trang dự án]].
* [[mw:Special:MyLanguage/Help:Tables#class="wikitable"|Wikitables]] nay đã có thể được [[mw:Special:MyLanguage/Help:Sortable tables#Forcing the initial sort direction|sắp xếp theo thứ tự giảm dần]] ngay lần nhấp chuột đầu tiên bằng cách thêm <code dir=ltr>data-sort-order="desc"</code> cho ô tiêu đề. Trước đây, theo mặc định, lần nhấp chuột đầu tiên vào tiêu đề cột sẽ sắp xếp cột theo thứ tự tăng dần. Sự bổ sung này cho Wikitable mang lại khả năng kiểm soát và tính linh hoạt cao hơn, trong khi hành vi mặc định cho những lần nhấp chuột tiếp theo vẫn được giữ nguyên. [https://phabricator.wikimedia.org/T398416]
'''Cập nhật cho biên tập viên'''
* Tính năng [[mw:Special:MyLanguage/Article guidance|Hướng dẫn bài viết]] hiện đang được thử nghiệm đối với một số biên tập viên tạo các bài viết mới trên các trang Wikipedia tiếng Anh đơn giản, tiếng Pháp và tiếng Thổ Nhĩ Kỳ. Thử nghiệm cũng sẽ sẽ sớm bắt đầu trên Wikipedia tiếng Ả Rập và tiếng Bengali. [[w:simple:Special:NewArticle|Tính năng này]] cung cấp cho các biên tập viên hướng dẫn do cộng đồng biên soạn để giúp họ tạo ra những bài viết tuân thủ tiêu chuẩn cộng đồng. Các biên tập viên có kinh nghiệm có thể tiếp tục tạo hoặc điều chỉnh dàn ý cho những loại bài viết cụ thể thường được tạo bởi những người đóng góp ít kinh nghiệm hơn. Những dàn ý này hướng dẫn các biên tập viên ít kinh nghiệm hơn trong việc tạo những bài viết chất lượng cao. Hướng dẫn nhanh về các ký hiệu được sử dụng trong dàn ý có thể được tìm thấy trên [[mw:Special:MyLanguage/Article guidance/Test feature guide#Markups in outlines|trang này]]. [[w:simple:Wikipedia:Article Guidance|Ví dụ về dàn ý]] có thể được điều chỉnh và hướng dẫn cách điều chỉnh chúng nằm trên [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|phần này]] của trang dự án.
* Wiki mong muốn thay thế nút "vô thời hạn" trong Đặc biệt:Cấm dành cho tài khoản tạm thời (ví dụ, wiki chỉ cấm tài khoản tạm thời đến khi tài khoản đó hết hạn) sẽ có thể thực hiện điều đó bằng cách tạo [[MediaWiki:ipb-indefinite-expiry-temporary-account]] với khoảng thời gian cấm mà họ muốn. [https://phabricator.wikimedia.org/T427125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:41}} {{PLURAL:41|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]].
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Đến cuối tháng 6, việc sử dụng một chuỗi user-agent hợp lệ là bắt buộc để tải xuống tự động các dump từ trang web dumps.wikimedia.org. Những yêu cầu tự động cung cấp user-agent trống hoặc chung chung sẽ bị chặn. Điều này [[phab:T400119|sẽ mở rộng việc thực thi]] [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|quy định về user-agent]] đã có từ lâu. Quyền truy cập tới Dịch vụ Đám mây của Wikimedia sẽ không thay đổi.
* Quá trình triển khai [[mw:Wikimedia APIs/Rate limits|giới hạn truy cập API]] toàn cục đã hoàn tất, các giới hạn được áp dụng trên tất cả các API và ở tất cả các mức độ được ghi nhận cho tất cả các nhóm. Các bot chạy trong Toolforge/WMCS hoặc có quyền người dùng bot trên bất kỳ wiki nào vẫn được miễn trừ. Tất cả các bot nên tiếp tục theo những thực tiễn tốt nhất được ghi nhận để tránh bị vượt giới hạn truy cập.
* [https://api.wikimedia.org/wiki/Main_Page Wiki Cổng API] sẽ ở chế độ chỉ đọc kể từ tuần này (15-18 tháng 6). Vào tuần tới (22-25 tháng 6), tất cả các URL của wiki Cổng API sẽ chuyển hướng đến [[mw:Wikimedia APIs|API Wikimedia trên mediawiki.org]]. Tìm hiểu thêm trên [[wikitech:API Portal/Deprecation|trang dự án]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.7|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* Vào ngày 17 tháng 6 lúc 18:00 giờ UTC WMF sẽ tổ chức một cuộc gọi Discord tập trung vào việc đánh giá code. Chúng tôi đã lắng nghe thông qua [[mw:Special:MyLanguage/Developer Satisfaction Survey/2026|Khảo sát Sự hài lòng của Nhà phát triển]] rằng các tình nguyện viên đang gặp khó khăn trong việc đánh giá code và chúng tôi muốn thảo luận về những trải nghiệm này với mục tiêu tìm ra những giải pháp khả thi. Bạn có thể tham gia cuộc gọi [https://discord.gg/wikipedia?event=1514727511102062664 thông qua máy chủ Discord Cộng đồng Wikimedia].
* [[m:Special:MyLanguage/Conferencia Wikimedia de América Latina 2026|Hội nghị Wikimedia Mỹ La-tinh]] sẽ tổ chức cuộc thi hackathon khu vực quy tụ cộng đồng kỹ thuật của phong trào Wikimedia, gồm những nhà phát triển, quản trị viên hệ thống, nhà khoa học dữ liệu và các thành viên có quyền mở rộng. Những người đóng góp kỹ thuật quan tâm có thể [https://docs.google.com/forms/d/e/1FAIpQLSf4osJzTHBJjQbYJk7TMVEJjTEQv7IgtsUDfP-o-qTgeRQQxw/viewform đăng ký học bổng] tham gia cho đến nửa đêm ngày 21 tháng 6 (giờ Bolivia, UTC-4).
* Hãy đăng ký tham gia Thử thách Nhóm của Wikimania để góp mặt tại sự kiện đặc biệt này. Thử thách nhóm sẽ diễn ra trực tuyến và trực tiếp từ ngày 21 đến 22 tháng 7, trước hội nghị Wikimania. Mọi người đều có thể tham gia, bất kể kỹ năng hay việc đăng ký Wikimania trước đó như thế nào. Các nhóm sẽ cùng nhau giải quyết 10 thử thách quan trọng trong việc hỗ trợ cộng đồng Wikimedia. Để biết thêm chi tiết, hãy truy cập [[wmania:Special:MyLanguage/2026:Team challenges|trang Thử thách Nhóm]] và [https://wikimedia.eventyay.com/wm/teamchallenges/ đăng ký tại đó]. Cổng đăng ký sẽ đóng vào ngày 20 tháng 6 lúc 23:00 UTC.
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/25|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:48, ngày 15 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:UOzurumba (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30689604 -->
== Bản tin Kỹ thuật: Tuần 26-2026 ==
<section begin="technews-2026-W26"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/26|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* [[mw:Special:MyLanguage/Growth/Feature summary|Các tính năng Phát triển (Growth)]] [[phab:T418115|nay đã có mặt trên Wikidata]]. Bản cập nhật này cho phép truy cập vào chức năng Cố vấn ([[mw:Special:MyLanguage/Help:Growth/Mentorship|nếu được cấu hình]]), mô đun Tác động, Bảng Trợ giúp và Trang chủ dành cho Người mới được đơn giản hóa (không có Đề xuất sửa đổi). Các bảo quản viên Wikidata vẫn đang cấu hình các tính năng thông qua Cấu hình Cộng đồng.
'''Cập nhật cho biên tập viên'''
* Trang đặc biệt [[{{#special:RangeCalculator}}]] đã được tạo. Trang này cho phép người dùng tìm một dải IP mà không cần phải dựa vào các công cụ bên ngoài. Cho đến hiện tại, công cụ này chỉ có sẵn cho các kiểm định viên. [https://phabricator.wikimedia.org/T268429]
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Chú thích phụ]] là một tính năng mới của MediaWiki cho phép biên tập viên tái sử dụng các nguồn tham khảo với những chi tiết khác nhau. Tính năng này sẽ được triển khai đến hầu hết các phiên bản ngôn ngữ Wikipedia quy mô nhỏ và trung bình vào ngày 23 tháng 6. Trang [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|Câu hỏi thường gặp]] liệt kê những hành động có thể thực hiện trên wiki của bạn để hỗ trợ việc triển khai này. Hãy kiểm tra [[:phab:T414094|kế hoạch triển khai]] để biết các bước triển khai tiếp theo. [https://phabricator.wikimedia.org/T428902]
* Bắt đầu từ tuần sau, người dùng sẽ nhận được một thông báo khi họ bị cấm sửa đổi hoặc được bỏ cấm sửa đổi, hoặc khi lệnh cấm thay đổi. [https://phabricator.wikimedia.org/T100974]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:32}} {{PLURAL:32|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]].
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Bắt đầu từ tuần tới, các bộ lọc sai phạm được đặt ở mức "yêu cầu xác minh CAPTCHA" sẽ bắt đầu ảnh hưởng đến cả những người dùng có quyền <code>skipcaptcha</code>, bao gồm hầu hết những người dùng có quyền tự động xác nhận. Các bot sẽ được miễn trừ. Thay đổi này sẽ chỉ ảnh hưởng đến những sửa đổi kích hoạt bộ lọc sai phạm. Quyền <code>skipcaptcha</code> vẫn sẽ tiếp tục giúp người dùng được miễn yêu cầu xác minh CAPTCHA trong quá trình sử dụng wiki thông thường. [https://phabricator.wikimedia.org/T402595]
* Tài liệu tham khảo cho [[wikitech:Machine_Learning/LiftWing/API|API Lift Wing]] đã được chuyển từ Cổng API sang [https://wikitech.wikimedia.org/w/index.php?api=lift-wing&title=Special%3ARestSandbox Chỗ thử REST] mang tính tương tác.
* Wiki Cổng API hiện đã đóng. Để xem tài liệu API, hãy xem [[mw:Special:MyLanguage/Wikimedia_APIs|API Wikimedia trên mediawiki.org]]. Tất cả các URL của wiki Cổng API (https://api.wikimedia.org/wiki/) sẽ đổi hướng tới trang mediawiki.org bắt đầu từ ngày 22 tháng 6. [https://phabricator.wikimedia.org/T427537]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.8|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* Hãy tham gia cuộc gọi trực tuyến vào ngày 25 tháng 6 lúc 2:30 chiều giờ UTC để gặp gỡ các thực tập sinh hiện tại của Wikimedia cho [[mw:Google_Summer_of_Code/2026|Google Summer of Code]] và [[mw:Outreachy/Round_32|Outreachy]]. Các thực tập sinh sẽ giới thiệu tổng quan về các dự án của họ và demo ngắn gọn công việc mà họ đã thực hiện cho đến nay. Người tham dự được khuyến khích [[mw:event:Google_Summer_of_Code/Summer_2026_June_Internship_open_session|chia sẻ ý tưởng và kết nối trong cộng đồng của họ]].
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/26|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:05, ngày 23 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30722494 -->
== RFC about AI-generated content in Wikimedia Commons ==
<bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|thảo luận]])</bdi> 17:12, ngày 23 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Codename Noreste@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== <span lang="en" dir="ltr">Deployment of Legal and Safety Contacts Link in the Footer of Your Wiki</span> ==
<div lang="en" dir="ltr">
<section begin="Message"/>
'''Legal & Safety Contacts'''
Hello community, the Wikimedia Foundation has provided a [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|single legal and safety contact page]], to be linked in the footer of your wiki, to ensure access to accurate legal information. This is a regulatory requirement. We have already rolled out links to English, German, Italian, Spanish and other wikis and we will deploy to your wiki soon. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Please read more on the project page]] and leave any comments in this thread or on the [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|talk page]].
<section end="Message"/>
</div>
-- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 13:31, ngày 25 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Sannita (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=30731267 -->
== Bản tin Kỹ thuật: Tuần 27-2026 ==
<section begin="technews-2026-W27"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/27|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Là một phần của [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Thử nghiệm Tạo Tài khoản]], nhóm Phát triển đã thử nghiệm việc thêm biểu tượng tài khoản người dùng vào tiêu đề trang web trên di động dành cho người dùng chưa đăng nhập, cung cấp quyền truy cập trực tiếp vào các tác vụ "Tạo tài khoản" và "Đăng nhập". Thử nghiệm đã tăng số tài khoản được tạo lên khoảng 20% mà không ảnh hưởng tiêu cực đến chất lượng sửa đổi hoặc tỷ lệ sửa đổi mang tính xây dựng. Tính năng này giờ sẽ được triển khai đến tất cả các trang wiki của Quỹ Wikimedia trên giao diện web di động trong tuần đầu tiên của tháng 7. [https://phabricator.wikimedia.org/T428220]
* Sau một [[phab:T426248|thử nghiệm thành công]], người dùng đã đăng nhập nhưng chưa [[mw:Special:MyLanguage/Help:Email_confirmation|xác nhận địa chỉ email của mình]] khi tạo tài khoản sẽ nhìn thấy một biểu ngữ mới yêu cầu họ hoàn tất quy trình đó. Điều này giúp giảm nguy cơ người dùng bị mất quyền truy cập vào tài khoản của họ, và làm cho địa chỉ email của tài khoản nói chung trở nên đáng tin cậy hơn. Đây là một phần của dự án [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Bảo mật Tài khoản]]. [https://phabricator.wikimedia.org/T428292]
* Một bản cập nhật cho tính năng [[Special:Search|Tìm kiếm]] sẽ tinh chỉnh cách <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> hoạt động khi được sử dụng để loại trừ kết quả. Trước đây, việc sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> với phủ định có thể vô tình mở rộng kết quả tìm kiếm bằng cách thêm các không gian tên nằm trong phạm vi tìm kiếm, dẫn đến hành vi gây khó hiểu đối với những người dùng mong đợi một bộ lọc loại trừ đơn giản. Với lần cập nhật này, <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> nay sẽ loại trừ chặt những tiêu đề trang trùng khớp như mong đợi và có thể hiển thị cảnh báo nếu không gian tên có liên quan không được chọn một cách rõ ràng. Mặc dù vậy, hành vi của <bdi lang="zxx" dir="ltr"><code><nowiki>prefix:</nowiki></code></bdi> khi không có phủ định vẫn sẽ không thay đổi. [https://phabricator.wikimedia.org/T427443]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:33}} {{PLURAL:33|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến người đánh giá sử dụng thanh công cụ Quản lý Trang (Page Curation) không tự động được đăng ký theo dõi các cuộc thảo luận mà họ bắt đầu bình luận trên trang nay đã được giải quyết. Người đánh giá giờ sẽ nhận được thông báo khi có người nào đó trả lời những cuộc thảo luận này. [https://phabricator.wikimedia.org/T329346]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Kể từ ngày 29 tháng 6, các lượt tải xuống tự động từ trang dumps.wikimedia.org sẽ phải tuân theo [[Foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|quy định về user-agent]]. Các yêu cầu tự động mà cung cấp user-agent trống hoặc chung chung sẽ bị chặn. Việc truy cập vào các bản sao lưu (dump) thông qua Dịch vụ Đám mây Wikimedia sẽ không bị ảnh hưởng. Đây là thông báo tiếp theo sau thông báo được đưa ra trong [[m:Special:MyLanguage/Tech/News/2026/25|Bản tin Kỹ thuật số 25-2026]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.9|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/27|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 11:48, ngày 29 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30744833 -->
== <span lang="en" dir="ltr">Tech News: 2026-28</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/28|Translations]] are available.
'''Updates for editors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the search bar results on Wikidata, showed English results instead of using the correct language fallback for users of language variants, has now been fixed. Search suggestions will now follow the expected language fallback chain. [https://phabricator.wikimedia.org/T429769]
'''Updates for technical contributors'''
* In preparation for [[m:Special:MyLanguage/Event:Celebrate Women|Celebrate Women campaign]] planned for March 2027, the Wikimedia Foundation’s [[m:Special:MyLanguage/Wikimedia Foundation/Advancement/Community Growth/Content Enablement|Content Enablement team]] has launched a 22-question survey to better understand technical contributions by women+ (anyone who identifies as a woman) across Wikimedia projects. The survey takes approximately 15–20 minutes to complete and will remain open until 20 July 2026. The [[m:Special:MyLanguage/Celebrate Women/Technical contributions survey|questions]] are also available on-wiki for review in advance.
* The [[mw:Special:MyLanguage/Extension:Score|Score extension]] now supports rendering music scores as SVG images in addition to PNG, addressing a long-standing [[:phab:T49578|feature request]] and resolving historical image quality issues. Both formats are now provided to clients, with PNG in the <bdi lang="zxx" dir="ltr"><code><nowiki>src</nowiki></code></bdi> attribute and SVG in the <bdi lang="zxx" dir="ltr"><code><nowiki>srcset</nowiki></code></bdi> attribute.
* The new [[wikitech:Parsoid|Parsoid]] parser [[mw:Special:MyLanguage/Parsoid/Parser_Unification/Updates|continues to be deployed to additional wikis]], making it easier to introduce new reading and editing features. It was enabled on French Wikipedia, bringing total progress to covering 78.9% of Wikipedia page views. Rollout to English Wikipedia desktop will progress through this week.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.10|MediaWiki]]
'''In depth'''
* The Wikimedia Hackathon 2026 [[diffblog:2026/06/29/wikimedia-hackathon-2026-building-collaborating-and-shaping-the-future-together/|recap blog post]] is now live. It highlights the projects, sessions, and social activities from this year’s event, and shares initial plans for the 2027 Wikimedia Hackathon.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W28"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:57, ngày 6 tháng 7 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30773578 -->
== Bản tin Kỹ thuật: Tuần 29-2026 ==
<section begin="technews-2026-W29"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/29|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Tính năng [[mw:Special:MyLanguage/Growth/Revise_Tone|Xem lại Giọng văn]] giúp người mới xác định những đoạn văn trong bài viết Wikipedia mà có thể chứa ngôn ngữ không bách khoa và khuyến khích họ xem xét lại giọng văn đó. Tính năng này đã được [[w:en:A/B_testing|thử nghiệm A/B]] trên các Wikipedia tiếng Ả Rập, tiếng Anh, tiếng Pháp và tiếng Bồ Đào Nha, tại đó tỷ lệ hoàn thành nhiệm vụ của người mới [[mw:Special:MyLanguage/Growth/Revise_Tone#Experiment_Results|tăng 38.7%]] so với nhiệm vụ Hiệu đính mặc định, mà không làm giảm chất lượng sửa đổi. Cuộc thử nghiệm đã kết thúc vào ngày 9 tháng 7 và tính năng này nay đã có sẵn cho tất cả mọi người trên các wiki này, đồng thời có thể cấu hình được thông qua Cấu hình Cộng đồng. [[phab:T426364|Kế hoạch]] dự kiến là sẽ phát hành Xem lại Giọng văn đến nhiều trang wiki hơn.
* Cấu hình cộng đồng cho phép [[mw:Special:MyLanguage/Help:Growth/Mentorship#Automated mentor list cleanup|tự động loại bỏ cố vấn không hoạt động]] dựa trên các tiêu chí có thể cấu hình được sẽ được kích hoạt vào thứ 5, ngày 16, [[mw:Special:MyLanguage/Growth/Deployment|trên một số wiki]] để đảm bảo danh sách cố vấn được cập nhật. Cố vấn là những người đóng góp có kinh nghiệm, tự nguyện tham gia giúp đỡ người dùng mới trên wiki thông qua [[mw:Special:MyLanguage/Growth/Feature summary|Tính năng Phát triển (Growth)]]. Bảo quản viên nay có thể chuẩn bị các cài đặt thông qua [[w:Special:CommunityConfiguration/Mentorship|Đặc biệt:Cấu hình Cộng đồng/Cố vấn]]; những cài đặt này sẽ có hiệu lực kể từ thứ 5.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:38}} {{PLURAL:38|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến một số người dùng ứng dụng Wikipedia trên thiết bị Android bị đăng xuất ngay sau khi đăng nhập, khiến họ không thể duy trì trạng thái đăng nhập và sửa đổi trang, nay đã được giải quyết. [https://phabricator.wikimedia.org/T316916]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Việc sửa đổi trang thông qua đoạn mã người dùng hoặc tiện ích khiến cho nhãn danh sách theo dõi mà người dùng gán cho trang đó bị đặt lại. Vấn đề này nay đã được giải quyết. [https://phabricator.wikimedia.org/T423778]
* Để khắc phục lỗi Safari (xem [[phab:T425211]]), trên các wiki đã kích hoạt Parsoid, các liên kết wiki href nay sử dụng urls tuyệt đối thay vì url tương đối theo giao thức. Đầu ra API REST vẫn sẽ không thay đổi và sẽ tiếp tục sử dụng url tương đối theo giao thức. Các tiện ích, đoạn mã người dùng, bot và CSS có thể cần được điều chỉnh nếu chúng dựa vào sự hiện diện của url tương đối theo giao thức trong các liên kết wiki href. [https://phabricator.wikimedia.org/T431358]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.11|MediaWiki]]
'''Chuyên sâu'''
* Nhóm Nền tảng Thử nghiệm của Quỹ Wikimedia đã đăng bài viết trên blog phản ánh về năm đầu tiên thực hiện thử nghiệm có cấu trúc của họ. Bài viết nêu bật những thử nghiệm thành công như Kiểm tra Chép dán, Kiểm tra Nguồn tham khảo và Kiểm tra Giọng văn, những thử nghiệm đã cải thiện kết quả sửa đổi và được triển khai cho nhiều người dùng hơn, cũng như những thử nghiệm không dẫn đến việc thay đổi sản phẩm. [[diffblog:2026/07/07/moving-the-needle-how-we-test-new-ideas-across-wikimedia-projects|Đọc thêm]].
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/29|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W29"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:11, ngày 13 tháng 7 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30804401 -->
== Bản tin Kỹ thuật: Tuần 30-2026 ==
<section begin="technews-2026-W30"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/30|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* [[mw:Special:MyLanguage/Reader/Reader Experience|Nhóm Trải nghiệm Người đọc]] đã kết hợp phản hồi của cộng đồng xoay quanh vị trí của các nút sao theo dõi và nút danh sách theo dõi đối với [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|tính năng beta Danh sách Đọc]], nhằm cho phép lưu lại các bài viết để đọc sau – một [[m:Special:MyLanguage/Community Wishlist/W102|mục danh sách mong muốn]] để đưa chức năng này lên web. Các biên tập viên được mời kích hoạt tính năng beta để thử nghiệm tính năng này và [[phab:T426453|chia sẻ suy nghĩ của mình]].
* [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Chế độ Đề xuất]] cung cấp những đề xuất sửa đổi trong Trình Soạn thảo Trực quan để cải thiện các bài viết trên Wikipedia. [[Special:EditChecks|Mọi đề xuất]] đều [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators – local customization|có thể được cộng đồng cấu hình]]. Tính năng [[mw:Special:MyLanguage/Edit check/TextMatch|Văn bản Khớp chính xác]] (TextMatch) là một cách giúp cho các tình nguyện viên có thể tạo đề xuất tùy chỉnh cục bộ. Tính năng này tìm kiếm các chuỗi văn bản trong bài viết, và nay cũng bao gồm việc hỗ trợ cho các biểu thức chính quy. Điều này mang lại cho các tình nguyện viên độ chính xác và tính linh hoạt cao hơn đối với những loại đề xuất mà họ có thể tạo ra cục bộ. Lưu ý: Đề xuất [[mw:Special:MyLanguage/Edit check/Configuration#:~:text=maximumEditcount|có thể được nhắm tới]] dựa trên số lần sửa đổi của người thực hiện sửa đổi cũng như các khía cạnh khác của trang. Bạn có thể [[mw:Special:MyLanguage/Help:Suggestion mode#Create custom local types of Suggestions|tìm ví dụ từ các cộng đồng khác]] để lấy cảm hứng, kể cả việc sử dụng Văn bản Khớp chính xác nhằm phát hiện: lỗi chính tả, lỗi ngữ pháp, có khả năng quảng cáo, lời sáo rỗng, cách sử dụng dấu gạch ngang hoặc dấu gạch nối không chính xác, từ khóa thời gian không cụ thể, tên lỗi thời, v.v. Bất kỳ [[mw:Special:MyLanguage/Talk:VisualEditor/Suggestion Mode|phản hồi]] nào đều được chúng tôi hoan nghênh.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:27}} {{PLURAL:27|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, sự cố về công cụ SVG Translate khiến cho nó có thể sử dụng phiên bản tập tin lỗi thời, khiến các bản dịch hiện có bị ghi đè khi các bản dịch mới được tải lên, nay đã được [[phab:T430577|giải quyết]]. Nhìn chung, trong quý cuối cùng từ tháng 4 đến tháng 6 năm 2026, Quỹ Wikimedia đã giải quyết khoảng 337 tác vụ cộng đồng.
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Trên các wiki có hỗ trợ Parsoid, Parsoid nay hiển thị tối đa 1.250 hình ảnh mỗi trang. Một danh mục theo dõi mới, "media-limit-reached", sẽ sớm được cung cấp để xác định các trang đã đạt đến giới hạn này, giúp dễ dàng tìm thấy nội dung có thể bị hạn chế đầu ra phương tiện trong quá trình hiển thị. Xem [[phab:T430854]] để biết thêm thông tin và cung cấp phản hồi.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.12|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/30|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W30"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 05:46, ngày 21 tháng 7 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30836091 -->
== Request for comment (the future of Abstract Wikipedia) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies if this has not yet been translated into your wiki's language. {{int:Please-translate}}
You are invited to voice your opinions in a [[:m:Requests for comment/The future of Abstract Wikipedia|request for comment about the future of Abstract Wikipedia]]. {{Int:Feedback-thanks-title}}
[[:m:User:Kowal2701|Kowal2701]] ([[:m:User talk:Kowal2701|talk]]) 12:25, ngày 24 tháng 7 năm 2026 (UTC)
</bdi>
<!-- Tin nhắn của Thành viên:DreamRimmer@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== Bản tin Kỹ thuật: Tuần 31-2026 ==
<section begin="technews-2026-W31"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/31|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] Công cụ [[mw:Special:MyLanguage/ContentTranslation|Dịch Nội dung]] nay hỗ trợ chế độ tối, nhằm đáp ứng [[m:Community Wishlist/W544|yêu cầu từ Mong muốn Cộng đồng]]. Điều này giúp công cụ tương thích với các tính năng hỗ trợ khả năng tiếp cận có sẵn trong các giao diện Vector 2022 và Minerva, giúp giảm việc gây mỏi mắt cho người dùng khi dịch nội dung. [https://phabricator.wikimedia.org/T367077]
* Chế độ soạn thảo mã nguồn của Công cụ Thảo luận (DiscussionTools) và Trình soạn thảo mã nguồn 2017 nay sẽ cung cấp tính năng tự động điền cho các liên kết (<bdi lang="zxx" dir="ltr"><code><nowiki>[[</nowiki></code></bdi>), bản mẫu (<bdi lang="zxx" dir="ltr"><code><nowiki>{{</nowiki></code></bdi>), thẻ HTML và phân tích cú pháp (<bdi lang="zxx" dir="ltr"><code><nowiki><</nowiki></code></bdi>), cũng như các từ ma thuật (<bdi lang="zxx" dir="ltr"><code><nowiki>__</nowiki></code></bdi>), giúp việc chèn các liên kết, bản mẫu và mã đánh dấu wiki khác trong quá trình sửa đổi trở nên nhanh chóng và dễ dàng hơn. [https://phabricator.wikimedia.org/T432400]
* [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|Nhóm Phát triển Người đọc]] đã kết thúc việc thử nghiệm với tính năng xem trước trang trên thiết bị di động và sẽ không triển khai tính năng này nữa. Tính năng Xem trước Trang là một cửa sổ bật lên ở cuối trang xuất hiện khi người đọc nhấn vào liên kết xanh, hiển thị hình thu nhỏ, đoạn mở đầu và tùy chọn mở bài viết. Thử ngiệm cho thấy tỷ lệ giữ chân người dùng không thay đổi nhưng các chỉ số khác đều mang tính tiêu cực, điều này có nghĩa là người đọc trên trang web dành cho thiết bị di động thích truy cập trực tiếp vào các bài viết được liên kết hơn là sử dụng tính năng xem trước trang.
* Nhóm Trải nghiệm Người đọc đã bước đầu ghi nhận những kết quả khả quan từ [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|tính năng Danh sách Đọc]], trong đó 93% người dùng tham gia báo cáo rằng tính năng này hữu ích. Danh sách Đọc giúp người đọc hoạt động tích cực lưu lại các bài viết để đọc sau này và hỗ trợ mục tiêu học tập của họ trên các dự án Wikimedia. Nhóm dự định sẽ tiếp tục cải tiến trước khi mở rộng tính năng này cho nhiều người dùng hơn.
* Sáng kiến [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh|Làm mới Nguồn cấp dữ liệu Khám phá]] đã được thử nghiệm với những người đọc mới và không thường xuyên sử dụng ứng dụng Wikipedia. Nguồn cấp dữ liệu được làm mới giúp người đọc khám phá những nội dung mới và phù hợp với mình. Với kết quả mức độ tương tác với nguồn cấp dữ liệu tăng 10,5%, nhóm Ứng dụng Wikimedia đã quyết định mở rộng việc thiết kế lại Nguồn cấp dữ liệu Trang chủ sang iOS, áp dụng những kinh nghiệm thu được từ phiên bản dành cho Android.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:23}} {{PLURAL:23|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến cho tên chủ đề trong tính năng Hướng dẫn Bài viết hiển thị sai cách viết hoa trên Wikipedia tiếng Pháp nay đã được giải quyết. Tên chủ đề nay sẽ tuân theo đúng quy tắc viết hoa của ngôn ngữ đó. [https://phabricator.wikimedia.org/T427201]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Sau khi thực hiện một số [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Thử nghiệm Tạo Tài khoản]] để cải thiện tỷ lệ hoàn tất việc đăng ký, một phiên bản mới của trường tên người dùng trên trang [[Special:CreateAccount|Tạo Tài khoản]] đã được triển khai. Phiên bản này bao gồm [[:c:File:Create account - July 2026 updates.png|một cửa sổ bật lên nhằm tóm tắt quy định về tên người dùng]] để cung cấp hướng dẫn rõ ràng hơn trong quá trình tạo tài khoản. Là một phần của thay đổi này, các thông báo <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-helpusername</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-help</nowiki></code></bdi> mà một số cộng đồng đã cấu hình sẽ không còn được sử dụng nữa. Nếu cộng đồng muốn tùy chỉnh hướng dẫn hiển thị trong cửa sổ bật lên mới, cộng đồng có thể sửa đổi các thông báo sau: <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet1</nowiki></code></bdi>, <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet2</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet3</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T430604]
* Cuối tuần này, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|trình làm nổi bật cú pháp CodeMirror]] sẽ cung cấp [[w:en:Theme (computing)|các chủ đề]]. Các chủ đề có thể được chọn từ menu thả xuống trong hộp thoại [[mw:Special:MyLanguage/Help:Extension:CodeMirror#CodeMirror preferences|tùy chọn CodeMirror]] hoàn chỉnh. Đối với mã wiki, các chủ đề có sẵn là mặc định, thân thiện với người mù màu (trước đây là tùy chọn dễ phân biệt cho người mù màu trong [[Special:Preferences#mw-prefsection-editing]]) và không làm nổi bật. Đối với các ngôn ngữ lập trình (ví dụ: CSS/JavaScript/JSON/Vue/Lua), hiện có sẵn một vài chủ đề. Các chủ đề tương tự này sau này cũng sẽ có sẵn cho mã wiki. [https://phabricator.wikimedia.org/T163533]
* Kể từ giờ trở đi, các wiki có thể giới hạn sửa đổi trong không gian tên "Thành viên" chỉ cho chính thành viên đó và một số nhóm người dùng nhất định. [[mw:Special:MyLanguage/Manual:$wgRestrictUserPageEditing|Đọc tài liệu hướng dẫn cấu hình]] để tìm hiểu thêm.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.14|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/31|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W31"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:49, ngày 27 tháng 7 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30856308 -->
== Bản tin Kỹ thuật: Tuần 32-2026 ==
<section begin="technews-2026-W32"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/32|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* [[mw:Special:MyLanguage/Readers/Reader Experience|Nhóm Trải nghiệm Người đọc]] đã phát triển một [https://82db7c8d4b.catalyst.wmcloud.org/w/index.php?title=Regent%27s_Park&uselang=de bản vá demo] nhằm bọc thanh công cụ trang thành hai dòng nếu không có đủ không gian bề ngang cho tất cả các nút. Điều này nhằm mục đích giảm tình trạng quá tải trên thanh công cụ trong giao diện Vector 2022, có thể xảy ra trên một số trang ngôn ngữ Wikipedia trên một số độ rộng màn hình nhất định. [https://phabricator.wikimedia.org/T429518]
* Nhóm Trải nghiệm Người đọc dự kiến sẽ phát hành [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Danh sách Đọc]], một [[m:Special:MyLanguage/Community Wishlist Survey 2021/Mobile and apps/Have Apps reading lists available on Destop/Mobile|mục trong Danh sách Mong muốn Cộng đồng]], hiện đang có sẵn để dùng thử dưới dạng tính năng beta, dưới dạng tính năng đầy đủ vào tháng 9. Trước thời điểm đó, chúng tôi cần các tình nguyện viên biên dịch giúp [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-readinglists&filter=&action=translate dịch các chuỗi này] sang những ngôn ngữ khác. Tính năng này giúp hỗ trợ các mục tiêu đọc và học tập trên Wikipedia.
* Vào tuần tới, mục lục trên các trang tập tin Wikimedia Commons sẽ được cải thiện bằng cách hợp nhất mục lục trang tập tin với mục lục của trang. Điều này sẽ giúp việc hiểu cấu trúc trang tập tin, điều hướng đến những đề mục cụ thể, và chia sẻ liên kết đến các đề mục riêng biệt trở nên dễ dàng hơn. [https://phabricator.wikimedia.org/T332644]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:24}} {{PLURAL:24|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một lỗi khiến cho một số hình [[w:TIFF|TIFF]] không thể tải được sau khi nhấn vào hình thu nhỏ của nó, khiến cho hình bị hỏng được hiển thị thay vì hình có kích thước đầy đủ, nay đã được giải quyết. [https://phabricator.wikimedia.org/T429326]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Bộ chọn biến và hàm trong Bộ lọc Sai phạm (AbuseFilter) đã được cập nhật để hỗ trợ tìm kiếm và tự động điền. Điều này sẽ giúp những người quản lý bộ lọc tìm kiếm biến hoặc hàm mong muốn nhanh hơn. [https://phabricator.wikimedia.org/T323698]
* Các định dạng MJPEG và VP8 đã bị loại bỏ khỏi trình phát video. Thay vào đó, định dạng MP4 (MPEG-4 Phần 2) được thêm vào, nhằm cung cấp video chất lượng cao hơn cho các thiết bị iPhone đời cũ. Việc cập nhật lại tất cả các video hiện có sẽ có thể mất vài tuần. Định dạng mặc định cho các thiết bị hiện đại vẫn sẽ được giữ nguyên (VP9/WebM). [https://phabricator.wikimedia.org/T358266]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.15|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/32|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W32"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:46, ngày 3 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30872536 -->
== Bản tin Kỹ thuật: Tuần 33-2026 ==
<section begin="technews-2026-W33"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/33|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Mục Mong muốn cộng đồng]] Công cụ mới Trình tạo Biểu đồ (ChartWizard) [[c:Special:ChartWizard/Data:Example.Pie.chart|nay đã có mặt trên Wikimedia Commons]] dành cho các thành viên có mong muốn tạo các biểu đồ từ dữ liệu của riêng mình. Trình hướng dẫn này giúp [[mw:Special:MyLanguage/Extension:Chart|phần mở rộng Chart]] trở nên thân thiện hơn với người mới bắt đầu bằng cách cho phép các biên tập viên tạo biểu đồ, chẳng hạn như biểu đồ cột và biểu đồ tròn, mà không cần phải sử dụng JSON. Các thành viên vẫn có thể chuyển sang trình soạn thảo mã JSON nếu họ muốn. Mọi ý kiến đóng góp về công cụ mới này đều được hoan nghênh trên [[m:Talk:Community Wishlist/W414|trang thảo luận của mong muốn này]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:19}} {{PLURAL:19|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho tiện ích Hình ảnh của Ngày của ứng dụng Wikipedia dành cho iOS hiển thị cùng một hình ảnh mỗi ngày thay vì cập nhật hàng ngày, nay đã được giải quyết. [https://phabricator.wikimedia.org/T430692]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Hình ảnh SVG cho [[mw:Special:MyLanguage/Extension:Math|công thức toán học]] sẽ sớm được tạo trong trình duyệt thay vì trên máy chủ. MathML vẫn sẽ tiếp tục được tạo trên máy chủ và hiển thị trong trình duyệt mà không cần JavaScript. Wikibooks sẽ áp dụng thay đổi này vào ngày 12 tháng 8, Wikisource vào ngày 19 tháng 8 và Wikipedia từ ngày 20-27 tháng 8. Bạn có thể thử thay đổi này bằng cách chọn "{{int:Mw-math-mathjax}}" trong phần tùy chọn của bạn. Thay đổi này là một phần trong lộ trình [[mw:Special:MyLanguage/RESTBase/deprecation|ngừng sử dụng RESTBase]] và [[phab:T431372|ngừng sử dụng Mathoid]]. [https://phabricator.wikimedia.org/T271001]
* <span class="mw-translate-fuzzy">Các trang thể loại sẽ sớm hỗ trợ việc sắp xếp các mục theo thời gian chúng được thêm vào thể loại. Điều này sẽ giúp việc tìm kiếm các trang được xếp thể loại gần đây hoặc đã xếp từ lâu trở nên dễ dàng hơn. Tính năng này cũng sẽ cải thiện quy trình làm việc đối với các thể loại bảo trì chẳng hạn như danh sách trang chờ xóa và các tác vụ rà soát theo thời gian khác. Bạn có thể sử dụng tham số URL <bdi lang="zxx" dir="ltr"><code><nowiki>cldsort=timestamp</nowiki></code></bdi> trong chế độ xem thể loại để sắp xếp các mục này.</span> [https://phabricator.wikimedia.org/T433768]
* Các [[mw:Special:MyLanguage/Extension:Gadgets|tiện ích]] và đoạn mã người dùng trên các wiki của Wikimedia nay có thể sử dụng [[phab:T395347|các tính năng theo chuẩn ES2018]] và [[phab:T419142|các tính năng theo chuẩn ES2019]] trong đoạn mã JavaScript. Trước đây, nền tảng chỉ cho phép sử dụng tối đa đến chuẩn ES2017. MediaWiki kiểm tra mã nguồn để bảo vệ chức năng khỏi các lỗi cú pháp và đảm bảo các đoạn mã đều hợp lệ trên tất cả [[mw:Special:MyLanguage/Compatibility#Browser_support_matrix|các trình duyệt được hỗ trợ]]. [https://phabricator.wikimedia.org/T419142]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.16|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/33|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W33"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:45, ngày 10 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30901051 -->
== Bản tin Kỹ thuật: Tuần 34-2026 ==
<section begin="technews-2026-W34"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/34|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Worklist|Tính năng Danh sách Công việc (Worklist)]] dành cho công cụ Đăng ký Sự kiện nay đã có mặt trên tất cả các dự án wiki của Wikimedia. Với Danh sách Công việc, ban tổ chức sự kiện có thể thêm trực tiếp các bài viết mà sẽ là trọng tâm của sự kiện vào trang sự kiện. Danh sách Công việc cũng hỗ trợ tính năng [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Worklist#How Event Pathways uses the worklist|Lộ trình Sự kiện (Event Pathways)]] giúp thông báo cho các biên tập viên khác về sự kiện sắp hoặc đang diễn ra khi họ sửa đổi một bài viết có trong Danh sách Công việc của sự kiện đó. Đây là phiên bản khả thi tối thiểu (MVP), và chúng tôi hoan nghênh mọi ý kiến đóng góp. Các ban tổ chức được khuyến khích thử tính năng này. Buổi [[m:Special:MyLanguage/Event:Worklist Setup Workshop: Get Your Event Ready|Hội thảo Thực hành Danh sách Công việc]] sẽ diễn ra vào ngày 18 tháng 6 lúc 16:00 UTC và ngày 19 tháng 6 lúc 11:00 UTC.
'''Cập nhật cho biên tập viên'''
* [[Special:ShortPages]] hiển thị các trang ngắn dựa trên kích thước của chúng, nhưng trong nhiều trường hợp danh sách này bị lấp đầy bởi các trang định hướng và đổi hướng mềm, khiến việc tìm kiếm chính các bài viết ngắn đó trở nên khó khăn hơn. Kể từ cuối tuần này, bạn sẽ có thể loại bỏ một bài viết khỏi trang đặc biệt này bằng cách thêm từ ma thuật <bdi lang="zxx" dir="ltr"><code><nowiki>__EXPECTSHORTPAGE__</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T433203]
* Một wiki mới đã được tạo ra: {{int:project-localized-name-group-wikipedia/vi}} tiếng [[d:Q3436680|Bole]] ([[w:bol:|<bdi lang="zxx" dir="ltr"><code><nowiki>w:bol:</nowiki></code></bdi>]]) [https://phabricator.wikimedia.org/T429921]
* Kể từ tuần ngày 17 tháng 8, thanh công cụ trang sẽ tự động xuống thành hai hàng khi không còn đủ không gian theo chiều ngang để hiển thị tất cả các nút. Đây là một [[phab:T429518|bản vá đã được hợp nhất hoàn toàn từ nhóm Trải nghiệm Người đọc]] nhằm giảm bớt tình trạng chật không gian trên thanh công cụ của giao diện Vector 2022, một vấn đề mà có thể xảy ra trên một số phiên bản ngôn ngữ Wikipedia ở một số độ rộng màn hình nhất định.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:16}} {{PLURAL:16|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, việc tải các tập tin có dung lượng lớn lên Wikimedia Commons đã trở nên ổn định hơn và ít gặp lỗi hơn sau một số bản sửa lỗi liên quan đến lỗi tải lên "Không thể lấy khóa". [https://phabricator.wikimedia.org/T386640]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Debian Bullseye sẽ kết thúc Hỗ trợ Dài hạn vào ngày 31 tháng 8 năm 2026. [[phab:T434103|Một số dự án Cloud VPS]] vẫn còn instance đang chạy Debian Bullseye. Bảo trì viên của những dự án này được khuyến khích chuyển sang Debian Bookworm hoặc Debian Trixie. Hiện đã có trang [[wikitech:Help:Cloud VPS instance operating system migration|hướng dẫn di chuyển]] nhằm giúp thực hiện quy trình này, đồng thời các thành viên cũng có thể muốn xem xem liệu khối lượng công việc của họ có phù hợp hơn với Toolforge hay không. Nếu bạn cần trợ giúp hoặc không thể hoàn tất quá trình chuyển đổi trước ngày 31 tháng 8, vui lòng liên hệ với quản trị viên Cloud VPS càng sớm càng tốt. [[listarchive:list/cloud-announce@lists.wikimedia.org/thread/RVIPQSYLKMSL5M46JP6NEJVGVE6I2RXQ/|Đọc thêm]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.16|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/34|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W34"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:03, ngày 17 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30922806 -->
== Bản tin Kỹ thuật: Tuần 35-2026 ==
<section begin="technews-2026-W35"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/35|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Trang [[Special:CreateAccount|Đặc biệt:Tạo tài khoản]] đã được đơn giản hóa như là một phần của nỗ lực nhằm hiện đại hóa trải nghiệm tạo tài khoản. Khung hiển thị số liệu thống kê về dự án sẽ không còn xuất hiện bên cạnh biểu mẫu trên giao diện trang web máy tính và di động. Nhiều thử nghiệm tạo tài khoản cho thấy việc sử dụng biểu mẫu đơn giản hơn giúp người dùng mới hoàn tất quy trình đăng ký dễ dàng hơn. [https://phabricator.wikimedia.org/T433783]
* Để cải thiện hiệu suất trang, các hình ảnh nay sẽ chỉ được tải khi người dùng xem chúng. Điều này có nghĩa là những hình ảnh nằm ở phần dưới của bài viết sẽ không được tải nếu người đọc không bao giờ cuộn trang xuống phần đó của bài viết, điều này có thể ảnh hưởng đến một vài số liệu liên quan đến hình ảnh. [https://phabricator.wikimedia.org/T148047]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:42}} {{PLURAL:42|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho các hình thu nhỏ trên Abstract Wikipedia có thể không hiển thị được sau khi tập tin tương ứng được di chuyển trên Wikimedia Commons, nay đã được giải quyết. Các hình thu nhỏ nay sẽ được cập nhật chính xác khi tập tin được di chuyển. [https://phabricator.wikimedia.org/T433448]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Thẻ Thông tin Thành viên là một tính năng giúp các tuần tra viên xem thông tin về các tài khoản người dùng. Trước đây, tính năng này chỉ xuất hiện ở những nơi chẳng hạn như lịch sử trang, nhật trình và thay đổi gần đây. Giờ đây, các thành viên cũng có thể [[mw:Special:MyLanguage/Help:Extension:CheckUser#User_Info_card_in_page_content|đặt thẻ này vào nội dung trang]], bằng cách sử dụng hàm phân tích cú pháp <bdi lang="zxx" dir="ltr"><code><nowiki>{{#uic:}}</nowiki></code></bdi>. Điều này đặc biệt hữu ích trong các bản mẫu như [[:en:Template:Userlinks|<bdi lang="zxx" dir="ltr"><code><nowiki>{{Userlinks}}</nowiki></code></bdi>]] (hoặc các biến thể chuyên biệt của chúng), vì nó sẽ giúp việc xem thông tin về thành viên trên nhiều trang bảng tin nhắn trở nên dễ dàng hơn. Thẻ này sẽ chỉ được hiển thị với những người dùng đã kích hoạt tính năng này trong phần [[Special:Preferences#mw-input-wpcheckuser-userinfocard-enable|tùy chọn]] của mình. [https://phabricator.wikimedia.org/T424466]
* Do những rủi ro về bảo mật và quyền riêng tư của người dùng, chúng tôi đã vô hiệu hóa quyền truy cập vào các URL dẫn đến trang <bdi lang="zxx" dir="ltr"><code><nowiki>Special:MyPage</nowiki></code></bdi> khi sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. Nếu điều này ảnh hưởng tới bạn, hãy cân nhắc xem bạn có thể sử dụng một phương thức nào đó thay thế hay không. Các URL dẫn đến trang <bdi lang="zxx" dir="ltr"><code><nowiki>Special:MyPage</nowiki></code></bdi> vẫn có thể truy cập và sử dụng được mà không cần sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. Các URL cụ thể cho trang thành viên (v.d. <bdi lang="zxx" dir="ltr"><code><nowiki>User:Myusername</nowiki></code></bdi>) vẫn có thể được sử dụng với <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T120386]
* Nhờ một bản cập nhật, phần mềm tạo hình thu nhỏ đã được cải tiến. Nó bao gồm việc nâng cấp <bdi lang="zxx" dir="ltr"><code><nowiki>librsvg</nowiki></code></bdi> lên phiên bản 2.60 và <bdi lang="zxx" dir="ltr"><code><nowiki>ImageMagick</nowiki></code></bdi> lên 7, cũng như việc khắc phục một số lỗi tạo hình thu nhỏ đã tồn tại từ lâu chẳng hạn như lỗi hiển thị. [https://phabricator.wikimedia.org/T419815#12222841]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.17|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/35|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W35"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:45, ngày 24 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30961208 -->
== Bản tin Kỹ thuật: Tuần 36-2026 ==
<section begin="technews-2026-W36"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/36|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Một hình thức mới cho Danh sách Mong muốn Cộng đồng hiện đang được lấy ý kiến đóng góp. Bạn có thể [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027|đọc các ý tưởng đề xuất trên Meta]]. Quy trình mới này nhằm nâng cao hiệu quả sàng lọc, bỏ phiếu và ưu tiên cho các mong muốn nhằm đảm bảo tính minh bạch và sự cân bằng giữa các nhóm dự án và phiên bản ngôn ngữ. Đợt tham vấn này sẽ kéo dài trong vòng hai tuần.
'''Cập nhật cho biên tập viên'''
* Bản phát hành mới nhất của ứng dụng Wikipedia dành cho Android bao gồm các cập nhật đối với tính năng Đã lưu (Saved), giúp trải nghiệm lưu bài viết trên ứng dụng trở nên đồng bộ hơn với phiên bản iOS và Web. Bản cập nhật này thiết kế lại tab Đã lưu với giao diện “Tất cả bài viết”, xóa bỏ danh sách đọc mặc định “Đã lưu”, đổi tên các danh sách đọc thành “Bộ sưu tập” (Collections) và hiện đại hóa trải nghiệm lưu bài viết. [https://phabricator.wikimedia.org/T420788]
* Tính năng [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Danh sách Đọc]] đã được kích hoạt cho tất cả người dùng đã đăng nhập trên Wikipedia tiếng Bengali, tiếng Trung, tiếng Séc và tiếng Việt vào ngày 25 tháng 8, sau vài tháng hoạt động dưới dạng tính năng thử nghiệm (beta). Danh sách Đọc sẽ được triển khai đến tất cả người dùng đã đăng nhập trên Wikipedia tiếng Ả Rập, tiếng Pháp và tiếng Indonesia vào ngày 1 tháng 9, sau đó là Wikipedia tiếng Anh vào ngày 14 tháng 9, và trên tất cả các wiki Wikipedia còn lại vào ngày 28 tháng 9.
* Vào cuối tháng này, một số độc giả chưa đăng nhập trên Wikipedia tiếng Bengali, tiếng Séc, tiếng Ba Tư, tiếng Anh và tiếng Ba Lan sử dụng giao diện Minerva trên thiết bị di động sẽ nhìn thấy một [[mw:Special:MyLanguage/Readers/Reader_Growth/Minimal_Minerva|thanh điều hướng được cập nhật]] trong [[:w:vi:Thử nghiệm A/B|thử nghiệm A/B]]. Thử nghiệm này sẽ so sánh thanh điều hướng hiện tại với phiên bản mới được thiết kế nhằm giúp người dùng tìm kiếm thông tin một cách nhanh chóng và dễ dàng hơn. Mục tiêu là xác định xem những thay đổi này có khuyến khích độc giả quay lại thường xuyên hơn hay không. Thử nghiệm này sẽ không làm thay đổi trải nghiệm của người dùng và/hoặc biên tập viên đã đăng nhập.
* Các biên tập viên chuyên bảo trì các trang đổi hướng, bản mẫu và thể loại được sử dụng trên các trang đổi hướng nay có thêm các phương thức cải tiến để tìm kiếm và quản lý trang đổi hướng. Trước đây, các trang đổi hướng không thể tìm kiếm được. Hai từ khóa tìm kiếm mới, <bdi lang="zxx" dir="ltr"><code><nowiki>onlyredirects:</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>withredirects:</nowiki></code></bdi>, giờ đây cho phép tìm kiếm trực tiếp các trang đổi hướng và có thể kết hợp với các từ khóa hiện có như <bdi lang="zxx" dir="ltr"><code><nowiki>incategory:</nowiki></code></bdi>, <bdi lang="zxx" dir="ltr"><code><nowiki>intitle:</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>insource:</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T204089]
* Các công cụ tìm kiếm ISBN để tạo các nguồn trích dẫn gần đây đã không hoạt động do các vấn đề liên quan đến dịch vụ bên ngoài. Các nhà phát triển đang nỗ lực để tìm giải pháp khắc phục. [https://phabricator.wikimedia.org/T435179]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:30}} {{PLURAL:30|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho việc tìm kiếm trang theo thể loại sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>deepcat</nowiki></code></bdi> có thể không trả về kết quả hoặc trả về kết quả không liên quan nay đã được giải quyết. [https://phabricator.wikimedia.org/T414859]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Tên miền của URL cho hình thu nhỏ đang được thay đổi từ $1 sang thumb.wikimedia.org. Các URL cũ sẽ tiếp tục hoạt động trong tương lai gần, nhưng MediaWiki sẽ chuyển sang sử dụng tên miền mới. Các URL trỏ đến các loại tập tin đa phương tiện khác như tập tin gốc, video và tập tin chuyển mã vẫn sẽ được phục vụ từ upload.wikimedia.org. [https://phabricator.wikimedia.org/T427465]
* [https://www.mediawiki.org/w/index.php?api=wmf-math%2Fv1&title=Special%3ARestSandbox API Toán học (Math API)] của Wikimedia hiện đã lỗi thời và không còn được hỗ trợ. Các điểm cuối (endpoints) này sẽ chính thức ngừng hoạt động hoàn toàn vào cuối tháng 9 năm 2026. Các nhà phát triển gọi các điểm cuối này nên chuyển sang các giải pháp hiển thị toán học thay thế, chẳng hạn như [https://developer.mozilla.org/en-US/docs/Web/MathML MathML] tích hợp sẵn hoặc [https://www.mathjax.org/ MathJax]. Các hệ thống MediaWiki được cài đặt bởi bên thứ ba sử dụng phần mở rộng Math để hiển thị công thức bắt buộc phải nâng cấp lên phiên bản v1.43 trở lên để tránh gián đoạn dịch vụ.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.18|MediaWiki]]
'''Chuyên sâu'''
* Đọc thêm về [[mw:Special:MyLanguage/Edit_check/TextMatch|TextMatch]] trong một bài viết trên Diff có tiêu đề: [[diffblog:2026/08/28/custom-edit-suggestions-for-every-wiki-how-communities-are-shaping-suggestion-mode-with-textmatch/|Đề xuất sửa đổi tùy chỉnh cho mọi wiki: Cộng đồng đang định hình Chế độ Gợi ý với TextMatch như thế nào]].
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/36|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W36"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:53, ngày 31 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30990659 -->
== Bản tin Kỹ thuật: Tuần 37-2026 ==
<section begin="technews-2026-W37"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/37|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Tính năng [[mw:Special:MyLanguage/Help:Growth/Tools/Add_a_link|Thêm Liên kết]] đã được nâng cấp cho người dùng trên Wikipedia tiếng Anh với khả năng phát hiện tốt hơn các liên kết có sự khác biệt về cách viết hoa. Cải tiến này sẽ giúp giảm bớt những gợi ý mơ hồ gây ra do sự khác biệt về cách viết viết hoa trong tiêu đề bài viết, bao gồm cả những bài viết về các sản phẩm văn hóa. Hiện kế hoạch cải tiến giai đoạn 2 đã được lên lịch, kế hoạch cũng sẽ nhằm mục đích chuẩn bị phát hành tính năng này ở các ngôn ngữ khác. [https://phabricator.wikimedia.org/T435526#12240876] [https://phabricator.wikimedia.org/T434259]
* Tính năng [[mw:Special:MyLanguage/Article_guidance|Chỉ dẫn bài viết]] sẽ được bật theo mặc định cho các biên tập viên mới trên Wikipedia tiếng Anh Đơn giản và Wikipedia tiếng Thổ Nhĩ Kỳ kể từ ngày 10 tháng 9 năm 2026 sau khi đã trải qua [[mw:Special:MyLanguage/Article_guidance/Updates#Summary_of_experiment_result|một cuộc thử nghiệm]]. Các biên tập viên mới có từ 0 đến 99 sửa đổi sẽ tự động nhìn thấy tính năng này khi họ nhấn vào liên kết đỏ hoặc sử dụng tùy chọn "[[tr:Vikipedi:Madde_sihirbazı|Madde oluşturto]]" (tạo bài viết) trên Wikipedia tiếng Thổ Nhĩ Kỳ để tạo bài viết mới. Thay đổi này nhằm mục đích giúp các biên tập viên mới tạo các bài viết có chất lượng cao hơn và đáp ứng các tiêu chuẩn của từng dự án Wikipedia. [[phab:maniphest/query/z3tcTjmLMxk5/#R|Các cải tiến bổ sung]] sẽ tiếp tục được thực hiện dựa trên kết quả thử nghiệm và phản hồi từ cộng đồng.
* Công cụ [https://pageviews.wmcloud.org Phân tích Lượt xem Trang] nhằm cho phép người dùng so sánh lượt xem giữa nhiều trang, năm nay đã tròn 10 tuổi và được bổ sung thêm một số tính năng mới. Chúng bao gồm [[toolforge:wikinav|WikiNav]] nhằm cung cấp thông tin chuyên sâu vào cách độc giả Wikipedia khám phá nội dung, thống kê sửa đổi trong mục [https://pageviews.wmcloud.org/siteviews?range=latest-30&sites=en.wikipedia.org Siteviews], khả năng [https://pageviews.wmcloud.org/massviews?source=wikiproject&project=en.wikipedia.org tra cứu bài viết thuộc Dự án Wiki], cũng như hỗ trợ chế độ tối. [https://phabricator.wikimedia.org/T378549]
* Một thanh điều hướng [[mw:Special:MyLanguage/Readers/Reader_Growth/Minimal_Minerva|Minerva được đơn giản hóa về mặt trực quan]] đang được thử nghiệm dành cho các độc giả chưa đăng nhập sử dụng giao diện web di động trên các dự án Wikipedia tiếng Bengal, tiếng Séc, tiếng Anh, tiếng Ba Tư và tiếng Ba Lan. Thử nghiệm này nhằm xác định xem việc đơn giản hóa thanh điều hướng có cải thiện việc giữ chân độc giả hay không. Thử nghiệm sẽ diễn ra từ ngày 31 tháng 8 đến ngày 28 tháng 9, và người dùng không cần phải thực hiện bất kỳ thao tác nào.
* [[m:Special:MyLanguage/WMDE Technical Wishes|Nhóm Mong muốn Kỹ thuật của WMDE]] đang thực hiện việc cải tiến [[en:Wikipedia:VisualEditor/Named references|tên nguồn tham khảo được tạo tự động trong Trình Soạn thảo Trực quan]]. Các biên tập viên sẽ chỉ nhận thấy một thay đổi nhỏ kể từ tuần này. Khi thêm tên nguồn tham khảo tự động việc đánh số sẽ bắt đầu tại <bdi lang="zxx" dir="ltr"><code><nowiki>:1</nowiki></code></bdi> thay vì <bdi lang="zxx" dir="ltr"><code><nowiki>:0</nowiki></code></bdi>. Đọc thêm trên [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|trang dự án]]. [https://gerrit.wikimedia.org/r/c/VisualEditor/VisualEditor/+/1332704]
* Tất cả các wiki sẽ [[m:Special:MyLanguage/Tech/Server switch|chuyển sang chế độ chỉ đọc trong vài phút]] vào ngày 23 tháng 9. Kế hoạch dự kiến diễn ra lúc 14:00 UTC. Thông tin thêm về kế hoạch này sẽ được xuất bản trong Bản tin Kỹ thuật và cũng sẽ được đăng lên trên từng wiki trong các tuần tiếp theo. [https://phabricator.wikimedia.org/T433363]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:25}} {{PLURAL:25|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho [[mw:Special:MyLanguage/Parsoid|Parsoid]] có thể xử lý sai các thẻ nowiki được lồng nhau, khiến nội dung bị mất và hiển thị nội dung không mong muốn nay đã được giải quyết. [https://phabricator.wikimedia.org/T435116]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Bảo quản viên giao diện có thể cấu hình các tiện ích từ [[MediaWiki:Gadgets-definition]]. Định dạng của định nghĩa tiện ích đã được cập nhật và không còn yêu cầu tùy chọn <bdi lang="zxx" dir="ltr"><code><nowiki>ResourceLoader</nowiki></code></bdi> nữa, vì các tiện ích luôn được tải thông qua <bdi lang="zxx" dir="ltr"><code><nowiki>ResourceLoader</nowiki></code></bdi>. Điều này giúp đơn giản hóa cấu hình tiện ích bằng cách loại bỏ một tùy chọn không còn cần thiết nữa, giúp việc định nghĩa tiện ích trở nên dễ dàng hơn cho các bảo quản viên. [https://phabricator.wikimedia.org/T298199]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.19|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/37|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W37"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:44, ngày 7 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31008437 -->
== Bản tin Kỹ thuật: Tuần 38-2026 ==
<section begin="technews-2026-W38"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/38|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Nhóm Future Audiences đã mở một [[en:Special:MyLanguage/Wikipedia:Village pump (proposals)#New proposed experiment to let readers know about “Google preferred sources”|cuộc thảo luận trên Wikipedia tiếng Anh]] về một đề xuất thử nghiệm mới nhằm hiển thị thông báo tạm thời về tính năng mới [https://blog.google/products-and-platforms/products/search/original-high-quality-content-search/ Nguồn Ưu tiên của Google] dành cho độc giả Wikipedia truy cập từ Google. Thử nghiệm này nhằm kiểm tra xem liệu thông báo này có giúp thu hút khách truy cập quay lại Wikipedia thường xuyên hơn hay không. Tính năng Nguồn Ưu tiên cho phép người dùng chọn các trang web mà họ tin tưởng nhằm giúp Google có thể hiển thị nội dung từ các nguồn này một cách nổi bật hơn trong trải nghiệm trên Tìm kiếm và AI. Chúng tôi mong muốn triển khai thử nghiệm này trên các ngôn ngữ khác mà Google hỗ trợ và rất hoan nghênh sự hỗ trợ trong việc khởi xướng thảo luận trên các dự án wiki khác. Nếu bạn quan tâm, vui lòng liên hệ nhóm Future Audiences trên [[m:Special:MyLanguage/Future Audiences/Preferred sources|trang thảo luận]].
'''Cập nhật cho biên tập viên'''
* Nền tảng trò chuyện Discord ra mắt cơ chế (framework) tự thiết lập mới nhằm cho phép các trang web có thể sử dụng để tùy chỉnh cách hiển thị những liên kết đó khi được chia sẻ trên Discord. Nhóm Future Audiences dự định sẽ bắt đầu sử dụng cơ chế này để cải thiện cách hiển thị các liên kết Wikipedia khi được chia sẻ trên Discord, nhằm ghi công sửa đổi của các tình nguyện viên một cách tốt hơn. Hình thức và cách thức hoạt động của liên kết sẽ không thay đổi trong giai đoạn đầu của dự án này vì chúng tôi muốn thu thập một số dữ liệu cơ sở trước để đánh giá tác động của những thay đổi này trong tương lai. Dù vậy, nếu các thành viên cộng đồng đang hoạt động trên Discord có phát hiện ra bất kỳ vấn đề nào, họ có thể liên hệ qua [[phab:tag/future-audiences/|Phabricator]] hoặc [[m:Special:MyLanguage/Future Audiences|Metawiki]].
* Nhóm Phát triển Độc giả sẽ tiến hành một thử nghiệm xem liệu [[mw:Special:MyLanguage/Readers/Reader_Growth/Compact Lead|việc rút gọn phần mở đầu của bài viết]] kèm theo nút "đọc thêm" có giúp cải thiện việc giữ chân người đọc hay không. Thử nghiệm này sẽ bắt đầu vào ngày 17 tháng 9 trên các phiên bản Wikipedia tiếng Ả Rập, tiếng Tây Ban Nha, tiếng Pháp, tiếng Indonesia, tiếng Ý, tiếng Nhật, tiếng Bồ Đào Nha, tiếng Việt và tiếng Trung và sẽ kéo dài trong bốn tuần.
* Tất cả các wiki sẽ [[m:Special:MyLanguage/Tech/Server switch|chuyển sang chế độ chỉ đọc trong vòng vài phút]] vào ngày 23 tháng 9. Kế hoạch được lên lịch lúc 14:00 UTC. Thông tin chi tiết sẽ được đăng tải lên Bản tin Kỹ thuật và cũng sẽ được đăng lên từng wiki riêng lẻ trong tuần tới. [https://phabricator.wikimedia.org/T433363]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến [https://wikistats.wmcloud.org/ Wikistats] dành cho Wikipedia trả về lỗi HTTP 500 và không thể truy cập được, nay đã được giải quyết. [https://phabricator.wikimedia.org/T435959]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Các nhà phát triển đang bảo trì công cụ truy vấn các bảng liên kết của Wikimedia Commons cần cập nhật mã nguồn của mình để kết nối với cụm cơ sở dữ liệu (database cluster) x4 mới. Các bảng liên kết đã được chuyển từ cụm s4 sang x4, và sẽ không còn nhận được cập nhật trên cụm s4 nữa. Các bảng trang và đổi hướng vẫn sẽ tiếp tục khả dụng trên cả hai cụm này. Một bản sao dữ liệu wiki (wiki replica) cho cụm x4 sẽ được thiết lập sau này. Thay đổi này được thực hiện do cụm s4 đã trở nên quá lớn gây ảnh hưởng đến hiệu quả vận hành của bảng liên kết. Bạn có thể [[wikitech:Special:MyLanguage/News/2026 Commons links tables database split|đọc thêm]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.20|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/38|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W38"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:31, ngày 14 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31039826 -->
== Chuyển đổi máy chủ - Wiki của bạn sẽ sớm chuyển sang chế độ chỉ đọc trong một khoảng thời gian ngắn ==
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Đọc thông báo này bằng ngôn ngữ khác]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
[[foundation:|Quỹ Wikimedia]] sẽ chuyển đổi lưu lượng qua lại giữa các trung tâm dữ liệu. Điều này sẽ giúp đảm bảo rằng Wikipedia và các wiki khác của Wikimedia vẫn có thể duy trì trực tuyến ngay cả sau tình huống thiên tai.
Mọi lưu lượng sẽ chuyển đổi vào ngày '''{{#time:j xg|2026-09-23|vi}}'''. Việc chuyển đổi này sẽ bắt đầu vào lúc '''[https://zonestamp.toolforge.org/{{#time:U|2026-09-23T14:00|en}} {{#time:H:i e|2026-09-23T14:00}}]'''.
Dù vậy, vì một số hạn chế của phần mềm [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], mọi sửa đổi đều phải bị ngưng lại khi việc chuyển đổi được thực hiện. Chúng tôi chân thành xin lỗi vì sự gián đoạn này, và chúng tôi đang tìm cách giảm thiểu những tình huống như vậy trong tương lai.
Một biểu ngữ sẽ được hiển thị trên tất cả các wiki 30 phút trước khi quá trình này diễn ra. Biểu ngữ sẽ tiếp tục được hiển thị cho tới khi kết thúc quá trình này.
Bạn có thể đóng góp bằng cách [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate biên dịch và hiệu đính] dòng biểu ngữ này.
'''Bạn sẽ có thể đọc, nhưng không thể sửa đổi, tất cả wiki trong một khoảng thời gian ngắn.'''
* Bạn sẽ không thể sửa đổi trong vòng tối đa một giờ vào {{#time:l j xg Y|2026-09-23|vi}}.
* Nếu bạn cố gắng sửa đổi hay lưu trang trong khoảng thời gian này, bạn sẽ nhìn thấy một thông báo lỗi. Chúng tôi hy vọng sẽ không có sửa đổi nào bị mất trong khoảng thời gian đó, nhưng chúng tôi không thể đảm bảo được điều đó. Nếu bạn nhìn thấy thông báo lỗi, vui lòng chờ đợi cho đến khi mọi thứ trở lại bình thường. Sau đó bạn sẽ có thể lưu lại sửa đổi của mình. Tuy nhiên, chúng tôi khuyên bạn trước hết nên tạo một bản sao những thay đổi của bạn, nhằm mục đích đề phòng.
''Những ảnh hưởng khác'':
* Tác vụ xử lý nền sẽ bị chậm hơn và một số có thể bị ngừng hẳn. Các liên kết đỏ có thể sẽ không được cập nhật nhanh chóng như thường lệ. Nếu bạn tạo một bài viết đã được liên kết ở một nơi khác, liên kết đó vẫn sẽ có màu đỏ lâu hơn bình thường. Một số đoạn mã tốn nhiều thời gian chạy sẽ phải dừng lại.
* Chúng tôi hy vọng việc triển khai mã nguồn vẫn sẽ diễn ra như bất kỳ tuần nào khác. Tuy vậy, một vài trường hợp đóng băng mã nguồn có thể xảy ra nếu quá trình yêu cầu chúng sau đó.
* [[mw:Special:MyLanguage/GitLab|GitLab]] sẽ không khả dụng trong khoảng 90 phút.
Dự án này có thể bị hoãn lại nếu cần thiết. Bạn có thể [[wikitech:Switch_Datacenter|đọc lịch trình tại wikitech.wikimedia.org]]. Bất kỳ thay đổi nào đều sẽ được thông báo trong lịch trình này.
'''Xin hãy chia sẻ thông tin này với cộng đồng của bạn.'''</div><section end="server-switch"/>
[[m:user:Trizek (WMF)|Trizek (WMF)]] 12:58, ngày 15 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=30513874 -->
== Your feedback wanted: Remove ''(Language link added:) and similar'' edits from Special:RecentChanges ==
''(Apologies for posting in English. You can help by translating it)''
Hello, I’m Danny from [[:en:w:Wikimedia_Deutschland|Wikimedia Deutschland’s]] [[m:Wikidata_For_Wikimedia_Projects|Wikidata For Wikimedia Projects]] team.<br/>
We have been investigating and examining how Wikidata’s use in the [[Special:RecentChanges]] and [[Special:Watchlist]] pages can be made to be more useful, or less ‘noisy’ (fewer edits that have little value to the reader).
We are currently exploring to make a change in the volume and the type of Wikidata edits that appear in these pages, and '''we need your feedback''' to help us ensure this is a positive change for the Wikis and won’t disrupt your workflows.<br/>
Language links are also known as sitelinks or interlanguage links and describe when a Wikidata item is connected to a Wiki, adding it to the language dropdown tool for other connected Wikis.
[[File:Types of Lang Link changes.png|x350px|frame|A variety of "Language Link" edits as seen in the Recent Changes feed]]
The request for feedback is whether you support the removal of these language link edits from the Recent Changes and Watchlist feed, or would you oppose such a change and if so, why?
Please share you thoughts on the dedicated '''[[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|metawiki Talk page]]'''.
Further information about this change: [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|m:Wikidata_For_Wikimedia_Projects/Hide_Language_Link_edits]]
Thank you for any participation or feedback you give, -- [[m:User:Danny_Benjafield_(WMDE)|User:Danny Benjafield (WMDE)]] 12:48, ngày 25 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Danny Benjafield (WMDE)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31081007 -->
== Bản tin Kỹ thuật: Tuần 39-2026 ==
<section begin="technews-2026-W39"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/39|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* [[m:Special:MyLanguage/Tech/Server switch|Tất cả các wiki sẽ chuyển sang chế độ chỉ đọc]] trong vòng vài phút vào thứ 4, ngày 23 tháng 9 năm 2026 lúc [https://zonestamp.toolforge.org/1790172000 14:00 UTC]. Điều này là nhằm phục vụ cho việc thử nghiệm chuyển đổi máy chủ cơ sở dữ liệu dự phòng, [[wikitech:Special:MyLanguage/Deployments/Yearly calendar|diễn ra hai lần trong một năm]]. Trong quá trình chuyển đổi này, toàn bộ lưu lượng trên các trang web của Wikimedia được chuyển từ trung tâm dữ liệu chính sang trung tâm dữ liệu dự phòng nhằm kiểm tra tính khả dụng và ngăn ngừa việc gián đoạn dịch vụ ngay cả trong những trường hợp khẩn cấp. [https://phabricator.wikimedia.org/T433363]
'''Cập nhật cho biên tập viên'''
* Nhóm Tăng trưởng đã thử nghiệm một thông báo sau khi sửa đổi mới được thiết kế nhằm [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#4. Encourage Temporary Accounts to Register|khuyến khích những người đang có Tài khoản Tạm thời đăng ký tài khoản vĩnh viễn]]. Thông báo mới này thay thế cho nhiều hộp thoại kèm thông báo chào mừng xuất hiện cùng lúc bằng một thông báo duy nhất nhằm nêu bật những lợi ích của việc tạo một tài khoản. Thử nghiệm này đã giúp tăng tỷ lệ tạo tài khoản vĩnh viễn từ 1.94% lên 3.66%, tương đương với mức tăng khoảng 87%. Thay đổi này giờ đây sẽ được triển khai đến tất cả các dự án wiki. [https://phabricator.wikimedia.org/T433551]
* Đối với các biên tập viên Wikipedia sử dụng [[Special:Preferences#mw-prefsection-betafeatures|Tính năng Beta "Chế độ gợi ý"]], hiện có một [[Special:Preferences#mw-input-wpvisualeditor-editcheck-experimental|tùy chọn mới trong phần tùy chọn của người dùng]] nhằm hiển thị các gợi ý và kiểm tra sửa đổi mang tính "thử nghiệm". Những loại này được liệt kê tại [[Special:EditChecks#experimental-checks|Đặc biệt:EditChecks]], và nhằm mục đích để lập trình viên thử nghiệm sớm cũng như để thu thập phản hồi từ những người dùng có kinh nghiệm. Các bảo quản viên có thể thay đổi [[mw:Special:MyLanguage/Edit check/Configuration|chi tiết cấu hình]] cho từng gợi ý như thường lệ. Bảo quản viên cũng có thể [[mw:Special:MyLanguage/Help:Suggestion mode#Experimental Suggestions|sử dụng tính năng này]] để giúp thử nghiệm những ý tưởng của cộng đồng về những quy tắc kiểm tra và gợi ý do cộng đồng tạo. Những loại tính năng thử nghiệm này sẽ có giao diện trực quan khác biệt hơn vào cuối tuần này. [[mw:Talk:VisualEditor/Suggestion Mode|Mọi phản hồi đều được hoan nghênh]].
* [[m:CEE Technical Village Pump|Phòng Thảo luận Kỹ thuật CEE]] (CEE Technical Village Pump) đã được mở để đóng vai trò như một không gian thảo luận và hợp tác kỹ thuật của các cộng đồng Wikimedia tại khu vực Trung và Đông Âu.
* Một công cụ mới, [[mw:Special:MyLanguage/Language Onboarding and Development/Starter kit|Bộ Công cụ Khởi đầu]] (Starter Kit), nay đã có sẵn dành cho các cộng đồng Wikipedia ngôn ngữ mới và quy mô nhỏ. Công cụ này tập hợp những nhiệm vụ có hướng dẫn, công cụ và tài nguyên nhằm giúp cộng đồng có thể bắt đầu, theo dõi tiến độ, cũng như hợp tác cùng với cộng đồng Wikimedia rộng lớn hơn. Bộ Công cụ Khởi đầu được vận hành trên nền tảng Wikimedia Toolforge và được thiết kế dành cho các dự án Wikipedia có ít hơn 50.000 bài viết. Tìm hiểu thêm cách Bộ Công cụ Khởi đầu hoạt động và cách cộng đồng đang sử dụng công cụ này trong [[diffblog:2026/09/18/introducing-starter-kit-for-new-and-small-language-wikipedias/|bài viết này trên blog Diff]].
* Nhóm Phát triển Người đọc sẽ mở một đợt tái thử nghiệm của [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|thử nghiệm băng chuyền hình ảnh]]. Đợt tái thử nghiệm này sẽ sử dụng ba phiên bản thiết kế mới, được cập nhật dựa trên phản hồi của cộng đồng. Nhóm sẽ đánh giá kết quả và cùng cộng đồng quyết định xem có tiếp tục triển khai tính năng này hay không. Thử nghiệm này sẽ bắt đầu vào tuần ngày 28 tháng 9 và sẽ được thực hiện trên Wikipedia tiếng Ả Rập, tiếng Bengal, tiếng Trung, tiếng Séc, tiếng Anh, tiếng Ba Tư, tiếng Pháp, tiếng Đức, tiếng Indonesia, tiếng Nhật, tiếng Ba Lan, tiếng Bồ Đào Nha, tiếng Tây Ban Nha, tiếng Thụy Điển và tiếng Việt.
* Sau khi triển khai thành công trên Wikipedia tiếng Ả Rập, tiếng Bengal, tiếng Trung, tiếng Séc, tiếng Anh, tiếng Pháp, tiếng Indonesia và tiếng Việt, [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|tính năng Danh sách Đọc]] do nhóm Trải nghiệm Người đọc phát triển sẽ có mặt cho tất cả người dùng đã đăng nhập trên tất cả các dự án Wikipedia kể từ ngày 28 tháng 9.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho đoạn mã trạng thái cố vấn liên tục cập nhật trạng thái của cố vấn ngay cả khi không có gì thay đổi, tạo ra những mục không cần thiết trên Thay đổi Gần đây, nay đã được giải quyết. [https://phabricator.wikimedia.org/T436659]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* API truy vấn danh sách <bdi lang="zxx" dir="ltr"><code><nowiki>abusefilters</nowiki></code></bdi>, vốn được sử dụng để lấy thông tin chi tiết về các bộ lọc sai phạm đang hoạt động hoặc đã tắt được thiết lập trên wiki, đã được cập nhật để hỗ trợ tham số cấu hình <bdi lang="zxx" dir="ltr"><code><nowiki>formatversion=2</nowiki></code></bdi>, điều này dẫn đến những thay đổi gây ra lỗi (breaking changes) đến phản hồi của API. Tất cả người dùng đang bảo trì các đoạn mã người dùng hoặc đoạn mã khác cần kiểm tra xem họ có đang sử dụng API truy vấn danh sách <bdi lang="zxx" dir="ltr"><code><nowiki>abusefilters</nowiki></code></bdi> hay không, đồng thời điều chỉnh để giải quyết những thay đổi gây ra lỗi này. [https://phabricator.wikimedia.org/T435828]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.21|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/39|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W39"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 11:56, ngày 27 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31085309 -->
== Bản tin Kỹ thuật: Tuần 40-2026 ==
<section begin="technews-2026-W40"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/40|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Người dùng sử dụng giao diện mặc định trên trang web dành cho máy tính và thiết bị di động (lần lượt là Vector 2022 và Minerva) nay sẽ được thông báo nếu gợi ý tìm kiếm được hiển thị khi họ nhập vào hộp Tìm kiếm đến từ các trang đổi hướng. Trước đây, người dùng có thể bị bối rối khi gợi ý kết quả tìm kiếm hàng đầu không khớp chính xác với những gì họ nhập vào. Thông báo trang đổi hướng mới này giúp làm rõ rằng những gợi ý này không phải ngẫu nhiên mà có liên quan đến nội dung tìm kiếm. Các trang được gợi ý có thể là các trang đổi hướng đến những bài viết đích phù hợp nhất với nội dung được tìm kiếm. [https://phabricator.wikimedia.org/T303013]
* Người dùng Wikipedia chưa đăng nhập trên giao diện web di dộng sẽ bắt đầu nhìn thấy nút đánh dấu (bookmark) để lưu các bài viết vào [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|danh sách đọc]] của họ thay vì nút Sao theo dõi (Watchstar) hiện tại. Khi được nhấn vào, nút đánh dấu sẽ yêu cầu người dùng đăng nhập hoặc tạo tài khoản để lưu bài viết và đọc lại sau. Một thử nghiệm trước đó cho thấy biểu tượng đánh dấu có khả năng khuyến khích người dùng chưa đăng nhập tạo tài khoản cao gấp bốn lần so với nút Sao theo dõi. Thay đổi này là một phần trong nỗ lực nhằm khuyến khích nhiều độc giả trở thành chủ tài khoản hơn và sử dụng các tính năng giúp họ lưu lại và quay lại để đọc nội dung. [https://phabricator.wikimedia.org/T438769]
* Một thử nghiệm sẽ bắt đầu vào ngày 29 tháng 9 trên các phiên bản Wikipedia tiếng Tây Ban Nha, tiếng Ả Rập, tiếng Anh và tiếng Pháp nhằm đơn giản hóa trải nghiệm mà người dùng gặp ngay sau khi tạo tài khoản. Thử nghiệm này sẽ khám phá xem việc loại bỏ trở ngại từ Khảo sát Chào mừng người mới hiện tại có giúp người dùng mới dễ dàng hiểu được rằng cần phải làm những gì tiếp theo hơn hay không. Cuộc thử nghiệm này sẽ kéo dài đến hết tháng 10. [https://phabricator.wikimedia.org/T430058]
* [[m:Special:MyLanguage/Product and Technology Advisory Council|Hội đồng Cố vấn về Sản phẩm và Công nghệ]] đã kêu gọi cộng đồng đề xuất các chủ đề mà hội đồng nên xem xét và thảo luận với Quỹ Wikimedia. Các biên tập viên và tình nguyện viên kỹ thuật được mời đóng góp chủ đề tại [[m:Talk:Product and Technology Advisory Council|trang thảo luận của hội đồng]].
* Cuối tuần này, các cộng đồng sẽ có thể cấu hình tính năng [[mw:Special:MyLanguage/Help:Edit check|Kiểm tra và Gợi ý Sửa đổi]] để chúng được [[mw:Special:MyLanguage/Edit check/Configuration#extraNamespaces|hiển thị trong các không gian tên bổ sung]], chẳng hạn như không gian tên <bdi lang="zxx" dir="ltr"><code><nowiki>Draft:</nowiki></code></bdi>. [[mw:Talk:VisualEditor/Suggestion Mode|Mọi ý kiến đóng góp đều được hoan nghênh]].
* Một lỗi trong [[m:Special:GlobalWatchlist|Danh sách Theo dõi Toàn cục]] đang khiến cho trang không thể tải được đối với người dùng có những thay đổi chưa được xem trên Wikimedia Commons. Các lập trình viên đang tiến hành khắc phục lỗi này. Trong thời gian đó, những người dùng bị ảnh hưởng có thể làm theo các giải pháp thay thế được nêu trong mục trợ giúp [[mw:Special:MyLanguage/Extension:GlobalWatchlist#GlobalWatchlist temporarily broken for users with Wikimedia Commons|có liên quan]].
* Các từ ma thuật mới <bdi lang="zxx" dir="ltr"><code><nowiki>{{CATEGORYSORT:TIMESTAMP}}</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>{{CATEGORYSORT:RTIMESTAMP}}</nowiki></code></bdi> hiện đã có sẵn để sử dụng. Chúng có khả năng thay đổi cách sắp xếp mặc định của các thể loại dựa trên dấu thời gian xếp thể loại. [https://phabricator.wikimedia.org/T433768]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:20}} {{PLURAL:20|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, sự cố không thể truy cập được [https://wikistats.wmcloud.org/ Wikistats] cho các trang Wikipedia nay đã được giải quyết. [https://phabricator.wikimedia.org/T435959]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Việc chuyển đổi trung tâm dữ liệu, vốn dự kiến được diễn ra vào ngày 23 tháng 9, đã bị hoãn lại. [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|Cuộc diễn tập Equinox]] đã bộc lộ các vấn đề về năng lực hệ thống, khiến việc chuyển đổi toàn bộ dịch vụ sang trung tâm dữ liệu khác không thể thực hiện được. Quy trình này đã được tạm dừng để ưu tiên điều tra vấn đề nêu trên, nhằm đảm bảo rằng chúng tôi vẫn có thể phục vụ người dùng một cách ổn định và tin cậy. Một cuộc diễn tập mới sẽ được lên kế hoạch sau. Trong thời gian này, mọi lưu lượng truy cập và hoạt động sửa đổi vẫn sẽ diễn ra như bình thường.
* Vào ngày 23 tháng 9, một sự cố mất điện đã ảnh hưởng đến tất cả các dự án wiki trong một khoảng thời gian ngắn, gây ra vấn đề gián đoạn cho cả chế độ đọc và sửa đổi. Sự cố này cũng ảnh hưởng đến Gerrit. Điều này không liên quan gì đến việc hoãn chuyển đổi trung tâm dữ liệu. [https://www.wikimediastatus.net/incidents/9fm19t8qykk8]
* [[mw:Special:MyLanguage/Help:Extension:Produnto|Produnto]] đã được triển khai trên mediawiki.org và [[phab:T421436|một số wiki sử dụng ngôn ngữ Ấn Độ]]. Chúng tôi mong nhận được phản hồi của bạn về sản phẩm thử nghiệm này. Produnto cho phép người dùng sử dụng các mô đun Lua được lưu trữ trên [[gitlab:repos/lua|GitLab của Wikimedia]]. Nó giúp đơn giản hóa việc chia sẻ mã nguồn Lua giữa các wiki. Thay vì phải sao chép từng mô đun Lua riêng lẻ từ wiki này sang wiki khác, người dùng có thể dễ dàng chia sẻ các gói mã nguồn trên tất cả các wiki.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.22|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* [[m:Event:Cross-wiki Code Collaboration Workshop|Hội thảo cộng tác mã nguồn giữa các wiki]] sẽ được tổ chức trực tuyến vào ngày 2 tháng 10 lúc 12:30 UTC, quy tụ những cộng tác viên kỹ thuật Nam Á nhằm tìm hiểu về Produnto và bắt đầu thử nghiệm nó trên các phiên bản Wikipedia tiếng Hindi, tiếng Punjabi, tiếng Odia, tiếng Telugu và tiếng Malayalam. Produnto là một trình quản lý gói để triển khai các mô đun Lua được lưu trữ trên GitLab đến các wiki của Wikimedia và gần đây đã được triển khai trên một số wiki thí điểm.
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/40|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W40"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 10:49, ngày 28 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31092225 -->
== Wikidata Sitelink changes in Recent Changes and Watchlist ==
''(Apologies for cross-posting in English, translating it will help spread the message)''
Editors on group 1 wikis, including Wikiquote, Wikibooks, Wikiversity, Wikivoyage, and Wikisource, will no longer see notifications on [[Special:RecentChanges|Recent Changes]] and [[Special:Watchlist|Watchlist]] when a link to ''another'' language version of a page is added, removed, or changed in its Wikidata item. This change will begin on '''October 5 at 07:00 UTC''' as a two-week trial to reduce high-volume, low-value notifications and make higher-value changes easier to identify. Editors who rely on these notifications should be aware of the change and can share feedback or concerns on the [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|project]] or [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|talk page]].<br/>Please reach out if you have any questions, thank you! -- [[User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] ([[User_talk:Danny_Benjafield_(WMDE)|talk]]) sent via [[Thành viên:MediaWiki message delivery|MediaWiki message delivery]] ([[Thảo luận Thành viên:MediaWiki message delivery|thảo luận]]) 12:43, ngày 1 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Danny Benjafield (WMDE)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31106967 -->
== Bản tin Kỹ thuật: Tuần 41-2026 ==
<section begin="technews-2026-W41"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/41|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Quy trình cho [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027#Updated Community Wishlist Process 2027/2028|Danh sách mong muốn của cộng đồng]] năm nay [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027#Updated Community Wishlist Process 2027/2028|đã được công bố]], có tính đến phản hồi từ cộng đồng. Quy trình gửi mong muốn sẽ [[m:Special:MyLanguage/Community Wishlist/FAQ#What is the deadline for submitting wishes?|kết thúc vào ngày 8 tháng 11]]. Năm nay, [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027/Working group|một nhóm công tác (mở cho tình nguyện viên tham gia)]] gồm các thành viên cộng đồng am hiểu về khía cạnh kỹ thuật của các wiki cùng với nhân viên của Wikimedia Foundation sẽ phụ trách [[m:Special:MyLanguage/Community Wishlist/FAQ#What is triage?|quá trình phân loại]]. Dự kiến quá trình phân loại sẽ hoàn tất vào cuối tháng 11. Việc bỏ phiếu cho các mong muốn sẽ bắt đầu vào tháng 1.
'''Cập nhật cho biên tập viên'''
* Các biên tập viên sử dụng [[mw:Special:MyLanguage/VisualEditor|trình soạn thảo trực quan]] nay sẽ nhìn thấy cảnh báo khi họ dán đoạn văn bản có khả năng đã được sao chép từ nội dung ban đầu được tạo bởi một trong năm chatbot AI tạo sinh bên ngoài vào Wikipedia. Tính năng này được gọi là [[mw:Special:MyLanguage/Edit check/LLM Paste Check|Kiểm tra Dán nội dung từ LLM]]. Đây là một dạng [[mw:Special:MyLanguage/Edit check|Kiểm tra Sửa đổi]] mà cộng đồng có thể tùy chỉnh được. Hệ thống kiểm tra này tìm kiếm các mã đánh dấu (marker) trong đoạn mã HTML được sao chép và không sử dụng phương pháp phát hiện hình mờ (watermark) trong nội dung. Các sửa đổi cũng sẽ [[mw:Special:MyLanguage/Edit check/LLM Paste Check#Edit tags|được gắn thẻ]] để các tuần tra viên có thể xem xét kỹ lưỡng hơn. Tính năng này giúp người mới đóng góp nội dung tuân thủ các chính sách của Wikipedia, đồng thời giúp các biên tập viên có kinh nghiệm dễ dàng nhận diện những sửa đổi có vấn đề. Các cộng đồng có quy định riêng về việc sử dụng LLM có thể [[mw:Special:MyLanguage/Edit check/LLM Paste Check#Configuration|điều chỉnh câu từ và quy định được liên kết]]. Nhóm phát triển [[listarchive:list/translators-l@lists.wikimedia.org/message/EVHKWJ4IERZELMPIWNH3XUVUSQV5KOO4/|chân thành xin lỗi]] vì đã triển khai tính năng này mà không dành thời gian chờ cho việc dịch thuật.
* Các biên tập viên nay có thể dễ dàng [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|truy cập trình soạn thảo trực quan bản web trực tiếp từ ứng dụng dành cho iOS và Android]]. Khi mở trình soạn thảo, người dùng sẽ được lựa chọn giữa chế độ soạn thảo trực quan và chế độ soạn thảo mã nguồn. Nếu họ chọn chế độ soạn thảo trực quan, họ sẽ được đưa tới cửa sổ giao diện web di động trong trình duyệt trên điện thoại của họ. Sau khi hoàn thành sửa đổi của mình, một biểu ngữ sẽ xuất hiện để cung cấp cho họ lựa chọn trở về ứng dụng. Điều này cho phép độc giả đóng góp nội dung một cách nhanh chóng trong khi đang đọc một cách thoải mái.
* Người dùng ứng dụng Wikipedia dành cho Android và iOS nay sẽ nhìn thấy thông báo một lần mời tạo tài khoản sau khi họ đã sử dụng ứng dụng được hai tuần liên tiếp. Thông báo này giải thích những lợi ích của việc sở hữu một tài khoản. Điều này nhằm mục đích giúp nhiều đọc giả thông thường trở thành những người dùng đã đăng nhập quay lại ứng dụng thường xuyên hơn. [https://phabricator.wikimedia.org/T434847]
* Các biên tập viên trên [[wmnoc:conf/dblists/group1.dblist|các wiki thuộc group1]], bao gồm Wikiquote, Wikibooks, Wikiversity, Wikivoyage, và Wikisource, sẽ không còn nhìn thấy thông báo trên [[mw:Special:MyLanguage/Help:Recent changes|Thay đổi Gần đây]] và [[mw:Special:MyLanguage/Help: Watching pages|Danh sách Theo dõi]] khi một liên kết đến phiên bản ngôn ngữ khác của một trang được thêm, xóa hoặc thay đổi trong khoản mục Wikidata của nó. Thay đổi này sẽ bắt đầu vào ngày 5 tháng 10 lúc 07:00 UTC dưới dạng thử nghiệm kéo dài hai tuần nhằm giảm bớt các thông báo xuất hiện với số lượng lớn nhưng ít giá trị và giúp những thay đổi quan trọng có thể được nhận diện một cách dễ dàng hơn. Các biên tập viên thường dựa vào những thông báo này có thể đọc thêm trên [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|trang dự án]] và chia sẻ ý kiến hoặc thắc mắc trên [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|trang thảo luận]]. [https://phabricator.wikimedia.org/T439415]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:36}} {{PLURAL:36|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho các cố vấn tự rút khỏi chương trình cố vấn vẫn có thể có những người được cố vấn gán vào họ và tiếp nhận các câu hỏi, nay đã được giải quyết. Những người được cố vấn sẽ được gán lại khi một cố vấn rời khỏi chương trình. [https://phabricator.wikimedia.org/T418194]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Wikimedia Brasil đã xuất bản [[m:Special:MyLanguage/Wikimedia Brasil/Arcabouço de Boas Práticas de Desenvolvimento|Khung Thực tiễn Tốt nhất về Phát triển]] (ABPD). Đây là tài liệu hướng dẫn dành cho nhân viên, nhà thầu và tình nguyện viên tham gia xây dựng các công cụ và dự án kỹ thuật. Tài liệu này bao gồm các nội dung về vòng đời dự án, bảo mật, khả năng tiếp cận, bảo vệ dữ liệu cá nhân và sử dụng AI có trách nhiệm, đồng thời giải thích cách những hướng dẫn chung của phong trào được điều chỉnh sao cho phù hợp với bối cảnh cục bộ. Họ khuyến khích các tổ chức thành viên khác sử dụng lại và tùy chỉnh tài liệu này. Đọc thêm tại [[wmfblog:2026/09/26/wikimedia-brasils-development-best-practices-framework-technical-sustainability-as-an-organizational-responsibility|bài đăng trên Diff]].
* Một URL cơ sở chuẩn (canonical base) mới dành cho các API của Wikimedia sẽ sớm được giới thiệu. Đường dẫn chuẩn mới này theo mẫu dạng <bdi lang="zxx" dir="ltr"><code><nowiki>{projectName}/api/</nowiki></code></bdi> và sẽ đóng vai trò là đường dẫn thay thế cho các API REST hiện tại (ví dụ: <bdi lang="zxx" dir="ltr"><code><nowiki>{projectName}/w/rest.php/</nowiki></code></bdi>). Cả hai phiên bản đều có thể gọi được đối với tất cả các API hiện có, nhưng cấu trúc mới sẽ là lựa chọn ưu tiên cho các mô đun API được tạo mới. Thay đổi này sẽ không gây gián đoạn cho hầu hết người dùng. Những đường dẫn hiện tại vẫn sẽ có sẵn cho mọi yêu cầu đến điểm cuối (endpoint) hiện có. Tuy nhiên, một số điểm cuối có thể trả về các URL tuân theo mẫu mới trong phần nội dung phản hồi (response body). Các thay đổi sẽ có sẵn trên wiki thử nghiệm trước, và việc triển khai dự kiến sẽ được thực hiện trên toàn bộ các dự án wiki vào cuối tháng 10. [https://phabricator.wikimedia.org/T433535]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.23|MediaWiki]].
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/41|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W41"/>
18:52, ngày 5 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31098825 -->
== Bản tin Kỹ thuật: Tuần 42-2026 ==
<section begin="technews-2026-W42"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/42|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Kể từ ngày 13 tháng 10, các wiki có thể thay đổi quy tắc (pattern) mặc định cho [[:en:Wikipedia:VisualEditor/Named references|tên nguồn tham khảo được tạo tự động trong Trình Soạn thảo Trực quan]] (hiện tại là <syntaxhighlight lang="wikitext" inline><ref name=":1" /></syntaxhighlight>). Họ sẽ có thể sử dụng tên nguồn tham khảo dễ hiểu và dựa trên nội dung mà sẽ giúp ích nhiều hơn cho các cộng tác viên sử dụng trình soạn thảo mã nguồn (v.d. <syntaxhighlight lang="wikitext" inline><ref name="Miller2026-1" /></syntaxhighlight>). Các quy tắc đặt tên nguồn tham khảo cho Trình Soạn thảo trực quan có thể được thiết lập thông qua các thông điệp hệ thống MediaWiki, JSON, bản mẫu và mô đun ([[:mw:Special:MyLanguage/Help:Cite/VisualEditor reference names|thông tin thêm]]). Bảo quản viên có thể kích hoạt những thay đổi này thông qua [[Special:CommunityConfiguration/Cite-VisualEditor-Autonames|cấu hình cộng đồng]]. Đây là một [[:m:Special:MyLanguage/Community_Wishlist/W17|mong muốn của cộng đồng]] được triển khai bởi [[:m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]]. [https://phabricator.wikimedia.org/T436255]
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Chú thích phụ]] là một tính năng MediaWiki mới cho phép các biên tập viên tái sử dụng nguồn tham khảo với thông tin khác nhau. Công cụ sẽ được triển khai tới Wikipedia tiếng Anh vào ngày 14 tháng 10 và đến các dự án wiki còn lại của Quỹ Wikimedia vào cuối tháng 10 (khoảng ngày 21 tháng 10). Trang [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|FAQ]] liệt kê các hành động có thể thực hiện trên wiki của bạn để hỗ trợ việc triển khai này. Đây là một [[:m:WMDE Technical Wishes/Sub-referencing/History|mong muốn lâu nay của cộng đồng]] được triển khai bởi [[:m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]]. [https://phabricator.wikimedia.org/T440243][https://phabricator.wikimedia.org/T440304]
'''Cập nhật cho biên tập viên'''
* [[mw:Special:MyLanguage/Moderator Tools|Công cụ Kiểm tra]] sẽ loại bỏ chế độ xem dạng danh sách của Danh sách Theo dõi và chuyển mặc định tất cả người dùng sang chế độ xem dạng nhật ký thay đổi. Trước đây, có hai cách mà Danh sách Theo dõi được hiển thị cho người dùng phiên bản web trên di động: chế độ xem dạng danh sách, nơi mà các biên tập viên có thể xem các bài viết đã theo dõi dưới dạng danh sách, và chế độ xem dạng nhật ký thay đổi, nơi mà các biên tập viên có thể xem các thay đổi được thực hiện với các bài viết đã theo dõi dưới dạng nhật ký, được kiểm soát bởi tùy chọn Điều khiển Di động Nâng cao của người dùng. Điều này đã gây ra vấn đề cho việc bảo trì mã nguồn: hai kiểu hiển thị nghĩa là cần phải quản lý hai bộ mã nguồn khác nhau. Bằng việc chuyển mặc định sang chế độ xem nhật ký theo dõi, chúng tôi sẽ đơn giản hóa được mã nguồn và giảm thiểu nguy cơ bỏ sót lỗi.
* Ứng dụng Wikipedia dành cho Android đang thử nghiệm một cách để nghe phần giới thiệu của bài viết trong mục tin “Dành cho bạn”. Một mô hình chuyển đổi văn bản thành giọng nói (text-to-speech) sẽ đọc nội dung hiện có của bài viết mà không cần viết lại hay bổ sung thêm bất kỳ nội dung nào. Chương trình thử nghiệm 30 ngày này sẽ bắt đầu trong ứng dụng Wikipedia Beta vào tuần thứ ba của tháng 9, sau đó mở rộng sang ứng dụng Wikipedia dành cho Android bản chính thức trong tháng 10 dành cho một nhóm nhỏ người dùng đủ điều kiện. Một bộ phận nhỏ người dùng ứng dụng (những người có mục tin tiếng Anh và có quan tâm đến ít nhất một chủ đề) sẽ có quyền truy cập trải nghiệm tính năng này. Thử nghiệm này là một phần trong nỗ lực rộng lớn hơn nhằm mang lại cho độc giả nhiều lựa chọn tiếp nhận nội dung và qua đó tăng cường mức độ tương tác và khả năng giữ chân người dùng. [[mw:Special:MyLanguage/Readers/Listening to Wikipedia/Phase 1|Tìm hiểu thêm]] và [[mw:Talk:Readers/Listening to Wikipedia|chia sẻ ý kiến phản hồi]].
* Tính năng [[mw:Special:MyLanguage/Help:Extension:CodeMirror|nổi bật cú pháp bằng CodeMirror]] đã được [[phab:T288161|kích hoạt]] theo mặc định cho tất cả người dùng chưa đăng nhập và mới đăng ký trên Wikipedia tiếng Anh vào ngày 14 tháng 9. Do không ghi nhận tác động tiêu cực nào, thay đổi tương tự này đang được đề xuất áp dụng toàn cục cho tất cả các dự án wiki trong vài tuần tới. Nếu bạn có thắc mắc hay ý kiến phản hồi nào, hoặc nếu wiki của bạn muốn từ chối áp dụng thay đổi này, [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror#Enabling CodeMirror by default on all WMF wikis for newbies|vui lòng xem trang trợ giúp]]. [https://phabricator.wikimedia.org/T440077]
* Tính năng [[d:Wikidata:Usability_and_usefulness/Item_editing_experience/Mobile_editing_of_statements|sửa đổi lời phát biểu trên giao diện di dộng của Wikidata]] cho mọi kiểu dữ liệu sẽ chính thức ra mắt vào ngày 13 tháng 10, khi đó nó sẽ được loại bỏ khỏi danh sách [[d:Special:Preferences#mw-prefsection-betafeatures|tính năng thử nghiệm beta]] của Wikidata và có sẵn cho tất cả các biên tập viên. Người dùng có thể [[d:Wikidata_talk:Usability_and_usefulness/Item_editing_experience/Mobile_editing_of_statements|báo cáo lỗi và chia sẻ ý kiến phản hồi]].
* Tuần trước, những thay đổi về liên kết ngôn ngữ đã bị loại bỏ khỏi nguồn cấp dữ liệu của [[Special:RecentChanges|Thay đổi Gần đây]] và [[Special:Watchlist|Danh sách Theo dõi]] trên Wikivoyage, Wikisource, Wikiversity, Wikiquote và Wiktionary. Do không ghi nhận tác động tiêu cực nào, [[m:Wikidata_For_Wikimedia_Projects|Wikidata cho các Dự án Wikimedia]] có kế hoạch triển khai thay đổi này trên toàn cục cho tất cả các phiên bản Wikipedia. Việc triển khai dự kiến diễn ra vào ngày 13 tháng 10 lúc 07:00 UTC, sau thời điểm này các biên tập viên sẽ không còn nhìn thấy những thay đổi khi một liên kết đến phiên bản ngôn ngữ ''khác'' của trang được thêm, xóa hoặc thay đổi trong khoản mục Wikidata tương ứng. Những biên tập viên thường theo dõi các thông báo này có thể tìm hiểu thêm tại [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|trang dự án]] cũng như chia sẻ ý kiến hoặc yêu cầu không áp dụng thay đổi cho wiki của mình tại [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|trang thảo luận]]. [https://phabricator.wikimedia.org/T440698]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho việc vô tình chạm vào biểu đồ trong khi cuộn trên công cụ Lượt xem trang (Pageviews) trên thiết bị di động có thể vô tình phóng to biểu đồ nay đã được khắc phục. Tính năng thu phóng bằng cách nhấn và kéo nay đã bị vô hiệu hóa trên các thiết bị có màn hình cảm ứng. [https://phabricator.wikimedia.org/T440075]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Sẽ có ba thay đổi lớn đối với các tập tin dữ liệu xuất (dump): các tập tin dữ liệu xuất nội dung kiểu cũ [https://lists.wikimedia.org/hyperkitty/list/xmldatadumps-l@lists.wikimedia.org/thread/E6D5EU4PMSTSOI2J7A46HJ3YW2W554CS/ đã ngừng hỗ trợ vào tháng 1 năm 2026] sẽ bị loại bỏ, giải pháp thay thế [https://wikitech.wikimedia.org/wiki/MediaWiki_Content_File_Exports Xuất Tập tin Nội dung MediaWiki] (MediaWiki Content File Exports) sẽ được hoãn triển khai để thiết lập một “khoảng đệm an toàn”, và chúng nay cũng có sẵn dưới dạng tập tin nén 7zip. Người dùng sẽ cần phải thay đổi URL dùng để tải xuống các tập tin dữ liệu xuất này. Để biết thêm thông tin, lộ trình thực hiện và hướng dẫn chuyển đổi, vui lòng xem trang [https://wikitech.wikimedia.org/wiki/Legacy_content_dumps_sunset Ngừng hỗ trợ tập tin dữ liệu xuất nội dung kiểu cũ].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.24|MediaWiki]]
'''Chuyên sâu'''
* Quỹ Wikimedia đã phát hiện các hoạt động trái phép từ các tác nhân của OpenAI trên các dự án Wikimedia, bao gồm việc sửa đổi các trang wiki, nỗ lực khai thác một công cụ ghi chú công khai, cũng như lưu lượng truy cập tự động với cường độ cao. [[diffblog:2026/10/05/openai-rogue-agent-activities-found-on-wikimedia-projects/|Đọc bài blog trên Diff]] để biết thêm thông tin chi tiết về hoạt động này cũng như phản hồi của Quỹ.
'''Các cuộc họp và sự kiện'''
* Hãy ghi lại lịch trình cho sự kiện Wikimedia Hackathon tiếp theo! Chúng tôi sẽ gặp gỡ nhau tại thành phố Tirana xinh đẹp của Albania để tham dự [https://www.mediawiki.org/wiki/Wikimedia%20Hackathon%202027 Wikimedia Hackathon 2027] diễn ra từ ngày 9–11 tháng 4 năm 2027. Hồ sơ đăng ký nhận học bổng và tài trợ cho nhân viên hiện đang được [https://pretix.eu/wikimedia/Hackathon-2027/ tiếp nhận qua nền tảng Pretix] và sẽ đóng vào ngày 30 tháng 10 năm 2026. Cổng đăng ký tham dự dành cho công chúng sẽ được mở vào tháng 1 năm 2027.
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/42|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W42"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 07:40, ngày 13 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31142468 -->
== Bản tin Kỹ thuật: Tuần 43-2026 ==
<section begin="technews-2026-W43"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/43|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Để đo lường tác động từ việc bổ sung một số [[mw:Special:MyLanguage/Readers/Reader_Growth/Image_Browsing#November 2025: Ideas and feedback|tính năng do cộng đồng yêu cầu]] đến tỷ lệ giữ chân độc giả chưa đăng nhập, một thử nghiệm về tính năng [[mw:Special:MyLanguage/Readers/Reader_Growth/Image_Browsing|Băng chuyền Hình ảnh]] (Image Carousel) sẽ được triển khai đến độc giả chưa đăng nhập. Với tính năng Băng chuyền Hình ảnh, độc giả có thể xem các hình ảnh do cộng đồng tải lên, được chọn lọc bởi các biên tập viên vì có liên quan đến bài viết cụ thể. Thử nghiệm sẽ bắt đầu vào ngày 20 tháng 11.
* Một thông báo thử nghiệm sẽ được hiển thị tới 0,5% số độc giả chưa đăng nhập sử dụng thiết bị di động khi họ truy cập Wikipedia tiếng Anh từ Google, nhằm mời họ thêm Wikipedia vào danh sách [https://blog.google/products-and-platforms/products/search/preferred-sources/ Nguồn Ưu tiên trên Google]. Thử nghiệm nhằm mục đích đánh giá liệu thông báo này có giúp tăng tỷ lệ giữ chân độc giả và khuyến khích người dùng sử dụng Google Tìm kiếm ghé thăm Wikipedia thường xuyên hơn hay không. Thử nghiệm sẽ diễn ra từ ngày 15–29 tháng 10, sau đó kết quả sẽ được phân tích nhằm xác định tác động của nó đối với tỷ lệ giữ chân và lưu lượng truy cập từ các nguồn giới thiệu.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:26}} {{PLURAL:26|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến cho [[quarry:|Quarry]] trả về lỗi “Truy cập bị từ chối” khi người dùng cố gắng chạy các truy vấn SQL, làm cho các truy vấn không thể chạy được một cách bình thường, nay đã được khắc phục. [https://phabricator.wikimedia.org/T440966]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* [[File:Cog-icon-grey.svg|12px|link=|class=skin-invert|Đề mục nâng cao]] Do một lỗi đã tồn tại từ lâu, các ứng dụng sử dụng quy trình xác thực "client credentials" của [[mw:Special:MyLanguage/OAuth/For_Developers|OAuth 2]] để thay mặt chủ sở hữu thực hiện thao tác hiện đang bị hệ thống coi như là người dùng chưa đăng nhập. Vấn đề này sẽ được khắc phục đối với các ứng dụng mới đăng ký kể từ thứ Hai, ngày 19 tháng 10 trở đi. Một số ứng dụng bị ảnh hưởng sẽ cần phải thực hiện đăng ký lại. [https://phabricator.wikimedia.org/T420297]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.48/wmf.1|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* Một đề xuất tổ chức sự kiện Wikimedia Hackathon ba năm một lần, xen kẽ với các sự kiện hackathon khu vực, [[mw:Wikimedia Hackathon/Community Proposal 2026|đã được chia sẻ]]. Đề xuất này hướng tới việc giúp các cộng đồng kỹ thuật tại nhiều khu vực khác nhau có thể tiếp cận sự kiện này dễ dàng hơn. Hãy chia sẻ ý kiến của bạn tại [[mw:Talk:Wikimedia Hackathon/Community Proposal 2026|trang thảo luận]] của đề xuất này trước ngày 6 tháng 11.
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/43|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W43"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14:38, ngày 19 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31178499 -->
== Chuyển đổi máy chủ - Wiki của bạn sẽ sớm chuyển sang chế độ chỉ đọc trong một khoảng thời gian ngắn ==
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Đọc thông báo này bằng ngôn ngữ khác]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
[[foundation:|Quỹ Wikimedia]] sẽ chuyển đổi lưu lượng qua lại giữa các trung tâm dữ liệu. Điều này sẽ giúp đảm bảo rằng Wikipedia và các wiki khác của Wikimedia vẫn có thể duy trì trực tuyến ngay cả sau tình huống thiên tai.
Mọi lưu lượng sẽ chuyển đổi vào ngày '''{{#time:j xg|2026-10-28|vi}}'''. Việc chuyển đổi này sẽ bắt đầu vào lúc '''[https://zonestamp.toolforge.org/{{#time:U|2026-10-28T15:00|en}} {{#time:H:i e|2026-10-28T15:00}}]'''.
Dù vậy, vì một số hạn chế của phần mềm [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], mọi sửa đổi đều phải bị ngưng lại khi việc chuyển đổi được thực hiện. Chúng tôi chân thành xin lỗi vì sự gián đoạn này, và chúng tôi đang tìm cách giảm thiểu những tình huống như vậy trong tương lai.
Một biểu ngữ sẽ được hiển thị trên tất cả các wiki 30 phút trước khi quá trình này diễn ra. Biểu ngữ sẽ tiếp tục được hiển thị cho tới khi kết thúc quá trình này.
Bạn có thể đóng góp bằng cách [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate biên dịch và hiệu đính] dòng biểu ngữ này.
'''Bạn sẽ có thể đọc, nhưng không thể sửa đổi, tất cả wiki trong một khoảng thời gian ngắn.'''
* Bạn sẽ không thể sửa đổi trong vòng tối đa một giờ vào {{#time:l j xg Y|2026-10-28|vi}}.
* Nếu bạn cố gắng sửa đổi hay lưu trang trong khoảng thời gian này, bạn sẽ nhìn thấy một thông báo lỗi. Chúng tôi hy vọng sẽ không có sửa đổi nào bị mất trong khoảng thời gian đó, nhưng chúng tôi không thể đảm bảo được điều đó. Nếu bạn nhìn thấy thông báo lỗi, vui lòng chờ đợi cho đến khi mọi thứ trở lại bình thường. Sau đó bạn sẽ có thể lưu lại sửa đổi của mình. Tuy nhiên, chúng tôi khuyên bạn trước hết nên tạo một bản sao những thay đổi của bạn, nhằm mục đích đề phòng.
''Những ảnh hưởng khác'':
* Tác vụ xử lý nền sẽ bị chậm hơn và một số có thể bị ngừng hẳn. Các liên kết đỏ có thể sẽ không được cập nhật nhanh chóng như thường lệ. Nếu bạn tạo một bài viết đã được liên kết ở một nơi khác, liên kết đó vẫn sẽ có màu đỏ lâu hơn bình thường. Một số đoạn mã tốn nhiều thời gian chạy sẽ phải dừng lại.
* Chúng tôi hy vọng việc triển khai mã nguồn vẫn sẽ diễn ra như bất kỳ tuần nào khác. Tuy vậy, một vài trường hợp đóng băng mã nguồn có thể xảy ra nếu quá trình yêu cầu chúng sau đó.
* [[mw:Special:MyLanguage/GitLab|GitLab]] sẽ không khả dụng trong khoảng 90 phút.
Dự án này có thể bị hoãn lại nếu cần thiết. Bạn có thể [[wikitech:Switch_Datacenter|đọc lịch trình tại wikitech.wikimedia.org]]. Bất kỳ thay đổi nào đều sẽ được thông báo trong lịch trình này.
'''Xin hãy chia sẻ thông tin này với cộng đồng của bạn.'''</div><section end="server-switch"/>
[[user:Trizek_(WMF)|Trizek_(WMF)]] 14:01, ngày 26 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=30513874 -->
qhswavdzlp8ki5h220c4nod6piursfy
2573731
2573625
2026-10-26T18:56:49Z
MediaWiki message delivery
19980
Mục mới: /* Bản tin Kỹ thuật: Tuần 44-2026 */
2573731
wikitext
text/x-wiki
<!-- Xin bắt đầu cuộc thảo luận mói ở CUỐI trang! Cám ơn. -->
{{Lưu trữ}}
== Bản tin Kỹ thuật: Tuần 24-2026 ==
<section begin="technews-2026-W24"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/24|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Wikimedia Enterprise đã tăng giới hạn sử dụng miễn phí cho các dịch vụ API của mình. Giới hạn yêu cầu hàng tháng dành cho API Theo yêu cầu đã tăng từ 5.000 lên 50.000 yêu cầu, trong khi giới hạn đối với API Hình chụp nhanh đã tăng từ 15 lên 30 yêu cầu mỗi tháng. Ngoài ra, Nội dung Có cấu trúc của ảnh chụp nhanh hiện đã có sẵn cho các tài khoản miễn phí. Những thay đổi này sẽ mở rộng quyền truy cập vào dữ liệu Wikimedia Enterprise cho các nhà phát triển, nhà nghiên cứu và các tổ chức sử dụng nội dụng Wikimedia. [https://enterprise.wikimedia.com/blog/enhanced-free-api]
'''Cập nhật cho biên tập viên'''
* [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Explore Feed Refresh/Phase 1|Bảng tin Khám phá được làm mới]], nay với tên gọi là Bảng tin Trang chủ, đang được triển khai tới 50% người dùng ứng dụng Wikipedia dành cho Android. Bảng tin Trang chủ giúp người đọc khám phá nội dung liên quan thông qua hai tab mới: ''Cộng đồng'' và ''Dành cho Bạn''. Tab Cộng đồng cung cấp một bảng tin cuộn được chứa những nội dung được chọn lọc cùng những cập nhật từ không gian rộng lớn hơn của cộng đồng và phong trào Wikimedia, trong khi tab ''Dành cho Bạn'' cung cấp trải nghiệm toàn màn hình, có thể vuốt được để hiển thị nội dung được điều chỉnh theo sở thích của người dùng. Việc thiết kế lại này là một phần trong nỗ lực lớn hơn nhằm cải thiện khả năng tìm kiếm và nâng cao trải nghiệm học trong ứng dụng Wikipedia.
* Trò chơi giải đố hàng ngày [[mw:Special:MyLanguage/Wikimedia Apps/Team/iOS/"Which came first?" Game|Sự kiện nào diễn ra trước nhỉ?]] nay đã có sẵn trong phiên bản beta của ứng dụng Wikipedia dành cho iOS bằng tiếng Anh, tiếng Đức, tiếng Pháp, tiếng Bồ Đào Nha, tiếng Nga, tiếng Tây Ban Nha, tiếng Ả Rập, tiếng Trung và tiếng Thổ Nhĩ Kỳ. Trò chơi này sử dụng các sự kiện lịch sử từ nội dung trong mục "Ngày này năm xưa" của Wikipedia và thử thách người đọc đoán xem sự kiện nào trong hai sự kiện đã xảy ra trước. Trò chơi này đã được phát hành trên Android trước đây. Những cộng đồng quan tâm đến việc cung cấp trò chơi này bằng ngôn ngữ của mình có thể [[mw:Special:MyLanguage/Wikimedia_Apps/Team/Games#Game availability by language|đọc qua hướng dẫn và yêu cầu]].
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Chú thích phụ]], một tính năng MediaWiki mới cho phép biên tập viên tái sử dụng nguồn tham khảo với nhiều chi tiết khác nhau, sẽ bắt đầu được triển khai đến các wiki của Wikimedia sau giải đoạn thí điểm thành công. Việc triển khai sẽ bắt đầu vào ngày 8 tháng 6 đối với hầu hết các [[wikitech:Deployments/Train#Wednesday|wiki Nhóm 1]] và Wikipedia tiếng Pháp, trong khi các phiên bản ngôn ngữ khác của Wikipedia sẽ nhận được tính năng này trong những tháng tới. Các cộng đồng được khuyến khích chuẩn bị bằng cách kiểm tra [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-cite&language=en&action_source=search&filter=%21translated&optional=1&action=translate các thông báo chưa được dịch của phần mở rộng Cite] bằng ngôn ngữ của họ và xem xét bất kỳ việc sử dụng [[mw:Special:MyLanguage/Reference Tooltips|Chú thích nổi]] nào, chúng có thể cần phải được [[:phab:T416304#11668731|cập nhật]] để hỗ trợ chức năng mới này. Những wiki sử dụng [[mw:Special:MyLanguage/Help:Reference Previews|Xem trước Chú thích]] không cần phải thực hiện bất kỳ hành động nào. Các cộng đồng cũng có thể mong muốn tạo [[Special:TrackingCategories|thể loại theo dõi]] ''cite-tracking-category-ref-details'' dưới dạng thể loại ẩn sử dụng <code><nowiki>__HIDDENCAT__</nowiki></code> (hoặc một bản mẫu chuyên dụng), và kết nối nó với khoản mục Wikidata [[d:Q129764848]] tương ứng. [https://phabricator.wikimedia.org/T425662]
* [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews#Experimentation|Thử nghiệm Xem trước Trang]] trên giao diện web di động đã kết thúc. Nhóm đã quyết định không triển khai tính năng này sau khi kết quả cho thấy rằng không có tác động đáng kể nào về mặt thống kê lên tỷ lệ giữ chân người đọc, vì chỉ số thành công chính là việc cải thiện tỷ lệ giữ chân người đọc. Tính năng Xem trước Trang, vốn đã có sẵn trên máy tính để bàn và trong ứng dụng, hiển thị hình thu nhỏ, đoạn mở đầu và liên kết đến bài viết đầy đủ khi người đọc nhấn vào liên kết xanh. Thử nghiệm này đã thử trải nghiệm này trên giao diện web di động trên sáu trang Wikipedia.
* [[mw:Special:MyLanguage/Codex/Design/Icons|Thư viện biểu tượng giao diện người dùng]] sẽ được [[phab:T399175|cập nhật vào cuối tuần này hoặc đầu tuần sau]]. Hầu hết trong số ~300 biểu tượng đã được điều chỉnh một chút và ~30 biểu tượng mới đã được thêm vào. Những thay đổi này cải thiện các biểu tượng để làm cho chúng thêm nhất quán và dễ hiểu hơn, đồng thời mang lại sự cân bằng trực quan hơn khi chúng được sử dụng theo nhóm.
* Giao diện [[mw:Special:MyLanguage/Universal Language Selector|Bộ chọn Ngôn ngữ Toàn cục]] (ULS) trong MediaWiki, công cụ giúp người dùng chọn nội dung bằng các ngôn ngữ khác, đã được cập nhật. Phiên bản mới cải thiện tốc độ và khả năng truy cập, đồng thời giờ đây người dùng trên các dự án Wikimedia có thể ghim các ngôn ngữ để chuyển đổi ngôn ngữ một cách nhanh chóng hơn. Việc triển khai lên các trang web của Wikimedia sẽ diễn ra dần dần trong những tuần tới. Bạn có thể thử nghiệm tính năng này ngay bây giờ bằng cách chọn [[Special:Preferences#mw-prefsection-betafeatures|tính năng beta]] trong tùy chọn hồ sơ của mình và chia sẻ phản hồi của bạn trên [[mw:Special:MyLanguage/Universal Language Selector/New ULS|trang dự án]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:21}} {{PLURAL:21|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến bảng điều khiển Phân tích Lượt xem Trang trên pageviews.wmcloud.org ngừng cập nhật dữ liệu đồ thị vào tháng 5 năm 2026, ảnh hưởng đến tất cả người dùng, đã được giải quyết. [https://phabricator.wikimedia.org/T427171]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Chữ ký hàm cho <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink()</nowiki></code></bdi> đã được đơn giản hóa. Các nhà phát triển nay có thể truyền một đối tượng cấu hình thay vì một danh sách các tham số vị trí khi tạo liên kết portlet. Chữ ký hàm trước đây vẫn được hỗ trợ để đảm bảo khả năng tương thích ngược. Ví dụ, thay vì: <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', '#', 'Stub', 'ca-stubtag', 'Add a stub tag to this page');</nowiki></code></bdi> sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>mw.util.addPortletLink('p-cactions', { href: '#', text: 'Stub', id: 'ca-stubtag', tooltip: 'Add a stub tag to this page' });</nowiki></code></bdi>. Những người bảo trì đoạn mã được khuyến khích xem chỗ nào hiện đang sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>addPortletLink()</nowiki></code></bdi> và cập nhật chúng nếu thích hợp. Thay đổi này sẽ có mặt trên tất cả các wiki từ ngày 11 tháng 6. Xin cảm ơn tình nguyện viên cộng đồng Gerges đã đóng góp cải tiến này. [https://phabricator.wikimedia.org/T427945]
* '''Thảo luận về Danh sách Mong muốn của Cộng đồng''': Nhóm Sản phẩm & Công nghệ [[m:Special:MyLanguage/Community Wishlist/Updates#May 20, 2026: Community Tech becomes a program|đã đưa ra những thay đổi]] nhằm mục đích tăng số lượng và độ phức tạp của những mong muốn được đáp ứng, bao gồm cả việc giải thể nhóm Công nghệ Cộng đồng. Họ đang [[m:Special:MyLanguage/Community Wishlist/Updates|tham gia thảo luận]] về một [[m:Talk:Community Wishlist#Proposed direction for Wishlist|đề xuất hướng đi cho danh sách mong muốn]] từ các thành viên cộng đồng. Bao gồm những cách để cấu trúc việc bỏ phiếu hàng năm, theo dõi mong muốn một cách tốt hơn, loại bỏ các lĩnh vực trọng tâm, và [[m:Special:MyLanguage/Community Wishlist/Updates|điều chỉnh việc quản lý nhân sự]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.6|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/24|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W24"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:30, ngày 8 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30650573 -->
== Bản tin Kỹ thuật: Tuần 25-2026 ==
<section begin="technews-2026-W25"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/25|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* [[mw:Special:MyLanguage/Readers/Reader Growth|Nhóm Tăng trưởng Độc giả]] đã cho ra mắt tính năng beta [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Duyệt Hình ảnh]] trên phiên bản web của thiết bị di động tại tất cả các phiên bản Wikipedia. Tính năng này hiển thị ở đầu bài viết một băng chuyền hình ảnh gồm 3 hình ảnh trở lên. Biên tập viên có thể cấu hình cho tính năng này với những thao tác sau: để ẩn một hình ảnh cụ thể khỏi một trang, hãy sử dụng <code>class=notpageimage</code> để loại trừ nó khỏi bản xem trước, hay dùng <code>class=noviewer</code> để loại trừ nó khỏi MediaViewer. Băng chuyền Hình ảnh còn có thể được tắt hoàn toàn ở một trang, với magic word <code><nowiki>__NOMEDIAVIEWERCAROUSEL__</nowiki></code>. Để gửi phản hồi hoặc báo cáo lỗi, hãy truy cập [[mw:Talk:Readers/Reader Growth/Image Browsing|trang dự án]].
* [[mw:Special:MyLanguage/Help:Tables#class="wikitable"|Wikitables]] nay đã có thể được [[mw:Special:MyLanguage/Help:Sortable tables#Forcing the initial sort direction|sắp xếp theo thứ tự giảm dần]] ngay lần nhấp chuột đầu tiên bằng cách thêm <code dir=ltr>data-sort-order="desc"</code> cho ô tiêu đề. Trước đây, theo mặc định, lần nhấp chuột đầu tiên vào tiêu đề cột sẽ sắp xếp cột theo thứ tự tăng dần. Sự bổ sung này cho Wikitable mang lại khả năng kiểm soát và tính linh hoạt cao hơn, trong khi hành vi mặc định cho những lần nhấp chuột tiếp theo vẫn được giữ nguyên. [https://phabricator.wikimedia.org/T398416]
'''Cập nhật cho biên tập viên'''
* Tính năng [[mw:Special:MyLanguage/Article guidance|Hướng dẫn bài viết]] hiện đang được thử nghiệm đối với một số biên tập viên tạo các bài viết mới trên các trang Wikipedia tiếng Anh đơn giản, tiếng Pháp và tiếng Thổ Nhĩ Kỳ. Thử nghiệm cũng sẽ sẽ sớm bắt đầu trên Wikipedia tiếng Ả Rập và tiếng Bengali. [[w:simple:Special:NewArticle|Tính năng này]] cung cấp cho các biên tập viên hướng dẫn do cộng đồng biên soạn để giúp họ tạo ra những bài viết tuân thủ tiêu chuẩn cộng đồng. Các biên tập viên có kinh nghiệm có thể tiếp tục tạo hoặc điều chỉnh dàn ý cho những loại bài viết cụ thể thường được tạo bởi những người đóng góp ít kinh nghiệm hơn. Những dàn ý này hướng dẫn các biên tập viên ít kinh nghiệm hơn trong việc tạo những bài viết chất lượng cao. Hướng dẫn nhanh về các ký hiệu được sử dụng trong dàn ý có thể được tìm thấy trên [[mw:Special:MyLanguage/Article guidance/Test feature guide#Markups in outlines|trang này]]. [[w:simple:Wikipedia:Article Guidance|Ví dụ về dàn ý]] có thể được điều chỉnh và hướng dẫn cách điều chỉnh chúng nằm trên [[mw:Special:MyLanguage/Article guidance#Adapting a sample outline in a Wikipedia|phần này]] của trang dự án.
* Wiki mong muốn thay thế nút "vô thời hạn" trong Đặc biệt:Cấm dành cho tài khoản tạm thời (ví dụ, wiki chỉ cấm tài khoản tạm thời đến khi tài khoản đó hết hạn) sẽ có thể thực hiện điều đó bằng cách tạo [[MediaWiki:ipb-indefinite-expiry-temporary-account]] với khoảng thời gian cấm mà họ muốn. [https://phabricator.wikimedia.org/T427125]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:41}} {{PLURAL:41|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]].
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Đến cuối tháng 6, việc sử dụng một chuỗi user-agent hợp lệ là bắt buộc để tải xuống tự động các dump từ trang web dumps.wikimedia.org. Những yêu cầu tự động cung cấp user-agent trống hoặc chung chung sẽ bị chặn. Điều này [[phab:T400119|sẽ mở rộng việc thực thi]] [[foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|quy định về user-agent]] đã có từ lâu. Quyền truy cập tới Dịch vụ Đám mây của Wikimedia sẽ không thay đổi.
* Quá trình triển khai [[mw:Wikimedia APIs/Rate limits|giới hạn truy cập API]] toàn cục đã hoàn tất, các giới hạn được áp dụng trên tất cả các API và ở tất cả các mức độ được ghi nhận cho tất cả các nhóm. Các bot chạy trong Toolforge/WMCS hoặc có quyền người dùng bot trên bất kỳ wiki nào vẫn được miễn trừ. Tất cả các bot nên tiếp tục theo những thực tiễn tốt nhất được ghi nhận để tránh bị vượt giới hạn truy cập.
* [https://api.wikimedia.org/wiki/Main_Page Wiki Cổng API] sẽ ở chế độ chỉ đọc kể từ tuần này (15-18 tháng 6). Vào tuần tới (22-25 tháng 6), tất cả các URL của wiki Cổng API sẽ chuyển hướng đến [[mw:Wikimedia APIs|API Wikimedia trên mediawiki.org]]. Tìm hiểu thêm trên [[wikitech:API Portal/Deprecation|trang dự án]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.7|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* Vào ngày 17 tháng 6 lúc 18:00 giờ UTC WMF sẽ tổ chức một cuộc gọi Discord tập trung vào việc đánh giá code. Chúng tôi đã lắng nghe thông qua [[mw:Special:MyLanguage/Developer Satisfaction Survey/2026|Khảo sát Sự hài lòng của Nhà phát triển]] rằng các tình nguyện viên đang gặp khó khăn trong việc đánh giá code và chúng tôi muốn thảo luận về những trải nghiệm này với mục tiêu tìm ra những giải pháp khả thi. Bạn có thể tham gia cuộc gọi [https://discord.gg/wikipedia?event=1514727511102062664 thông qua máy chủ Discord Cộng đồng Wikimedia].
* [[m:Special:MyLanguage/Conferencia Wikimedia de América Latina 2026|Hội nghị Wikimedia Mỹ La-tinh]] sẽ tổ chức cuộc thi hackathon khu vực quy tụ cộng đồng kỹ thuật của phong trào Wikimedia, gồm những nhà phát triển, quản trị viên hệ thống, nhà khoa học dữ liệu và các thành viên có quyền mở rộng. Những người đóng góp kỹ thuật quan tâm có thể [https://docs.google.com/forms/d/e/1FAIpQLSf4osJzTHBJjQbYJk7TMVEJjTEQv7IgtsUDfP-o-qTgeRQQxw/viewform đăng ký học bổng] tham gia cho đến nửa đêm ngày 21 tháng 6 (giờ Bolivia, UTC-4).
* Hãy đăng ký tham gia Thử thách Nhóm của Wikimania để góp mặt tại sự kiện đặc biệt này. Thử thách nhóm sẽ diễn ra trực tuyến và trực tiếp từ ngày 21 đến 22 tháng 7, trước hội nghị Wikimania. Mọi người đều có thể tham gia, bất kể kỹ năng hay việc đăng ký Wikimania trước đó như thế nào. Các nhóm sẽ cùng nhau giải quyết 10 thử thách quan trọng trong việc hỗ trợ cộng đồng Wikimedia. Để biết thêm chi tiết, hãy truy cập [[wmania:Special:MyLanguage/2026:Team challenges|trang Thử thách Nhóm]] và [https://wikimedia.eventyay.com/wm/teamchallenges/ đăng ký tại đó]. Cổng đăng ký sẽ đóng vào ngày 20 tháng 6 lúc 23:00 UTC.
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/25|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W25"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:48, ngày 15 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:UOzurumba (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30689604 -->
== Bản tin Kỹ thuật: Tuần 26-2026 ==
<section begin="technews-2026-W26"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/26|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* [[mw:Special:MyLanguage/Growth/Feature summary|Các tính năng Phát triển (Growth)]] [[phab:T418115|nay đã có mặt trên Wikidata]]. Bản cập nhật này cho phép truy cập vào chức năng Cố vấn ([[mw:Special:MyLanguage/Help:Growth/Mentorship|nếu được cấu hình]]), mô đun Tác động, Bảng Trợ giúp và Trang chủ dành cho Người mới được đơn giản hóa (không có Đề xuất sửa đổi). Các bảo quản viên Wikidata vẫn đang cấu hình các tính năng thông qua Cấu hình Cộng đồng.
'''Cập nhật cho biên tập viên'''
* Trang đặc biệt [[{{#special:RangeCalculator}}]] đã được tạo. Trang này cho phép người dùng tìm một dải IP mà không cần phải dựa vào các công cụ bên ngoài. Cho đến hiện tại, công cụ này chỉ có sẵn cho các kiểm định viên. [https://phabricator.wikimedia.org/T268429]
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Chú thích phụ]] là một tính năng mới của MediaWiki cho phép biên tập viên tái sử dụng các nguồn tham khảo với những chi tiết khác nhau. Tính năng này sẽ được triển khai đến hầu hết các phiên bản ngôn ngữ Wikipedia quy mô nhỏ và trung bình vào ngày 23 tháng 6. Trang [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|Câu hỏi thường gặp]] liệt kê những hành động có thể thực hiện trên wiki của bạn để hỗ trợ việc triển khai này. Hãy kiểm tra [[:phab:T414094|kế hoạch triển khai]] để biết các bước triển khai tiếp theo. [https://phabricator.wikimedia.org/T428902]
* Bắt đầu từ tuần sau, người dùng sẽ nhận được một thông báo khi họ bị cấm sửa đổi hoặc được bỏ cấm sửa đổi, hoặc khi lệnh cấm thay đổi. [https://phabricator.wikimedia.org/T100974]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:32}} {{PLURAL:32|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]].
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Bắt đầu từ tuần tới, các bộ lọc sai phạm được đặt ở mức "yêu cầu xác minh CAPTCHA" sẽ bắt đầu ảnh hưởng đến cả những người dùng có quyền <code>skipcaptcha</code>, bao gồm hầu hết những người dùng có quyền tự động xác nhận. Các bot sẽ được miễn trừ. Thay đổi này sẽ chỉ ảnh hưởng đến những sửa đổi kích hoạt bộ lọc sai phạm. Quyền <code>skipcaptcha</code> vẫn sẽ tiếp tục giúp người dùng được miễn yêu cầu xác minh CAPTCHA trong quá trình sử dụng wiki thông thường. [https://phabricator.wikimedia.org/T402595]
* Tài liệu tham khảo cho [[wikitech:Machine_Learning/LiftWing/API|API Lift Wing]] đã được chuyển từ Cổng API sang [https://wikitech.wikimedia.org/w/index.php?api=lift-wing&title=Special%3ARestSandbox Chỗ thử REST] mang tính tương tác.
* Wiki Cổng API hiện đã đóng. Để xem tài liệu API, hãy xem [[mw:Special:MyLanguage/Wikimedia_APIs|API Wikimedia trên mediawiki.org]]. Tất cả các URL của wiki Cổng API (https://api.wikimedia.org/wiki/) sẽ đổi hướng tới trang mediawiki.org bắt đầu từ ngày 22 tháng 6. [https://phabricator.wikimedia.org/T427537]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.8|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* Hãy tham gia cuộc gọi trực tuyến vào ngày 25 tháng 6 lúc 2:30 chiều giờ UTC để gặp gỡ các thực tập sinh hiện tại của Wikimedia cho [[mw:Google_Summer_of_Code/2026|Google Summer of Code]] và [[mw:Outreachy/Round_32|Outreachy]]. Các thực tập sinh sẽ giới thiệu tổng quan về các dự án của họ và demo ngắn gọn công việc mà họ đã thực hiện cho đến nay. Người tham dự được khuyến khích [[mw:event:Google_Summer_of_Code/Summer_2026_June_Internship_open_session|chia sẻ ý tưởng và kết nối trong cộng đồng của họ]].
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/26|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W26"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:05, ngày 23 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30722494 -->
== RFC about AI-generated content in Wikimedia Commons ==
<bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|thảo luận]])</bdi> 17:12, ngày 23 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Codename Noreste@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== <span lang="en" dir="ltr">Deployment of Legal and Safety Contacts Link in the Footer of Your Wiki</span> ==
<div lang="en" dir="ltr">
<section begin="Message"/>
'''Legal & Safety Contacts'''
Hello community, the Wikimedia Foundation has provided a [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|single legal and safety contact page]], to be linked in the footer of your wiki, to ensure access to accurate legal information. This is a regulatory requirement. We have already rolled out links to English, German, Italian, Spanish and other wikis and we will deploy to your wiki soon. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Please read more on the project page]] and leave any comments in this thread or on the [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|talk page]].
<section end="Message"/>
</div>
-- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 13:31, ngày 25 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Sannita (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=30731267 -->
== Bản tin Kỹ thuật: Tuần 27-2026 ==
<section begin="technews-2026-W27"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/27|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Là một phần của [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Thử nghiệm Tạo Tài khoản]], nhóm Phát triển đã thử nghiệm việc thêm biểu tượng tài khoản người dùng vào tiêu đề trang web trên di động dành cho người dùng chưa đăng nhập, cung cấp quyền truy cập trực tiếp vào các tác vụ "Tạo tài khoản" và "Đăng nhập". Thử nghiệm đã tăng số tài khoản được tạo lên khoảng 20% mà không ảnh hưởng tiêu cực đến chất lượng sửa đổi hoặc tỷ lệ sửa đổi mang tính xây dựng. Tính năng này giờ sẽ được triển khai đến tất cả các trang wiki của Quỹ Wikimedia trên giao diện web di động trong tuần đầu tiên của tháng 7. [https://phabricator.wikimedia.org/T428220]
* Sau một [[phab:T426248|thử nghiệm thành công]], người dùng đã đăng nhập nhưng chưa [[mw:Special:MyLanguage/Help:Email_confirmation|xác nhận địa chỉ email của mình]] khi tạo tài khoản sẽ nhìn thấy một biểu ngữ mới yêu cầu họ hoàn tất quy trình đó. Điều này giúp giảm nguy cơ người dùng bị mất quyền truy cập vào tài khoản của họ, và làm cho địa chỉ email của tài khoản nói chung trở nên đáng tin cậy hơn. Đây là một phần của dự án [[mw:Special:MyLanguage/Product Safety and Integrity/Account Security|Bảo mật Tài khoản]]. [https://phabricator.wikimedia.org/T428292]
* Một bản cập nhật cho tính năng [[Special:Search|Tìm kiếm]] sẽ tinh chỉnh cách <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> hoạt động khi được sử dụng để loại trừ kết quả. Trước đây, việc sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> với phủ định có thể vô tình mở rộng kết quả tìm kiếm bằng cách thêm các không gian tên nằm trong phạm vi tìm kiếm, dẫn đến hành vi gây khó hiểu đối với những người dùng mong đợi một bộ lọc loại trừ đơn giản. Với lần cập nhật này, <bdi lang="zxx" dir="ltr"><code><nowiki>-prefix:</nowiki></code></bdi> nay sẽ loại trừ chặt những tiêu đề trang trùng khớp như mong đợi và có thể hiển thị cảnh báo nếu không gian tên có liên quan không được chọn một cách rõ ràng. Mặc dù vậy, hành vi của <bdi lang="zxx" dir="ltr"><code><nowiki>prefix:</nowiki></code></bdi> khi không có phủ định vẫn sẽ không thay đổi. [https://phabricator.wikimedia.org/T427443]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:33}} {{PLURAL:33|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến người đánh giá sử dụng thanh công cụ Quản lý Trang (Page Curation) không tự động được đăng ký theo dõi các cuộc thảo luận mà họ bắt đầu bình luận trên trang nay đã được giải quyết. Người đánh giá giờ sẽ nhận được thông báo khi có người nào đó trả lời những cuộc thảo luận này. [https://phabricator.wikimedia.org/T329346]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Kể từ ngày 29 tháng 6, các lượt tải xuống tự động từ trang dumps.wikimedia.org sẽ phải tuân theo [[Foundation:Special:MyLanguage/Policy:Wikimedia Foundation User-Agent Policy|quy định về user-agent]]. Các yêu cầu tự động mà cung cấp user-agent trống hoặc chung chung sẽ bị chặn. Việc truy cập vào các bản sao lưu (dump) thông qua Dịch vụ Đám mây Wikimedia sẽ không bị ảnh hưởng. Đây là thông báo tiếp theo sau thông báo được đưa ra trong [[m:Special:MyLanguage/Tech/News/2026/25|Bản tin Kỹ thuật số 25-2026]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.9|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/27|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W27"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 11:48, ngày 29 tháng 6 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30744833 -->
== <span lang="en" dir="ltr">Tech News: 2026-28</span> ==
<div lang="en" dir="ltr">
<section begin="technews-2026-W28"/><div class="plainlinks">
Latest '''[[m:Special:MyLanguage/Tech/News|tech news]]''' from the Wikimedia technical community. Please tell other users about these changes. Not all changes will affect you. [[m:Special:MyLanguage/Tech/News/2026/28|Translations]] are available.
'''Updates for editors'''
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] View all {{formatnum:34}} community-submitted {{PLURAL:34|task|tasks}} that were [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|resolved last week]]. For example, an issue where the search bar results on Wikidata, showed English results instead of using the correct language fallback for users of language variants, has now been fixed. Search suggestions will now follow the expected language fallback chain. [https://phabricator.wikimedia.org/T429769]
'''Updates for technical contributors'''
* In preparation for [[m:Special:MyLanguage/Event:Celebrate Women|Celebrate Women campaign]] planned for March 2027, the Wikimedia Foundation’s [[m:Special:MyLanguage/Wikimedia Foundation/Advancement/Community Growth/Content Enablement|Content Enablement team]] has launched a 22-question survey to better understand technical contributions by women+ (anyone who identifies as a woman) across Wikimedia projects. The survey takes approximately 15–20 minutes to complete and will remain open until 20 July 2026. The [[m:Special:MyLanguage/Celebrate Women/Technical contributions survey|questions]] are also available on-wiki for review in advance.
* The [[mw:Special:MyLanguage/Extension:Score|Score extension]] now supports rendering music scores as SVG images in addition to PNG, addressing a long-standing [[:phab:T49578|feature request]] and resolving historical image quality issues. Both formats are now provided to clients, with PNG in the <bdi lang="zxx" dir="ltr"><code><nowiki>src</nowiki></code></bdi> attribute and SVG in the <bdi lang="zxx" dir="ltr"><code><nowiki>srcset</nowiki></code></bdi> attribute.
* The new [[wikitech:Parsoid|Parsoid]] parser [[mw:Special:MyLanguage/Parsoid/Parser_Unification/Updates|continues to be deployed to additional wikis]], making it easier to introduce new reading and editing features. It was enabled on French Wikipedia, bringing total progress to covering 78.9% of Wikipedia page views. Rollout to English Wikipedia desktop will progress through this week.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Recurrent item]] Detailed code updates later this week: [[mw:MediaWiki 1.47/wmf.10|MediaWiki]]
'''In depth'''
* The Wikimedia Hackathon 2026 [[diffblog:2026/06/29/wikimedia-hackathon-2026-building-collaborating-and-shaping-the-future-together/|recap blog post]] is now live. It highlights the projects, sessions, and social activities from this year’s event, and shares initial plans for the 2027 Wikimedia Hackathon.
'''''[[m:Special:MyLanguage/Tech/News|Tech news]]''' prepared by [[m:Special:MyLanguage/Tech/News/Writers|Tech News writers]] and posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Contribute]] • [[m:Special:MyLanguage/Tech/News/2026/28|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Subscribe or unsubscribe]].''
</div><section end="technews-2026-W28"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 13:57, ngày 6 tháng 7 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30773578 -->
== Bản tin Kỹ thuật: Tuần 29-2026 ==
<section begin="technews-2026-W29"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/29|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Tính năng [[mw:Special:MyLanguage/Growth/Revise_Tone|Xem lại Giọng văn]] giúp người mới xác định những đoạn văn trong bài viết Wikipedia mà có thể chứa ngôn ngữ không bách khoa và khuyến khích họ xem xét lại giọng văn đó. Tính năng này đã được [[w:en:A/B_testing|thử nghiệm A/B]] trên các Wikipedia tiếng Ả Rập, tiếng Anh, tiếng Pháp và tiếng Bồ Đào Nha, tại đó tỷ lệ hoàn thành nhiệm vụ của người mới [[mw:Special:MyLanguage/Growth/Revise_Tone#Experiment_Results|tăng 38.7%]] so với nhiệm vụ Hiệu đính mặc định, mà không làm giảm chất lượng sửa đổi. Cuộc thử nghiệm đã kết thúc vào ngày 9 tháng 7 và tính năng này nay đã có sẵn cho tất cả mọi người trên các wiki này, đồng thời có thể cấu hình được thông qua Cấu hình Cộng đồng. [[phab:T426364|Kế hoạch]] dự kiến là sẽ phát hành Xem lại Giọng văn đến nhiều trang wiki hơn.
* Cấu hình cộng đồng cho phép [[mw:Special:MyLanguage/Help:Growth/Mentorship#Automated mentor list cleanup|tự động loại bỏ cố vấn không hoạt động]] dựa trên các tiêu chí có thể cấu hình được sẽ được kích hoạt vào thứ 5, ngày 16, [[mw:Special:MyLanguage/Growth/Deployment|trên một số wiki]] để đảm bảo danh sách cố vấn được cập nhật. Cố vấn là những người đóng góp có kinh nghiệm, tự nguyện tham gia giúp đỡ người dùng mới trên wiki thông qua [[mw:Special:MyLanguage/Growth/Feature summary|Tính năng Phát triển (Growth)]]. Bảo quản viên nay có thể chuẩn bị các cài đặt thông qua [[w:Special:CommunityConfiguration/Mentorship|Đặc biệt:Cấu hình Cộng đồng/Cố vấn]]; những cài đặt này sẽ có hiệu lực kể từ thứ 5.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:38}} {{PLURAL:38|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến một số người dùng ứng dụng Wikipedia trên thiết bị Android bị đăng xuất ngay sau khi đăng nhập, khiến họ không thể duy trì trạng thái đăng nhập và sửa đổi trang, nay đã được giải quyết. [https://phabricator.wikimedia.org/T316916]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Việc sửa đổi trang thông qua đoạn mã người dùng hoặc tiện ích khiến cho nhãn danh sách theo dõi mà người dùng gán cho trang đó bị đặt lại. Vấn đề này nay đã được giải quyết. [https://phabricator.wikimedia.org/T423778]
* Để khắc phục lỗi Safari (xem [[phab:T425211]]), trên các wiki đã kích hoạt Parsoid, các liên kết wiki href nay sử dụng urls tuyệt đối thay vì url tương đối theo giao thức. Đầu ra API REST vẫn sẽ không thay đổi và sẽ tiếp tục sử dụng url tương đối theo giao thức. Các tiện ích, đoạn mã người dùng, bot và CSS có thể cần được điều chỉnh nếu chúng dựa vào sự hiện diện của url tương đối theo giao thức trong các liên kết wiki href. [https://phabricator.wikimedia.org/T431358]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.11|MediaWiki]]
'''Chuyên sâu'''
* Nhóm Nền tảng Thử nghiệm của Quỹ Wikimedia đã đăng bài viết trên blog phản ánh về năm đầu tiên thực hiện thử nghiệm có cấu trúc của họ. Bài viết nêu bật những thử nghiệm thành công như Kiểm tra Chép dán, Kiểm tra Nguồn tham khảo và Kiểm tra Giọng văn, những thử nghiệm đã cải thiện kết quả sửa đổi và được triển khai cho nhiều người dùng hơn, cũng như những thử nghiệm không dẫn đến việc thay đổi sản phẩm. [[diffblog:2026/07/07/moving-the-needle-how-we-test-new-ideas-across-wikimedia-projects|Đọc thêm]].
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/29|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W29"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 16:11, ngày 13 tháng 7 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30804401 -->
== Bản tin Kỹ thuật: Tuần 30-2026 ==
<section begin="technews-2026-W30"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/30|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* [[mw:Special:MyLanguage/Reader/Reader Experience|Nhóm Trải nghiệm Người đọc]] đã kết hợp phản hồi của cộng đồng xoay quanh vị trí của các nút sao theo dõi và nút danh sách theo dõi đối với [[mw:Special:MyLanguage/Readers/Reader Experience/WE3.3.4 Reading lists|tính năng beta Danh sách Đọc]], nhằm cho phép lưu lại các bài viết để đọc sau – một [[m:Special:MyLanguage/Community Wishlist/W102|mục danh sách mong muốn]] để đưa chức năng này lên web. Các biên tập viên được mời kích hoạt tính năng beta để thử nghiệm tính năng này và [[phab:T426453|chia sẻ suy nghĩ của mình]].
* [[mw:Special:MyLanguage/VisualEditor/Suggestion Mode|Chế độ Đề xuất]] cung cấp những đề xuất sửa đổi trong Trình Soạn thảo Trực quan để cải thiện các bài viết trên Wikipedia. [[Special:EditChecks|Mọi đề xuất]] đều [[mw:Special:MyLanguage/Help:Suggestion mode#For administrators – local customization|có thể được cộng đồng cấu hình]]. Tính năng [[mw:Special:MyLanguage/Edit check/TextMatch|Văn bản Khớp chính xác]] (TextMatch) là một cách giúp cho các tình nguyện viên có thể tạo đề xuất tùy chỉnh cục bộ. Tính năng này tìm kiếm các chuỗi văn bản trong bài viết, và nay cũng bao gồm việc hỗ trợ cho các biểu thức chính quy. Điều này mang lại cho các tình nguyện viên độ chính xác và tính linh hoạt cao hơn đối với những loại đề xuất mà họ có thể tạo ra cục bộ. Lưu ý: Đề xuất [[mw:Special:MyLanguage/Edit check/Configuration#:~:text=maximumEditcount|có thể được nhắm tới]] dựa trên số lần sửa đổi của người thực hiện sửa đổi cũng như các khía cạnh khác của trang. Bạn có thể [[mw:Special:MyLanguage/Help:Suggestion mode#Create custom local types of Suggestions|tìm ví dụ từ các cộng đồng khác]] để lấy cảm hứng, kể cả việc sử dụng Văn bản Khớp chính xác nhằm phát hiện: lỗi chính tả, lỗi ngữ pháp, có khả năng quảng cáo, lời sáo rỗng, cách sử dụng dấu gạch ngang hoặc dấu gạch nối không chính xác, từ khóa thời gian không cụ thể, tên lỗi thời, v.v. Bất kỳ [[mw:Special:MyLanguage/Talk:VisualEditor/Suggestion Mode|phản hồi]] nào đều được chúng tôi hoan nghênh.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:27}} {{PLURAL:27|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, sự cố về công cụ SVG Translate khiến cho nó có thể sử dụng phiên bản tập tin lỗi thời, khiến các bản dịch hiện có bị ghi đè khi các bản dịch mới được tải lên, nay đã được [[phab:T430577|giải quyết]]. Nhìn chung, trong quý cuối cùng từ tháng 4 đến tháng 6 năm 2026, Quỹ Wikimedia đã giải quyết khoảng 337 tác vụ cộng đồng.
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Trên các wiki có hỗ trợ Parsoid, Parsoid nay hiển thị tối đa 1.250 hình ảnh mỗi trang. Một danh mục theo dõi mới, "media-limit-reached", sẽ sớm được cung cấp để xác định các trang đã đạt đến giới hạn này, giúp dễ dàng tìm thấy nội dung có thể bị hạn chế đầu ra phương tiện trong quá trình hiển thị. Xem [[phab:T430854]] để biết thêm thông tin và cung cấp phản hồi.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.12|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/30|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W30"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 05:46, ngày 21 tháng 7 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30836091 -->
== Request for comment (the future of Abstract Wikipedia) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies if this has not yet been translated into your wiki's language. {{int:Please-translate}}
You are invited to voice your opinions in a [[:m:Requests for comment/The future of Abstract Wikipedia|request for comment about the future of Abstract Wikipedia]]. {{Int:Feedback-thanks-title}}
[[:m:User:Kowal2701|Kowal2701]] ([[:m:User talk:Kowal2701|talk]]) 12:25, ngày 24 tháng 7 năm 2026 (UTC)
</bdi>
<!-- Tin nhắn của Thành viên:DreamRimmer@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== Bản tin Kỹ thuật: Tuần 31-2026 ==
<section begin="technews-2026-W31"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/31|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Wishlist item]] Công cụ [[mw:Special:MyLanguage/ContentTranslation|Dịch Nội dung]] nay hỗ trợ chế độ tối, nhằm đáp ứng [[m:Community Wishlist/W544|yêu cầu từ Mong muốn Cộng đồng]]. Điều này giúp công cụ tương thích với các tính năng hỗ trợ khả năng tiếp cận có sẵn trong các giao diện Vector 2022 và Minerva, giúp giảm việc gây mỏi mắt cho người dùng khi dịch nội dung. [https://phabricator.wikimedia.org/T367077]
* Chế độ soạn thảo mã nguồn của Công cụ Thảo luận (DiscussionTools) và Trình soạn thảo mã nguồn 2017 nay sẽ cung cấp tính năng tự động điền cho các liên kết (<bdi lang="zxx" dir="ltr"><code><nowiki>[[</nowiki></code></bdi>), bản mẫu (<bdi lang="zxx" dir="ltr"><code><nowiki>{{</nowiki></code></bdi>), thẻ HTML và phân tích cú pháp (<bdi lang="zxx" dir="ltr"><code><nowiki><</nowiki></code></bdi>), cũng như các từ ma thuật (<bdi lang="zxx" dir="ltr"><code><nowiki>__</nowiki></code></bdi>), giúp việc chèn các liên kết, bản mẫu và mã đánh dấu wiki khác trong quá trình sửa đổi trở nên nhanh chóng và dễ dàng hơn. [https://phabricator.wikimedia.org/T432400]
* [[mw:Special:MyLanguage/Readers/Reader Growth/Mobile page previews|Nhóm Phát triển Người đọc]] đã kết thúc việc thử nghiệm với tính năng xem trước trang trên thiết bị di động và sẽ không triển khai tính năng này nữa. Tính năng Xem trước Trang là một cửa sổ bật lên ở cuối trang xuất hiện khi người đọc nhấn vào liên kết xanh, hiển thị hình thu nhỏ, đoạn mở đầu và tùy chọn mở bài viết. Thử ngiệm cho thấy tỷ lệ giữ chân người dùng không thay đổi nhưng các chỉ số khác đều mang tính tiêu cực, điều này có nghĩa là người đọc trên trang web dành cho thiết bị di động thích truy cập trực tiếp vào các bài viết được liên kết hơn là sử dụng tính năng xem trước trang.
* Nhóm Trải nghiệm Người đọc đã bước đầu ghi nhận những kết quả khả quan từ [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|tính năng Danh sách Đọc]], trong đó 93% người dùng tham gia báo cáo rằng tính năng này hữu ích. Danh sách Đọc giúp người đọc hoạt động tích cực lưu lại các bài viết để đọc sau này và hỗ trợ mục tiêu học tập của họ trên các dự án Wikimedia. Nhóm dự định sẽ tiếp tục cải tiến trước khi mở rộng tính năng này cho nhiều người dùng hơn.
* Sáng kiến [[mw:Special:MyLanguage/Wikimedia Apps/Team/Explore Feed Refresh|Làm mới Nguồn cấp dữ liệu Khám phá]] đã được thử nghiệm với những người đọc mới và không thường xuyên sử dụng ứng dụng Wikipedia. Nguồn cấp dữ liệu được làm mới giúp người đọc khám phá những nội dung mới và phù hợp với mình. Với kết quả mức độ tương tác với nguồn cấp dữ liệu tăng 10,5%, nhóm Ứng dụng Wikimedia đã quyết định mở rộng việc thiết kế lại Nguồn cấp dữ liệu Trang chủ sang iOS, áp dụng những kinh nghiệm thu được từ phiên bản dành cho Android.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:23}} {{PLURAL:23|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến cho tên chủ đề trong tính năng Hướng dẫn Bài viết hiển thị sai cách viết hoa trên Wikipedia tiếng Pháp nay đã được giải quyết. Tên chủ đề nay sẽ tuân theo đúng quy tắc viết hoa của ngôn ngữ đó. [https://phabricator.wikimedia.org/T427201]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Sau khi thực hiện một số [[mw:Special:MyLanguage/Contributors/Account Creation Experiments|Thử nghiệm Tạo Tài khoản]] để cải thiện tỷ lệ hoàn tất việc đăng ký, một phiên bản mới của trường tên người dùng trên trang [[Special:CreateAccount|Tạo Tài khoản]] đã được triển khai. Phiên bản này bao gồm [[:c:File:Create account - July 2026 updates.png|một cửa sổ bật lên nhằm tóm tắt quy định về tên người dùng]] để cung cấp hướng dẫn rõ ràng hơn trong quá trình tạo tài khoản. Là một phần của thay đổi này, các thông báo <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-helpusername</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-help</nowiki></code></bdi> mà một số cộng đồng đã cấu hình sẽ không còn được sử dụng nữa. Nếu cộng đồng muốn tùy chỉnh hướng dẫn hiển thị trong cửa sổ bật lên mới, cộng đồng có thể sửa đổi các thông báo sau: <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet1</nowiki></code></bdi>, <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet2</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>createacct-username-policy-popover-bullet3</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T430604]
* Cuối tuần này, [[mw:Special:MyLanguage/Help:Extension:CodeMirror|trình làm nổi bật cú pháp CodeMirror]] sẽ cung cấp [[w:en:Theme (computing)|các chủ đề]]. Các chủ đề có thể được chọn từ menu thả xuống trong hộp thoại [[mw:Special:MyLanguage/Help:Extension:CodeMirror#CodeMirror preferences|tùy chọn CodeMirror]] hoàn chỉnh. Đối với mã wiki, các chủ đề có sẵn là mặc định, thân thiện với người mù màu (trước đây là tùy chọn dễ phân biệt cho người mù màu trong [[Special:Preferences#mw-prefsection-editing]]) và không làm nổi bật. Đối với các ngôn ngữ lập trình (ví dụ: CSS/JavaScript/JSON/Vue/Lua), hiện có sẵn một vài chủ đề. Các chủ đề tương tự này sau này cũng sẽ có sẵn cho mã wiki. [https://phabricator.wikimedia.org/T163533]
* Kể từ giờ trở đi, các wiki có thể giới hạn sửa đổi trong không gian tên "Thành viên" chỉ cho chính thành viên đó và một số nhóm người dùng nhất định. [[mw:Special:MyLanguage/Manual:$wgRestrictUserPageEditing|Đọc tài liệu hướng dẫn cấu hình]] để tìm hiểu thêm.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.14|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/31|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W31"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:49, ngày 27 tháng 7 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30856308 -->
== Bản tin Kỹ thuật: Tuần 32-2026 ==
<section begin="technews-2026-W32"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/32|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* [[mw:Special:MyLanguage/Readers/Reader Experience|Nhóm Trải nghiệm Người đọc]] đã phát triển một [https://82db7c8d4b.catalyst.wmcloud.org/w/index.php?title=Regent%27s_Park&uselang=de bản vá demo] nhằm bọc thanh công cụ trang thành hai dòng nếu không có đủ không gian bề ngang cho tất cả các nút. Điều này nhằm mục đích giảm tình trạng quá tải trên thanh công cụ trong giao diện Vector 2022, có thể xảy ra trên một số trang ngôn ngữ Wikipedia trên một số độ rộng màn hình nhất định. [https://phabricator.wikimedia.org/T429518]
* Nhóm Trải nghiệm Người đọc dự kiến sẽ phát hành [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Danh sách Đọc]], một [[m:Special:MyLanguage/Community Wishlist Survey 2021/Mobile and apps/Have Apps reading lists available on Destop/Mobile|mục trong Danh sách Mong muốn Cộng đồng]], hiện đang có sẵn để dùng thử dưới dạng tính năng beta, dưới dạng tính năng đầy đủ vào tháng 9. Trước thời điểm đó, chúng tôi cần các tình nguyện viên biên dịch giúp [https://translatewiki.net/w/i.php?title=Special%3ATranslate&group=ext-readinglists&filter=&action=translate dịch các chuỗi này] sang những ngôn ngữ khác. Tính năng này giúp hỗ trợ các mục tiêu đọc và học tập trên Wikipedia.
* Vào tuần tới, mục lục trên các trang tập tin Wikimedia Commons sẽ được cải thiện bằng cách hợp nhất mục lục trang tập tin với mục lục của trang. Điều này sẽ giúp việc hiểu cấu trúc trang tập tin, điều hướng đến những đề mục cụ thể, và chia sẻ liên kết đến các đề mục riêng biệt trở nên dễ dàng hơn. [https://phabricator.wikimedia.org/T332644]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:24}} {{PLURAL:24|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một lỗi khiến cho một số hình [[w:TIFF|TIFF]] không thể tải được sau khi nhấn vào hình thu nhỏ của nó, khiến cho hình bị hỏng được hiển thị thay vì hình có kích thước đầy đủ, nay đã được giải quyết. [https://phabricator.wikimedia.org/T429326]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Bộ chọn biến và hàm trong Bộ lọc Sai phạm (AbuseFilter) đã được cập nhật để hỗ trợ tìm kiếm và tự động điền. Điều này sẽ giúp những người quản lý bộ lọc tìm kiếm biến hoặc hàm mong muốn nhanh hơn. [https://phabricator.wikimedia.org/T323698]
* Các định dạng MJPEG và VP8 đã bị loại bỏ khỏi trình phát video. Thay vào đó, định dạng MP4 (MPEG-4 Phần 2) được thêm vào, nhằm cung cấp video chất lượng cao hơn cho các thiết bị iPhone đời cũ. Việc cập nhật lại tất cả các video hiện có sẽ có thể mất vài tuần. Định dạng mặc định cho các thiết bị hiện đại vẫn sẽ được giữ nguyên (VP9/WebM). [https://phabricator.wikimedia.org/T358266]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.15|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/32|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W32"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 19:46, ngày 3 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30872536 -->
== Bản tin Kỹ thuật: Tuần 33-2026 ==
<section begin="technews-2026-W33"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/33|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* [[File:Maki-gift-15.svg|12px|link=|class=skin-invert|Mục Mong muốn cộng đồng]] Công cụ mới Trình tạo Biểu đồ (ChartWizard) [[c:Special:ChartWizard/Data:Example.Pie.chart|nay đã có mặt trên Wikimedia Commons]] dành cho các thành viên có mong muốn tạo các biểu đồ từ dữ liệu của riêng mình. Trình hướng dẫn này giúp [[mw:Special:MyLanguage/Extension:Chart|phần mở rộng Chart]] trở nên thân thiện hơn với người mới bắt đầu bằng cách cho phép các biên tập viên tạo biểu đồ, chẳng hạn như biểu đồ cột và biểu đồ tròn, mà không cần phải sử dụng JSON. Các thành viên vẫn có thể chuyển sang trình soạn thảo mã JSON nếu họ muốn. Mọi ý kiến đóng góp về công cụ mới này đều được hoan nghênh trên [[m:Talk:Community Wishlist/W414|trang thảo luận của mong muốn này]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:19}} {{PLURAL:19|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho tiện ích Hình ảnh của Ngày của ứng dụng Wikipedia dành cho iOS hiển thị cùng một hình ảnh mỗi ngày thay vì cập nhật hàng ngày, nay đã được giải quyết. [https://phabricator.wikimedia.org/T430692]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Hình ảnh SVG cho [[mw:Special:MyLanguage/Extension:Math|công thức toán học]] sẽ sớm được tạo trong trình duyệt thay vì trên máy chủ. MathML vẫn sẽ tiếp tục được tạo trên máy chủ và hiển thị trong trình duyệt mà không cần JavaScript. Wikibooks sẽ áp dụng thay đổi này vào ngày 12 tháng 8, Wikisource vào ngày 19 tháng 8 và Wikipedia từ ngày 20-27 tháng 8. Bạn có thể thử thay đổi này bằng cách chọn "{{int:Mw-math-mathjax}}" trong phần tùy chọn của bạn. Thay đổi này là một phần trong lộ trình [[mw:Special:MyLanguage/RESTBase/deprecation|ngừng sử dụng RESTBase]] và [[phab:T431372|ngừng sử dụng Mathoid]]. [https://phabricator.wikimedia.org/T271001]
* <span class="mw-translate-fuzzy">Các trang thể loại sẽ sớm hỗ trợ việc sắp xếp các mục theo thời gian chúng được thêm vào thể loại. Điều này sẽ giúp việc tìm kiếm các trang được xếp thể loại gần đây hoặc đã xếp từ lâu trở nên dễ dàng hơn. Tính năng này cũng sẽ cải thiện quy trình làm việc đối với các thể loại bảo trì chẳng hạn như danh sách trang chờ xóa và các tác vụ rà soát theo thời gian khác. Bạn có thể sử dụng tham số URL <bdi lang="zxx" dir="ltr"><code><nowiki>cldsort=timestamp</nowiki></code></bdi> trong chế độ xem thể loại để sắp xếp các mục này.</span> [https://phabricator.wikimedia.org/T433768]
* Các [[mw:Special:MyLanguage/Extension:Gadgets|tiện ích]] và đoạn mã người dùng trên các wiki của Wikimedia nay có thể sử dụng [[phab:T395347|các tính năng theo chuẩn ES2018]] và [[phab:T419142|các tính năng theo chuẩn ES2019]] trong đoạn mã JavaScript. Trước đây, nền tảng chỉ cho phép sử dụng tối đa đến chuẩn ES2017. MediaWiki kiểm tra mã nguồn để bảo vệ chức năng khỏi các lỗi cú pháp và đảm bảo các đoạn mã đều hợp lệ trên tất cả [[mw:Special:MyLanguage/Compatibility#Browser_support_matrix|các trình duyệt được hỗ trợ]]. [https://phabricator.wikimedia.org/T419142]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.16|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/33|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W33"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:45, ngày 10 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30901051 -->
== Bản tin Kỹ thuật: Tuần 34-2026 ==
<section begin="technews-2026-W34"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/34|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Worklist|Tính năng Danh sách Công việc (Worklist)]] dành cho công cụ Đăng ký Sự kiện nay đã có mặt trên tất cả các dự án wiki của Wikimedia. Với Danh sách Công việc, ban tổ chức sự kiện có thể thêm trực tiếp các bài viết mà sẽ là trọng tâm của sự kiện vào trang sự kiện. Danh sách Công việc cũng hỗ trợ tính năng [[mw:Special:MyLanguage/Help:Extension:CampaignEvents/Registration/Worklist#How Event Pathways uses the worklist|Lộ trình Sự kiện (Event Pathways)]] giúp thông báo cho các biên tập viên khác về sự kiện sắp hoặc đang diễn ra khi họ sửa đổi một bài viết có trong Danh sách Công việc của sự kiện đó. Đây là phiên bản khả thi tối thiểu (MVP), và chúng tôi hoan nghênh mọi ý kiến đóng góp. Các ban tổ chức được khuyến khích thử tính năng này. Buổi [[m:Special:MyLanguage/Event:Worklist Setup Workshop: Get Your Event Ready|Hội thảo Thực hành Danh sách Công việc]] sẽ diễn ra vào ngày 18 tháng 6 lúc 16:00 UTC và ngày 19 tháng 6 lúc 11:00 UTC.
'''Cập nhật cho biên tập viên'''
* [[Special:ShortPages]] hiển thị các trang ngắn dựa trên kích thước của chúng, nhưng trong nhiều trường hợp danh sách này bị lấp đầy bởi các trang định hướng và đổi hướng mềm, khiến việc tìm kiếm chính các bài viết ngắn đó trở nên khó khăn hơn. Kể từ cuối tuần này, bạn sẽ có thể loại bỏ một bài viết khỏi trang đặc biệt này bằng cách thêm từ ma thuật <bdi lang="zxx" dir="ltr"><code><nowiki>__EXPECTSHORTPAGE__</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T433203]
* Một wiki mới đã được tạo ra: {{int:project-localized-name-group-wikipedia/vi}} tiếng [[d:Q3436680|Bole]] ([[w:bol:|<bdi lang="zxx" dir="ltr"><code><nowiki>w:bol:</nowiki></code></bdi>]]) [https://phabricator.wikimedia.org/T429921]
* Kể từ tuần ngày 17 tháng 8, thanh công cụ trang sẽ tự động xuống thành hai hàng khi không còn đủ không gian theo chiều ngang để hiển thị tất cả các nút. Đây là một [[phab:T429518|bản vá đã được hợp nhất hoàn toàn từ nhóm Trải nghiệm Người đọc]] nhằm giảm bớt tình trạng chật không gian trên thanh công cụ của giao diện Vector 2022, một vấn đề mà có thể xảy ra trên một số phiên bản ngôn ngữ Wikipedia ở một số độ rộng màn hình nhất định.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:16}} {{PLURAL:16|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, việc tải các tập tin có dung lượng lớn lên Wikimedia Commons đã trở nên ổn định hơn và ít gặp lỗi hơn sau một số bản sửa lỗi liên quan đến lỗi tải lên "Không thể lấy khóa". [https://phabricator.wikimedia.org/T386640]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Debian Bullseye sẽ kết thúc Hỗ trợ Dài hạn vào ngày 31 tháng 8 năm 2026. [[phab:T434103|Một số dự án Cloud VPS]] vẫn còn instance đang chạy Debian Bullseye. Bảo trì viên của những dự án này được khuyến khích chuyển sang Debian Bookworm hoặc Debian Trixie. Hiện đã có trang [[wikitech:Help:Cloud VPS instance operating system migration|hướng dẫn di chuyển]] nhằm giúp thực hiện quy trình này, đồng thời các thành viên cũng có thể muốn xem xem liệu khối lượng công việc của họ có phù hợp hơn với Toolforge hay không. Nếu bạn cần trợ giúp hoặc không thể hoàn tất quá trình chuyển đổi trước ngày 31 tháng 8, vui lòng liên hệ với quản trị viên Cloud VPS càng sớm càng tốt. [[listarchive:list/cloud-announce@lists.wikimedia.org/thread/RVIPQSYLKMSL5M46JP6NEJVGVE6I2RXQ/|Đọc thêm]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.16|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/34|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W34"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:03, ngày 17 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30922806 -->
== Bản tin Kỹ thuật: Tuần 35-2026 ==
<section begin="technews-2026-W35"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/35|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Trang [[Special:CreateAccount|Đặc biệt:Tạo tài khoản]] đã được đơn giản hóa như là một phần của nỗ lực nhằm hiện đại hóa trải nghiệm tạo tài khoản. Khung hiển thị số liệu thống kê về dự án sẽ không còn xuất hiện bên cạnh biểu mẫu trên giao diện trang web máy tính và di động. Nhiều thử nghiệm tạo tài khoản cho thấy việc sử dụng biểu mẫu đơn giản hơn giúp người dùng mới hoàn tất quy trình đăng ký dễ dàng hơn. [https://phabricator.wikimedia.org/T433783]
* Để cải thiện hiệu suất trang, các hình ảnh nay sẽ chỉ được tải khi người dùng xem chúng. Điều này có nghĩa là những hình ảnh nằm ở phần dưới của bài viết sẽ không được tải nếu người đọc không bao giờ cuộn trang xuống phần đó của bài viết, điều này có thể ảnh hưởng đến một vài số liệu liên quan đến hình ảnh. [https://phabricator.wikimedia.org/T148047]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:42}} {{PLURAL:42|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho các hình thu nhỏ trên Abstract Wikipedia có thể không hiển thị được sau khi tập tin tương ứng được di chuyển trên Wikimedia Commons, nay đã được giải quyết. Các hình thu nhỏ nay sẽ được cập nhật chính xác khi tập tin được di chuyển. [https://phabricator.wikimedia.org/T433448]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Thẻ Thông tin Thành viên là một tính năng giúp các tuần tra viên xem thông tin về các tài khoản người dùng. Trước đây, tính năng này chỉ xuất hiện ở những nơi chẳng hạn như lịch sử trang, nhật trình và thay đổi gần đây. Giờ đây, các thành viên cũng có thể [[mw:Special:MyLanguage/Help:Extension:CheckUser#User_Info_card_in_page_content|đặt thẻ này vào nội dung trang]], bằng cách sử dụng hàm phân tích cú pháp <bdi lang="zxx" dir="ltr"><code><nowiki>{{#uic:}}</nowiki></code></bdi>. Điều này đặc biệt hữu ích trong các bản mẫu như [[:en:Template:Userlinks|<bdi lang="zxx" dir="ltr"><code><nowiki>{{Userlinks}}</nowiki></code></bdi>]] (hoặc các biến thể chuyên biệt của chúng), vì nó sẽ giúp việc xem thông tin về thành viên trên nhiều trang bảng tin nhắn trở nên dễ dàng hơn. Thẻ này sẽ chỉ được hiển thị với những người dùng đã kích hoạt tính năng này trong phần [[Special:Preferences#mw-input-wpcheckuser-userinfocard-enable|tùy chọn]] của mình. [https://phabricator.wikimedia.org/T424466]
* Do những rủi ro về bảo mật và quyền riêng tư của người dùng, chúng tôi đã vô hiệu hóa quyền truy cập vào các URL dẫn đến trang <bdi lang="zxx" dir="ltr"><code><nowiki>Special:MyPage</nowiki></code></bdi> khi sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. Nếu điều này ảnh hưởng tới bạn, hãy cân nhắc xem bạn có thể sử dụng một phương thức nào đó thay thế hay không. Các URL dẫn đến trang <bdi lang="zxx" dir="ltr"><code><nowiki>Special:MyPage</nowiki></code></bdi> vẫn có thể truy cập và sử dụng được mà không cần sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. Các URL cụ thể cho trang thành viên (v.d. <bdi lang="zxx" dir="ltr"><code><nowiki>User:Myusername</nowiki></code></bdi>) vẫn có thể được sử dụng với <bdi lang="zxx" dir="ltr"><code><nowiki>action=raw</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T120386]
* Nhờ một bản cập nhật, phần mềm tạo hình thu nhỏ đã được cải tiến. Nó bao gồm việc nâng cấp <bdi lang="zxx" dir="ltr"><code><nowiki>librsvg</nowiki></code></bdi> lên phiên bản 2.60 và <bdi lang="zxx" dir="ltr"><code><nowiki>ImageMagick</nowiki></code></bdi> lên 7, cũng như việc khắc phục một số lỗi tạo hình thu nhỏ đã tồn tại từ lâu chẳng hạn như lỗi hiển thị. [https://phabricator.wikimedia.org/T419815#12222841]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.17|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/35|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W35"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:45, ngày 24 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30961208 -->
== Bản tin Kỹ thuật: Tuần 36-2026 ==
<section begin="technews-2026-W36"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/36|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Một hình thức mới cho Danh sách Mong muốn Cộng đồng hiện đang được lấy ý kiến đóng góp. Bạn có thể [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027|đọc các ý tưởng đề xuất trên Meta]]. Quy trình mới này nhằm nâng cao hiệu quả sàng lọc, bỏ phiếu và ưu tiên cho các mong muốn nhằm đảm bảo tính minh bạch và sự cân bằng giữa các nhóm dự án và phiên bản ngôn ngữ. Đợt tham vấn này sẽ kéo dài trong vòng hai tuần.
'''Cập nhật cho biên tập viên'''
* Bản phát hành mới nhất của ứng dụng Wikipedia dành cho Android bao gồm các cập nhật đối với tính năng Đã lưu (Saved), giúp trải nghiệm lưu bài viết trên ứng dụng trở nên đồng bộ hơn với phiên bản iOS và Web. Bản cập nhật này thiết kế lại tab Đã lưu với giao diện “Tất cả bài viết”, xóa bỏ danh sách đọc mặc định “Đã lưu”, đổi tên các danh sách đọc thành “Bộ sưu tập” (Collections) và hiện đại hóa trải nghiệm lưu bài viết. [https://phabricator.wikimedia.org/T420788]
* Tính năng [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|Danh sách Đọc]] đã được kích hoạt cho tất cả người dùng đã đăng nhập trên Wikipedia tiếng Bengali, tiếng Trung, tiếng Séc và tiếng Việt vào ngày 25 tháng 8, sau vài tháng hoạt động dưới dạng tính năng thử nghiệm (beta). Danh sách Đọc sẽ được triển khai đến tất cả người dùng đã đăng nhập trên Wikipedia tiếng Ả Rập, tiếng Pháp và tiếng Indonesia vào ngày 1 tháng 9, sau đó là Wikipedia tiếng Anh vào ngày 14 tháng 9, và trên tất cả các wiki Wikipedia còn lại vào ngày 28 tháng 9.
* Vào cuối tháng này, một số độc giả chưa đăng nhập trên Wikipedia tiếng Bengali, tiếng Séc, tiếng Ba Tư, tiếng Anh và tiếng Ba Lan sử dụng giao diện Minerva trên thiết bị di động sẽ nhìn thấy một [[mw:Special:MyLanguage/Readers/Reader_Growth/Minimal_Minerva|thanh điều hướng được cập nhật]] trong [[:w:vi:Thử nghiệm A/B|thử nghiệm A/B]]. Thử nghiệm này sẽ so sánh thanh điều hướng hiện tại với phiên bản mới được thiết kế nhằm giúp người dùng tìm kiếm thông tin một cách nhanh chóng và dễ dàng hơn. Mục tiêu là xác định xem những thay đổi này có khuyến khích độc giả quay lại thường xuyên hơn hay không. Thử nghiệm này sẽ không làm thay đổi trải nghiệm của người dùng và/hoặc biên tập viên đã đăng nhập.
* Các biên tập viên chuyên bảo trì các trang đổi hướng, bản mẫu và thể loại được sử dụng trên các trang đổi hướng nay có thêm các phương thức cải tiến để tìm kiếm và quản lý trang đổi hướng. Trước đây, các trang đổi hướng không thể tìm kiếm được. Hai từ khóa tìm kiếm mới, <bdi lang="zxx" dir="ltr"><code><nowiki>onlyredirects:</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>withredirects:</nowiki></code></bdi>, giờ đây cho phép tìm kiếm trực tiếp các trang đổi hướng và có thể kết hợp với các từ khóa hiện có như <bdi lang="zxx" dir="ltr"><code><nowiki>incategory:</nowiki></code></bdi>, <bdi lang="zxx" dir="ltr"><code><nowiki>intitle:</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>insource:</nowiki></code></bdi>. [https://phabricator.wikimedia.org/T204089]
* Các công cụ tìm kiếm ISBN để tạo các nguồn trích dẫn gần đây đã không hoạt động do các vấn đề liên quan đến dịch vụ bên ngoài. Các nhà phát triển đang nỗ lực để tìm giải pháp khắc phục. [https://phabricator.wikimedia.org/T435179]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:30}} {{PLURAL:30|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho việc tìm kiếm trang theo thể loại sử dụng <bdi lang="zxx" dir="ltr"><code><nowiki>deepcat</nowiki></code></bdi> có thể không trả về kết quả hoặc trả về kết quả không liên quan nay đã được giải quyết. [https://phabricator.wikimedia.org/T414859]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Tên miền của URL cho hình thu nhỏ đang được thay đổi từ $1 sang thumb.wikimedia.org. Các URL cũ sẽ tiếp tục hoạt động trong tương lai gần, nhưng MediaWiki sẽ chuyển sang sử dụng tên miền mới. Các URL trỏ đến các loại tập tin đa phương tiện khác như tập tin gốc, video và tập tin chuyển mã vẫn sẽ được phục vụ từ upload.wikimedia.org. [https://phabricator.wikimedia.org/T427465]
* [https://www.mediawiki.org/w/index.php?api=wmf-math%2Fv1&title=Special%3ARestSandbox API Toán học (Math API)] của Wikimedia hiện đã lỗi thời và không còn được hỗ trợ. Các điểm cuối (endpoints) này sẽ chính thức ngừng hoạt động hoàn toàn vào cuối tháng 9 năm 2026. Các nhà phát triển gọi các điểm cuối này nên chuyển sang các giải pháp hiển thị toán học thay thế, chẳng hạn như [https://developer.mozilla.org/en-US/docs/Web/MathML MathML] tích hợp sẵn hoặc [https://www.mathjax.org/ MathJax]. Các hệ thống MediaWiki được cài đặt bởi bên thứ ba sử dụng phần mở rộng Math để hiển thị công thức bắt buộc phải nâng cấp lên phiên bản v1.43 trở lên để tránh gián đoạn dịch vụ.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.18|MediaWiki]]
'''Chuyên sâu'''
* Đọc thêm về [[mw:Special:MyLanguage/Edit_check/TextMatch|TextMatch]] trong một bài viết trên Diff có tiêu đề: [[diffblog:2026/08/28/custom-edit-suggestions-for-every-wiki-how-communities-are-shaping-suggestion-mode-with-textmatch/|Đề xuất sửa đổi tùy chỉnh cho mọi wiki: Cộng đồng đang định hình Chế độ Gợi ý với TextMatch như thế nào]].
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/36|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W36"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 20:53, ngày 31 tháng 8 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=30990659 -->
== Bản tin Kỹ thuật: Tuần 37-2026 ==
<section begin="technews-2026-W37"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/37|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Tính năng [[mw:Special:MyLanguage/Help:Growth/Tools/Add_a_link|Thêm Liên kết]] đã được nâng cấp cho người dùng trên Wikipedia tiếng Anh với khả năng phát hiện tốt hơn các liên kết có sự khác biệt về cách viết hoa. Cải tiến này sẽ giúp giảm bớt những gợi ý mơ hồ gây ra do sự khác biệt về cách viết viết hoa trong tiêu đề bài viết, bao gồm cả những bài viết về các sản phẩm văn hóa. Hiện kế hoạch cải tiến giai đoạn 2 đã được lên lịch, kế hoạch cũng sẽ nhằm mục đích chuẩn bị phát hành tính năng này ở các ngôn ngữ khác. [https://phabricator.wikimedia.org/T435526#12240876] [https://phabricator.wikimedia.org/T434259]
* Tính năng [[mw:Special:MyLanguage/Article_guidance|Chỉ dẫn bài viết]] sẽ được bật theo mặc định cho các biên tập viên mới trên Wikipedia tiếng Anh Đơn giản và Wikipedia tiếng Thổ Nhĩ Kỳ kể từ ngày 10 tháng 9 năm 2026 sau khi đã trải qua [[mw:Special:MyLanguage/Article_guidance/Updates#Summary_of_experiment_result|một cuộc thử nghiệm]]. Các biên tập viên mới có từ 0 đến 99 sửa đổi sẽ tự động nhìn thấy tính năng này khi họ nhấn vào liên kết đỏ hoặc sử dụng tùy chọn "[[tr:Vikipedi:Madde_sihirbazı|Madde oluşturto]]" (tạo bài viết) trên Wikipedia tiếng Thổ Nhĩ Kỳ để tạo bài viết mới. Thay đổi này nhằm mục đích giúp các biên tập viên mới tạo các bài viết có chất lượng cao hơn và đáp ứng các tiêu chuẩn của từng dự án Wikipedia. [[phab:maniphest/query/z3tcTjmLMxk5/#R|Các cải tiến bổ sung]] sẽ tiếp tục được thực hiện dựa trên kết quả thử nghiệm và phản hồi từ cộng đồng.
* Công cụ [https://pageviews.wmcloud.org Phân tích Lượt xem Trang] nhằm cho phép người dùng so sánh lượt xem giữa nhiều trang, năm nay đã tròn 10 tuổi và được bổ sung thêm một số tính năng mới. Chúng bao gồm [[toolforge:wikinav|WikiNav]] nhằm cung cấp thông tin chuyên sâu vào cách độc giả Wikipedia khám phá nội dung, thống kê sửa đổi trong mục [https://pageviews.wmcloud.org/siteviews?range=latest-30&sites=en.wikipedia.org Siteviews], khả năng [https://pageviews.wmcloud.org/massviews?source=wikiproject&project=en.wikipedia.org tra cứu bài viết thuộc Dự án Wiki], cũng như hỗ trợ chế độ tối. [https://phabricator.wikimedia.org/T378549]
* Một thanh điều hướng [[mw:Special:MyLanguage/Readers/Reader_Growth/Minimal_Minerva|Minerva được đơn giản hóa về mặt trực quan]] đang được thử nghiệm dành cho các độc giả chưa đăng nhập sử dụng giao diện web di động trên các dự án Wikipedia tiếng Bengal, tiếng Séc, tiếng Anh, tiếng Ba Tư và tiếng Ba Lan. Thử nghiệm này nhằm xác định xem việc đơn giản hóa thanh điều hướng có cải thiện việc giữ chân độc giả hay không. Thử nghiệm sẽ diễn ra từ ngày 31 tháng 8 đến ngày 28 tháng 9, và người dùng không cần phải thực hiện bất kỳ thao tác nào.
* [[m:Special:MyLanguage/WMDE Technical Wishes|Nhóm Mong muốn Kỹ thuật của WMDE]] đang thực hiện việc cải tiến [[en:Wikipedia:VisualEditor/Named references|tên nguồn tham khảo được tạo tự động trong Trình Soạn thảo Trực quan]]. Các biên tập viên sẽ chỉ nhận thấy một thay đổi nhỏ kể từ tuần này. Khi thêm tên nguồn tham khảo tự động việc đánh số sẽ bắt đầu tại <bdi lang="zxx" dir="ltr"><code><nowiki>:1</nowiki></code></bdi> thay vì <bdi lang="zxx" dir="ltr"><code><nowiki>:0</nowiki></code></bdi>. Đọc thêm trên [[m:WMDE Technical Wishes/References/VisualEditor automatic reference names|trang dự án]]. [https://gerrit.wikimedia.org/r/c/VisualEditor/VisualEditor/+/1332704]
* Tất cả các wiki sẽ [[m:Special:MyLanguage/Tech/Server switch|chuyển sang chế độ chỉ đọc trong vài phút]] vào ngày 23 tháng 9. Kế hoạch dự kiến diễn ra lúc 14:00 UTC. Thông tin thêm về kế hoạch này sẽ được xuất bản trong Bản tin Kỹ thuật và cũng sẽ được đăng lên trên từng wiki trong các tuần tiếp theo. [https://phabricator.wikimedia.org/T433363]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:25}} {{PLURAL:25|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho [[mw:Special:MyLanguage/Parsoid|Parsoid]] có thể xử lý sai các thẻ nowiki được lồng nhau, khiến nội dung bị mất và hiển thị nội dung không mong muốn nay đã được giải quyết. [https://phabricator.wikimedia.org/T435116]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Bảo quản viên giao diện có thể cấu hình các tiện ích từ [[MediaWiki:Gadgets-definition]]. Định dạng của định nghĩa tiện ích đã được cập nhật và không còn yêu cầu tùy chọn <bdi lang="zxx" dir="ltr"><code><nowiki>ResourceLoader</nowiki></code></bdi> nữa, vì các tiện ích luôn được tải thông qua <bdi lang="zxx" dir="ltr"><code><nowiki>ResourceLoader</nowiki></code></bdi>. Điều này giúp đơn giản hóa cấu hình tiện ích bằng cách loại bỏ một tùy chọn không còn cần thiết nữa, giúp việc định nghĩa tiện ích trở nên dễ dàng hơn cho các bảo quản viên. [https://phabricator.wikimedia.org/T298199]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.19|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/37|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W37"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:44, ngày 7 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31008437 -->
== Bản tin Kỹ thuật: Tuần 38-2026 ==
<section begin="technews-2026-W38"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/38|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Nhóm Future Audiences đã mở một [[en:Special:MyLanguage/Wikipedia:Village pump (proposals)#New proposed experiment to let readers know about “Google preferred sources”|cuộc thảo luận trên Wikipedia tiếng Anh]] về một đề xuất thử nghiệm mới nhằm hiển thị thông báo tạm thời về tính năng mới [https://blog.google/products-and-platforms/products/search/original-high-quality-content-search/ Nguồn Ưu tiên của Google] dành cho độc giả Wikipedia truy cập từ Google. Thử nghiệm này nhằm kiểm tra xem liệu thông báo này có giúp thu hút khách truy cập quay lại Wikipedia thường xuyên hơn hay không. Tính năng Nguồn Ưu tiên cho phép người dùng chọn các trang web mà họ tin tưởng nhằm giúp Google có thể hiển thị nội dung từ các nguồn này một cách nổi bật hơn trong trải nghiệm trên Tìm kiếm và AI. Chúng tôi mong muốn triển khai thử nghiệm này trên các ngôn ngữ khác mà Google hỗ trợ và rất hoan nghênh sự hỗ trợ trong việc khởi xướng thảo luận trên các dự án wiki khác. Nếu bạn quan tâm, vui lòng liên hệ nhóm Future Audiences trên [[m:Special:MyLanguage/Future Audiences/Preferred sources|trang thảo luận]].
'''Cập nhật cho biên tập viên'''
* Nền tảng trò chuyện Discord ra mắt cơ chế (framework) tự thiết lập mới nhằm cho phép các trang web có thể sử dụng để tùy chỉnh cách hiển thị những liên kết đó khi được chia sẻ trên Discord. Nhóm Future Audiences dự định sẽ bắt đầu sử dụng cơ chế này để cải thiện cách hiển thị các liên kết Wikipedia khi được chia sẻ trên Discord, nhằm ghi công sửa đổi của các tình nguyện viên một cách tốt hơn. Hình thức và cách thức hoạt động của liên kết sẽ không thay đổi trong giai đoạn đầu của dự án này vì chúng tôi muốn thu thập một số dữ liệu cơ sở trước để đánh giá tác động của những thay đổi này trong tương lai. Dù vậy, nếu các thành viên cộng đồng đang hoạt động trên Discord có phát hiện ra bất kỳ vấn đề nào, họ có thể liên hệ qua [[phab:tag/future-audiences/|Phabricator]] hoặc [[m:Special:MyLanguage/Future Audiences|Metawiki]].
* Nhóm Phát triển Độc giả sẽ tiến hành một thử nghiệm xem liệu [[mw:Special:MyLanguage/Readers/Reader_Growth/Compact Lead|việc rút gọn phần mở đầu của bài viết]] kèm theo nút "đọc thêm" có giúp cải thiện việc giữ chân người đọc hay không. Thử nghiệm này sẽ bắt đầu vào ngày 17 tháng 9 trên các phiên bản Wikipedia tiếng Ả Rập, tiếng Tây Ban Nha, tiếng Pháp, tiếng Indonesia, tiếng Ý, tiếng Nhật, tiếng Bồ Đào Nha, tiếng Việt và tiếng Trung và sẽ kéo dài trong bốn tuần.
* Tất cả các wiki sẽ [[m:Special:MyLanguage/Tech/Server switch|chuyển sang chế độ chỉ đọc trong vòng vài phút]] vào ngày 23 tháng 9. Kế hoạch được lên lịch lúc 14:00 UTC. Thông tin chi tiết sẽ được đăng tải lên Bản tin Kỹ thuật và cũng sẽ được đăng lên từng wiki riêng lẻ trong tuần tới. [https://phabricator.wikimedia.org/T433363]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến [https://wikistats.wmcloud.org/ Wikistats] dành cho Wikipedia trả về lỗi HTTP 500 và không thể truy cập được, nay đã được giải quyết. [https://phabricator.wikimedia.org/T435959]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Các nhà phát triển đang bảo trì công cụ truy vấn các bảng liên kết của Wikimedia Commons cần cập nhật mã nguồn của mình để kết nối với cụm cơ sở dữ liệu (database cluster) x4 mới. Các bảng liên kết đã được chuyển từ cụm s4 sang x4, và sẽ không còn nhận được cập nhật trên cụm s4 nữa. Các bảng trang và đổi hướng vẫn sẽ tiếp tục khả dụng trên cả hai cụm này. Một bản sao dữ liệu wiki (wiki replica) cho cụm x4 sẽ được thiết lập sau này. Thay đổi này được thực hiện do cụm s4 đã trở nên quá lớn gây ảnh hưởng đến hiệu quả vận hành của bảng liên kết. Bạn có thể [[wikitech:Special:MyLanguage/News/2026 Commons links tables database split|đọc thêm]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.20|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/38|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W38"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15:31, ngày 14 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31039826 -->
== Chuyển đổi máy chủ - Wiki của bạn sẽ sớm chuyển sang chế độ chỉ đọc trong một khoảng thời gian ngắn ==
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Đọc thông báo này bằng ngôn ngữ khác]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
[[foundation:|Quỹ Wikimedia]] sẽ chuyển đổi lưu lượng qua lại giữa các trung tâm dữ liệu. Điều này sẽ giúp đảm bảo rằng Wikipedia và các wiki khác của Wikimedia vẫn có thể duy trì trực tuyến ngay cả sau tình huống thiên tai.
Mọi lưu lượng sẽ chuyển đổi vào ngày '''{{#time:j xg|2026-09-23|vi}}'''. Việc chuyển đổi này sẽ bắt đầu vào lúc '''[https://zonestamp.toolforge.org/{{#time:U|2026-09-23T14:00|en}} {{#time:H:i e|2026-09-23T14:00}}]'''.
Dù vậy, vì một số hạn chế của phần mềm [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], mọi sửa đổi đều phải bị ngưng lại khi việc chuyển đổi được thực hiện. Chúng tôi chân thành xin lỗi vì sự gián đoạn này, và chúng tôi đang tìm cách giảm thiểu những tình huống như vậy trong tương lai.
Một biểu ngữ sẽ được hiển thị trên tất cả các wiki 30 phút trước khi quá trình này diễn ra. Biểu ngữ sẽ tiếp tục được hiển thị cho tới khi kết thúc quá trình này.
Bạn có thể đóng góp bằng cách [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate biên dịch và hiệu đính] dòng biểu ngữ này.
'''Bạn sẽ có thể đọc, nhưng không thể sửa đổi, tất cả wiki trong một khoảng thời gian ngắn.'''
* Bạn sẽ không thể sửa đổi trong vòng tối đa một giờ vào {{#time:l j xg Y|2026-09-23|vi}}.
* Nếu bạn cố gắng sửa đổi hay lưu trang trong khoảng thời gian này, bạn sẽ nhìn thấy một thông báo lỗi. Chúng tôi hy vọng sẽ không có sửa đổi nào bị mất trong khoảng thời gian đó, nhưng chúng tôi không thể đảm bảo được điều đó. Nếu bạn nhìn thấy thông báo lỗi, vui lòng chờ đợi cho đến khi mọi thứ trở lại bình thường. Sau đó bạn sẽ có thể lưu lại sửa đổi của mình. Tuy nhiên, chúng tôi khuyên bạn trước hết nên tạo một bản sao những thay đổi của bạn, nhằm mục đích đề phòng.
''Những ảnh hưởng khác'':
* Tác vụ xử lý nền sẽ bị chậm hơn và một số có thể bị ngừng hẳn. Các liên kết đỏ có thể sẽ không được cập nhật nhanh chóng như thường lệ. Nếu bạn tạo một bài viết đã được liên kết ở một nơi khác, liên kết đó vẫn sẽ có màu đỏ lâu hơn bình thường. Một số đoạn mã tốn nhiều thời gian chạy sẽ phải dừng lại.
* Chúng tôi hy vọng việc triển khai mã nguồn vẫn sẽ diễn ra như bất kỳ tuần nào khác. Tuy vậy, một vài trường hợp đóng băng mã nguồn có thể xảy ra nếu quá trình yêu cầu chúng sau đó.
* [[mw:Special:MyLanguage/GitLab|GitLab]] sẽ không khả dụng trong khoảng 90 phút.
Dự án này có thể bị hoãn lại nếu cần thiết. Bạn có thể [[wikitech:Switch_Datacenter|đọc lịch trình tại wikitech.wikimedia.org]]. Bất kỳ thay đổi nào đều sẽ được thông báo trong lịch trình này.
'''Xin hãy chia sẻ thông tin này với cộng đồng của bạn.'''</div><section end="server-switch"/>
[[m:user:Trizek (WMF)|Trizek (WMF)]] 12:58, ngày 15 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=30513874 -->
== Your feedback wanted: Remove ''(Language link added:) and similar'' edits from Special:RecentChanges ==
''(Apologies for posting in English. You can help by translating it)''
Hello, I’m Danny from [[:en:w:Wikimedia_Deutschland|Wikimedia Deutschland’s]] [[m:Wikidata_For_Wikimedia_Projects|Wikidata For Wikimedia Projects]] team.<br/>
We have been investigating and examining how Wikidata’s use in the [[Special:RecentChanges]] and [[Special:Watchlist]] pages can be made to be more useful, or less ‘noisy’ (fewer edits that have little value to the reader).
We are currently exploring to make a change in the volume and the type of Wikidata edits that appear in these pages, and '''we need your feedback''' to help us ensure this is a positive change for the Wikis and won’t disrupt your workflows.<br/>
Language links are also known as sitelinks or interlanguage links and describe when a Wikidata item is connected to a Wiki, adding it to the language dropdown tool for other connected Wikis.
[[File:Types of Lang Link changes.png|x350px|frame|A variety of "Language Link" edits as seen in the Recent Changes feed]]
The request for feedback is whether you support the removal of these language link edits from the Recent Changes and Watchlist feed, or would you oppose such a change and if so, why?
Please share you thoughts on the dedicated '''[[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|metawiki Talk page]]'''.
Further information about this change: [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|m:Wikidata_For_Wikimedia_Projects/Hide_Language_Link_edits]]
Thank you for any participation or feedback you give, -- [[m:User:Danny_Benjafield_(WMDE)|User:Danny Benjafield (WMDE)]] 12:48, ngày 25 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Danny Benjafield (WMDE)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31081007 -->
== Bản tin Kỹ thuật: Tuần 39-2026 ==
<section begin="technews-2026-W39"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/39|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* [[m:Special:MyLanguage/Tech/Server switch|Tất cả các wiki sẽ chuyển sang chế độ chỉ đọc]] trong vòng vài phút vào thứ 4, ngày 23 tháng 9 năm 2026 lúc [https://zonestamp.toolforge.org/1790172000 14:00 UTC]. Điều này là nhằm phục vụ cho việc thử nghiệm chuyển đổi máy chủ cơ sở dữ liệu dự phòng, [[wikitech:Special:MyLanguage/Deployments/Yearly calendar|diễn ra hai lần trong một năm]]. Trong quá trình chuyển đổi này, toàn bộ lưu lượng trên các trang web của Wikimedia được chuyển từ trung tâm dữ liệu chính sang trung tâm dữ liệu dự phòng nhằm kiểm tra tính khả dụng và ngăn ngừa việc gián đoạn dịch vụ ngay cả trong những trường hợp khẩn cấp. [https://phabricator.wikimedia.org/T433363]
'''Cập nhật cho biên tập viên'''
* Nhóm Tăng trưởng đã thử nghiệm một thông báo sau khi sửa đổi mới được thiết kế nhằm [[mw:Special:MyLanguage/Contributors/Account Creation Experiments#4. Encourage Temporary Accounts to Register|khuyến khích những người đang có Tài khoản Tạm thời đăng ký tài khoản vĩnh viễn]]. Thông báo mới này thay thế cho nhiều hộp thoại kèm thông báo chào mừng xuất hiện cùng lúc bằng một thông báo duy nhất nhằm nêu bật những lợi ích của việc tạo một tài khoản. Thử nghiệm này đã giúp tăng tỷ lệ tạo tài khoản vĩnh viễn từ 1.94% lên 3.66%, tương đương với mức tăng khoảng 87%. Thay đổi này giờ đây sẽ được triển khai đến tất cả các dự án wiki. [https://phabricator.wikimedia.org/T433551]
* Đối với các biên tập viên Wikipedia sử dụng [[Special:Preferences#mw-prefsection-betafeatures|Tính năng Beta "Chế độ gợi ý"]], hiện có một [[Special:Preferences#mw-input-wpvisualeditor-editcheck-experimental|tùy chọn mới trong phần tùy chọn của người dùng]] nhằm hiển thị các gợi ý và kiểm tra sửa đổi mang tính "thử nghiệm". Những loại này được liệt kê tại [[Special:EditChecks#experimental-checks|Đặc biệt:EditChecks]], và nhằm mục đích để lập trình viên thử nghiệm sớm cũng như để thu thập phản hồi từ những người dùng có kinh nghiệm. Các bảo quản viên có thể thay đổi [[mw:Special:MyLanguage/Edit check/Configuration|chi tiết cấu hình]] cho từng gợi ý như thường lệ. Bảo quản viên cũng có thể [[mw:Special:MyLanguage/Help:Suggestion mode#Experimental Suggestions|sử dụng tính năng này]] để giúp thử nghiệm những ý tưởng của cộng đồng về những quy tắc kiểm tra và gợi ý do cộng đồng tạo. Những loại tính năng thử nghiệm này sẽ có giao diện trực quan khác biệt hơn vào cuối tuần này. [[mw:Talk:VisualEditor/Suggestion Mode|Mọi phản hồi đều được hoan nghênh]].
* [[m:CEE Technical Village Pump|Phòng Thảo luận Kỹ thuật CEE]] (CEE Technical Village Pump) đã được mở để đóng vai trò như một không gian thảo luận và hợp tác kỹ thuật của các cộng đồng Wikimedia tại khu vực Trung và Đông Âu.
* Một công cụ mới, [[mw:Special:MyLanguage/Language Onboarding and Development/Starter kit|Bộ Công cụ Khởi đầu]] (Starter Kit), nay đã có sẵn dành cho các cộng đồng Wikipedia ngôn ngữ mới và quy mô nhỏ. Công cụ này tập hợp những nhiệm vụ có hướng dẫn, công cụ và tài nguyên nhằm giúp cộng đồng có thể bắt đầu, theo dõi tiến độ, cũng như hợp tác cùng với cộng đồng Wikimedia rộng lớn hơn. Bộ Công cụ Khởi đầu được vận hành trên nền tảng Wikimedia Toolforge và được thiết kế dành cho các dự án Wikipedia có ít hơn 50.000 bài viết. Tìm hiểu thêm cách Bộ Công cụ Khởi đầu hoạt động và cách cộng đồng đang sử dụng công cụ này trong [[diffblog:2026/09/18/introducing-starter-kit-for-new-and-small-language-wikipedias/|bài viết này trên blog Diff]].
* Nhóm Phát triển Người đọc sẽ mở một đợt tái thử nghiệm của [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|thử nghiệm băng chuyền hình ảnh]]. Đợt tái thử nghiệm này sẽ sử dụng ba phiên bản thiết kế mới, được cập nhật dựa trên phản hồi của cộng đồng. Nhóm sẽ đánh giá kết quả và cùng cộng đồng quyết định xem có tiếp tục triển khai tính năng này hay không. Thử nghiệm này sẽ bắt đầu vào tuần ngày 28 tháng 9 và sẽ được thực hiện trên Wikipedia tiếng Ả Rập, tiếng Bengal, tiếng Trung, tiếng Séc, tiếng Anh, tiếng Ba Tư, tiếng Pháp, tiếng Đức, tiếng Indonesia, tiếng Nhật, tiếng Ba Lan, tiếng Bồ Đào Nha, tiếng Tây Ban Nha, tiếng Thụy Điển và tiếng Việt.
* Sau khi triển khai thành công trên Wikipedia tiếng Ả Rập, tiếng Bengal, tiếng Trung, tiếng Séc, tiếng Anh, tiếng Pháp, tiếng Indonesia và tiếng Việt, [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|tính năng Danh sách Đọc]] do nhóm Trải nghiệm Người đọc phát triển sẽ có mặt cho tất cả người dùng đã đăng nhập trên tất cả các dự án Wikipedia kể từ ngày 28 tháng 9.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho đoạn mã trạng thái cố vấn liên tục cập nhật trạng thái của cố vấn ngay cả khi không có gì thay đổi, tạo ra những mục không cần thiết trên Thay đổi Gần đây, nay đã được giải quyết. [https://phabricator.wikimedia.org/T436659]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* API truy vấn danh sách <bdi lang="zxx" dir="ltr"><code><nowiki>abusefilters</nowiki></code></bdi>, vốn được sử dụng để lấy thông tin chi tiết về các bộ lọc sai phạm đang hoạt động hoặc đã tắt được thiết lập trên wiki, đã được cập nhật để hỗ trợ tham số cấu hình <bdi lang="zxx" dir="ltr"><code><nowiki>formatversion=2</nowiki></code></bdi>, điều này dẫn đến những thay đổi gây ra lỗi (breaking changes) đến phản hồi của API. Tất cả người dùng đang bảo trì các đoạn mã người dùng hoặc đoạn mã khác cần kiểm tra xem họ có đang sử dụng API truy vấn danh sách <bdi lang="zxx" dir="ltr"><code><nowiki>abusefilters</nowiki></code></bdi> hay không, đồng thời điều chỉnh để giải quyết những thay đổi gây ra lỗi này. [https://phabricator.wikimedia.org/T435828]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.21|MediaWiki]]
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/39|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W39"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 11:56, ngày 27 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31085309 -->
== Bản tin Kỹ thuật: Tuần 40-2026 ==
<section begin="technews-2026-W40"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/40|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Người dùng sử dụng giao diện mặc định trên trang web dành cho máy tính và thiết bị di động (lần lượt là Vector 2022 và Minerva) nay sẽ được thông báo nếu gợi ý tìm kiếm được hiển thị khi họ nhập vào hộp Tìm kiếm đến từ các trang đổi hướng. Trước đây, người dùng có thể bị bối rối khi gợi ý kết quả tìm kiếm hàng đầu không khớp chính xác với những gì họ nhập vào. Thông báo trang đổi hướng mới này giúp làm rõ rằng những gợi ý này không phải ngẫu nhiên mà có liên quan đến nội dung tìm kiếm. Các trang được gợi ý có thể là các trang đổi hướng đến những bài viết đích phù hợp nhất với nội dung được tìm kiếm. [https://phabricator.wikimedia.org/T303013]
* Người dùng Wikipedia chưa đăng nhập trên giao diện web di dộng sẽ bắt đầu nhìn thấy nút đánh dấu (bookmark) để lưu các bài viết vào [[mw:Special:MyLanguage/Readers/Reader Experience/Reading lists|danh sách đọc]] của họ thay vì nút Sao theo dõi (Watchstar) hiện tại. Khi được nhấn vào, nút đánh dấu sẽ yêu cầu người dùng đăng nhập hoặc tạo tài khoản để lưu bài viết và đọc lại sau. Một thử nghiệm trước đó cho thấy biểu tượng đánh dấu có khả năng khuyến khích người dùng chưa đăng nhập tạo tài khoản cao gấp bốn lần so với nút Sao theo dõi. Thay đổi này là một phần trong nỗ lực nhằm khuyến khích nhiều độc giả trở thành chủ tài khoản hơn và sử dụng các tính năng giúp họ lưu lại và quay lại để đọc nội dung. [https://phabricator.wikimedia.org/T438769]
* Một thử nghiệm sẽ bắt đầu vào ngày 29 tháng 9 trên các phiên bản Wikipedia tiếng Tây Ban Nha, tiếng Ả Rập, tiếng Anh và tiếng Pháp nhằm đơn giản hóa trải nghiệm mà người dùng gặp ngay sau khi tạo tài khoản. Thử nghiệm này sẽ khám phá xem việc loại bỏ trở ngại từ Khảo sát Chào mừng người mới hiện tại có giúp người dùng mới dễ dàng hiểu được rằng cần phải làm những gì tiếp theo hơn hay không. Cuộc thử nghiệm này sẽ kéo dài đến hết tháng 10. [https://phabricator.wikimedia.org/T430058]
* [[m:Special:MyLanguage/Product and Technology Advisory Council|Hội đồng Cố vấn về Sản phẩm và Công nghệ]] đã kêu gọi cộng đồng đề xuất các chủ đề mà hội đồng nên xem xét và thảo luận với Quỹ Wikimedia. Các biên tập viên và tình nguyện viên kỹ thuật được mời đóng góp chủ đề tại [[m:Talk:Product and Technology Advisory Council|trang thảo luận của hội đồng]].
* Cuối tuần này, các cộng đồng sẽ có thể cấu hình tính năng [[mw:Special:MyLanguage/Help:Edit check|Kiểm tra và Gợi ý Sửa đổi]] để chúng được [[mw:Special:MyLanguage/Edit check/Configuration#extraNamespaces|hiển thị trong các không gian tên bổ sung]], chẳng hạn như không gian tên <bdi lang="zxx" dir="ltr"><code><nowiki>Draft:</nowiki></code></bdi>. [[mw:Talk:VisualEditor/Suggestion Mode|Mọi ý kiến đóng góp đều được hoan nghênh]].
* Một lỗi trong [[m:Special:GlobalWatchlist|Danh sách Theo dõi Toàn cục]] đang khiến cho trang không thể tải được đối với người dùng có những thay đổi chưa được xem trên Wikimedia Commons. Các lập trình viên đang tiến hành khắc phục lỗi này. Trong thời gian đó, những người dùng bị ảnh hưởng có thể làm theo các giải pháp thay thế được nêu trong mục trợ giúp [[mw:Special:MyLanguage/Extension:GlobalWatchlist#GlobalWatchlist temporarily broken for users with Wikimedia Commons|có liên quan]].
* Các từ ma thuật mới <bdi lang="zxx" dir="ltr"><code><nowiki>{{CATEGORYSORT:TIMESTAMP}}</nowiki></code></bdi> và <bdi lang="zxx" dir="ltr"><code><nowiki>{{CATEGORYSORT:RTIMESTAMP}}</nowiki></code></bdi> hiện đã có sẵn để sử dụng. Chúng có khả năng thay đổi cách sắp xếp mặc định của các thể loại dựa trên dấu thời gian xếp thể loại. [https://phabricator.wikimedia.org/T433768]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:20}} {{PLURAL:20|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, sự cố không thể truy cập được [https://wikistats.wmcloud.org/ Wikistats] cho các trang Wikipedia nay đã được giải quyết. [https://phabricator.wikimedia.org/T435959]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Việc chuyển đổi trung tâm dữ liệu, vốn dự kiến được diễn ra vào ngày 23 tháng 9, đã bị hoãn lại. [[diffblog:2025/03/12/hear-that-the-wikis-go-silent-twice-a-year/|Cuộc diễn tập Equinox]] đã bộc lộ các vấn đề về năng lực hệ thống, khiến việc chuyển đổi toàn bộ dịch vụ sang trung tâm dữ liệu khác không thể thực hiện được. Quy trình này đã được tạm dừng để ưu tiên điều tra vấn đề nêu trên, nhằm đảm bảo rằng chúng tôi vẫn có thể phục vụ người dùng một cách ổn định và tin cậy. Một cuộc diễn tập mới sẽ được lên kế hoạch sau. Trong thời gian này, mọi lưu lượng truy cập và hoạt động sửa đổi vẫn sẽ diễn ra như bình thường.
* Vào ngày 23 tháng 9, một sự cố mất điện đã ảnh hưởng đến tất cả các dự án wiki trong một khoảng thời gian ngắn, gây ra vấn đề gián đoạn cho cả chế độ đọc và sửa đổi. Sự cố này cũng ảnh hưởng đến Gerrit. Điều này không liên quan gì đến việc hoãn chuyển đổi trung tâm dữ liệu. [https://www.wikimediastatus.net/incidents/9fm19t8qykk8]
* [[mw:Special:MyLanguage/Help:Extension:Produnto|Produnto]] đã được triển khai trên mediawiki.org và [[phab:T421436|một số wiki sử dụng ngôn ngữ Ấn Độ]]. Chúng tôi mong nhận được phản hồi của bạn về sản phẩm thử nghiệm này. Produnto cho phép người dùng sử dụng các mô đun Lua được lưu trữ trên [[gitlab:repos/lua|GitLab của Wikimedia]]. Nó giúp đơn giản hóa việc chia sẻ mã nguồn Lua giữa các wiki. Thay vì phải sao chép từng mô đun Lua riêng lẻ từ wiki này sang wiki khác, người dùng có thể dễ dàng chia sẻ các gói mã nguồn trên tất cả các wiki.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.22|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* [[m:Event:Cross-wiki Code Collaboration Workshop|Hội thảo cộng tác mã nguồn giữa các wiki]] sẽ được tổ chức trực tuyến vào ngày 2 tháng 10 lúc 12:30 UTC, quy tụ những cộng tác viên kỹ thuật Nam Á nhằm tìm hiểu về Produnto và bắt đầu thử nghiệm nó trên các phiên bản Wikipedia tiếng Hindi, tiếng Punjabi, tiếng Odia, tiếng Telugu và tiếng Malayalam. Produnto là một trình quản lý gói để triển khai các mô đun Lua được lưu trữ trên GitLab đến các wiki của Wikimedia và gần đây đã được triển khai trên một số wiki thí điểm.
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/40|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W40"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 10:49, ngày 28 tháng 9 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31092225 -->
== Wikidata Sitelink changes in Recent Changes and Watchlist ==
''(Apologies for cross-posting in English, translating it will help spread the message)''
Editors on group 1 wikis, including Wikiquote, Wikibooks, Wikiversity, Wikivoyage, and Wikisource, will no longer see notifications on [[Special:RecentChanges|Recent Changes]] and [[Special:Watchlist|Watchlist]] when a link to ''another'' language version of a page is added, removed, or changed in its Wikidata item. This change will begin on '''October 5 at 07:00 UTC''' as a two-week trial to reduce high-volume, low-value notifications and make higher-value changes easier to identify. Editors who rely on these notifications should be aware of the change and can share feedback or concerns on the [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|project]] or [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|talk page]].<br/>Please reach out if you have any questions, thank you! -- [[User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] ([[User_talk:Danny_Benjafield_(WMDE)|talk]]) sent via [[Thành viên:MediaWiki message delivery|MediaWiki message delivery]] ([[Thảo luận Thành viên:MediaWiki message delivery|thảo luận]]) 12:43, ngày 1 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Danny Benjafield (WMDE)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31106967 -->
== Bản tin Kỹ thuật: Tuần 41-2026 ==
<section begin="technews-2026-W41"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/41|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Quy trình cho [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027#Updated Community Wishlist Process 2027/2028|Danh sách mong muốn của cộng đồng]] năm nay [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027#Updated Community Wishlist Process 2027/2028|đã được công bố]], có tính đến phản hồi từ cộng đồng. Quy trình gửi mong muốn sẽ [[m:Special:MyLanguage/Community Wishlist/FAQ#What is the deadline for submitting wishes?|kết thúc vào ngày 8 tháng 11]]. Năm nay, [[m:Special:MyLanguage/Community Wishlist/Community Wishlist 2027/Working group|một nhóm công tác (mở cho tình nguyện viên tham gia)]] gồm các thành viên cộng đồng am hiểu về khía cạnh kỹ thuật của các wiki cùng với nhân viên của Wikimedia Foundation sẽ phụ trách [[m:Special:MyLanguage/Community Wishlist/FAQ#What is triage?|quá trình phân loại]]. Dự kiến quá trình phân loại sẽ hoàn tất vào cuối tháng 11. Việc bỏ phiếu cho các mong muốn sẽ bắt đầu vào tháng 1.
'''Cập nhật cho biên tập viên'''
* Các biên tập viên sử dụng [[mw:Special:MyLanguage/VisualEditor|trình soạn thảo trực quan]] nay sẽ nhìn thấy cảnh báo khi họ dán đoạn văn bản có khả năng đã được sao chép từ nội dung ban đầu được tạo bởi một trong năm chatbot AI tạo sinh bên ngoài vào Wikipedia. Tính năng này được gọi là [[mw:Special:MyLanguage/Edit check/LLM Paste Check|Kiểm tra Dán nội dung từ LLM]]. Đây là một dạng [[mw:Special:MyLanguage/Edit check|Kiểm tra Sửa đổi]] mà cộng đồng có thể tùy chỉnh được. Hệ thống kiểm tra này tìm kiếm các mã đánh dấu (marker) trong đoạn mã HTML được sao chép và không sử dụng phương pháp phát hiện hình mờ (watermark) trong nội dung. Các sửa đổi cũng sẽ [[mw:Special:MyLanguage/Edit check/LLM Paste Check#Edit tags|được gắn thẻ]] để các tuần tra viên có thể xem xét kỹ lưỡng hơn. Tính năng này giúp người mới đóng góp nội dung tuân thủ các chính sách của Wikipedia, đồng thời giúp các biên tập viên có kinh nghiệm dễ dàng nhận diện những sửa đổi có vấn đề. Các cộng đồng có quy định riêng về việc sử dụng LLM có thể [[mw:Special:MyLanguage/Edit check/LLM Paste Check#Configuration|điều chỉnh câu từ và quy định được liên kết]]. Nhóm phát triển [[listarchive:list/translators-l@lists.wikimedia.org/message/EVHKWJ4IERZELMPIWNH3XUVUSQV5KOO4/|chân thành xin lỗi]] vì đã triển khai tính năng này mà không dành thời gian chờ cho việc dịch thuật.
* Các biên tập viên nay có thể dễ dàng [[mw:Special:MyLanguage/Wikimedia Apps/Team/Future of Editing on the Mobile Apps|truy cập trình soạn thảo trực quan bản web trực tiếp từ ứng dụng dành cho iOS và Android]]. Khi mở trình soạn thảo, người dùng sẽ được lựa chọn giữa chế độ soạn thảo trực quan và chế độ soạn thảo mã nguồn. Nếu họ chọn chế độ soạn thảo trực quan, họ sẽ được đưa tới cửa sổ giao diện web di động trong trình duyệt trên điện thoại của họ. Sau khi hoàn thành sửa đổi của mình, một biểu ngữ sẽ xuất hiện để cung cấp cho họ lựa chọn trở về ứng dụng. Điều này cho phép độc giả đóng góp nội dung một cách nhanh chóng trong khi đang đọc một cách thoải mái.
* Người dùng ứng dụng Wikipedia dành cho Android và iOS nay sẽ nhìn thấy thông báo một lần mời tạo tài khoản sau khi họ đã sử dụng ứng dụng được hai tuần liên tiếp. Thông báo này giải thích những lợi ích của việc sở hữu một tài khoản. Điều này nhằm mục đích giúp nhiều đọc giả thông thường trở thành những người dùng đã đăng nhập quay lại ứng dụng thường xuyên hơn. [https://phabricator.wikimedia.org/T434847]
* Các biên tập viên trên [[wmnoc:conf/dblists/group1.dblist|các wiki thuộc group1]], bao gồm Wikiquote, Wikibooks, Wikiversity, Wikivoyage, và Wikisource, sẽ không còn nhìn thấy thông báo trên [[mw:Special:MyLanguage/Help:Recent changes|Thay đổi Gần đây]] và [[mw:Special:MyLanguage/Help: Watching pages|Danh sách Theo dõi]] khi một liên kết đến phiên bản ngôn ngữ khác của một trang được thêm, xóa hoặc thay đổi trong khoản mục Wikidata của nó. Thay đổi này sẽ bắt đầu vào ngày 5 tháng 10 lúc 07:00 UTC dưới dạng thử nghiệm kéo dài hai tuần nhằm giảm bớt các thông báo xuất hiện với số lượng lớn nhưng ít giá trị và giúp những thay đổi quan trọng có thể được nhận diện một cách dễ dàng hơn. Các biên tập viên thường dựa vào những thông báo này có thể đọc thêm trên [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|trang dự án]] và chia sẻ ý kiến hoặc thắc mắc trên [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|trang thảo luận]]. [https://phabricator.wikimedia.org/T439415]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:36}} {{PLURAL:36|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho các cố vấn tự rút khỏi chương trình cố vấn vẫn có thể có những người được cố vấn gán vào họ và tiếp nhận các câu hỏi, nay đã được giải quyết. Những người được cố vấn sẽ được gán lại khi một cố vấn rời khỏi chương trình. [https://phabricator.wikimedia.org/T418194]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Wikimedia Brasil đã xuất bản [[m:Special:MyLanguage/Wikimedia Brasil/Arcabouço de Boas Práticas de Desenvolvimento|Khung Thực tiễn Tốt nhất về Phát triển]] (ABPD). Đây là tài liệu hướng dẫn dành cho nhân viên, nhà thầu và tình nguyện viên tham gia xây dựng các công cụ và dự án kỹ thuật. Tài liệu này bao gồm các nội dung về vòng đời dự án, bảo mật, khả năng tiếp cận, bảo vệ dữ liệu cá nhân và sử dụng AI có trách nhiệm, đồng thời giải thích cách những hướng dẫn chung của phong trào được điều chỉnh sao cho phù hợp với bối cảnh cục bộ. Họ khuyến khích các tổ chức thành viên khác sử dụng lại và tùy chỉnh tài liệu này. Đọc thêm tại [[wmfblog:2026/09/26/wikimedia-brasils-development-best-practices-framework-technical-sustainability-as-an-organizational-responsibility|bài đăng trên Diff]].
* Một URL cơ sở chuẩn (canonical base) mới dành cho các API của Wikimedia sẽ sớm được giới thiệu. Đường dẫn chuẩn mới này theo mẫu dạng <bdi lang="zxx" dir="ltr"><code><nowiki>{projectName}/api/</nowiki></code></bdi> và sẽ đóng vai trò là đường dẫn thay thế cho các API REST hiện tại (ví dụ: <bdi lang="zxx" dir="ltr"><code><nowiki>{projectName}/w/rest.php/</nowiki></code></bdi>). Cả hai phiên bản đều có thể gọi được đối với tất cả các API hiện có, nhưng cấu trúc mới sẽ là lựa chọn ưu tiên cho các mô đun API được tạo mới. Thay đổi này sẽ không gây gián đoạn cho hầu hết người dùng. Những đường dẫn hiện tại vẫn sẽ có sẵn cho mọi yêu cầu đến điểm cuối (endpoint) hiện có. Tuy nhiên, một số điểm cuối có thể trả về các URL tuân theo mẫu mới trong phần nội dung phản hồi (response body). Các thay đổi sẽ có sẵn trên wiki thử nghiệm trước, và việc triển khai dự kiến sẽ được thực hiện trên toàn bộ các dự án wiki vào cuối tháng 10. [https://phabricator.wikimedia.org/T433535]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.23|MediaWiki]].
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/41|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W41"/>
18:52, ngày 5 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31098825 -->
== Bản tin Kỹ thuật: Tuần 42-2026 ==
<section begin="technews-2026-W42"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/42|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Kể từ ngày 13 tháng 10, các wiki có thể thay đổi quy tắc (pattern) mặc định cho [[:en:Wikipedia:VisualEditor/Named references|tên nguồn tham khảo được tạo tự động trong Trình Soạn thảo Trực quan]] (hiện tại là <syntaxhighlight lang="wikitext" inline><ref name=":1" /></syntaxhighlight>). Họ sẽ có thể sử dụng tên nguồn tham khảo dễ hiểu và dựa trên nội dung mà sẽ giúp ích nhiều hơn cho các cộng tác viên sử dụng trình soạn thảo mã nguồn (v.d. <syntaxhighlight lang="wikitext" inline><ref name="Miller2026-1" /></syntaxhighlight>). Các quy tắc đặt tên nguồn tham khảo cho Trình Soạn thảo trực quan có thể được thiết lập thông qua các thông điệp hệ thống MediaWiki, JSON, bản mẫu và mô đun ([[:mw:Special:MyLanguage/Help:Cite/VisualEditor reference names|thông tin thêm]]). Bảo quản viên có thể kích hoạt những thay đổi này thông qua [[Special:CommunityConfiguration/Cite-VisualEditor-Autonames|cấu hình cộng đồng]]. Đây là một [[:m:Special:MyLanguage/Community_Wishlist/W17|mong muốn của cộng đồng]] được triển khai bởi [[:m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]]. [https://phabricator.wikimedia.org/T436255]
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|Chú thích phụ]] là một tính năng MediaWiki mới cho phép các biên tập viên tái sử dụng nguồn tham khảo với thông tin khác nhau. Công cụ sẽ được triển khai tới Wikipedia tiếng Anh vào ngày 14 tháng 10 và đến các dự án wiki còn lại của Quỹ Wikimedia vào cuối tháng 10 (khoảng ngày 21 tháng 10). Trang [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#deployment|FAQ]] liệt kê các hành động có thể thực hiện trên wiki của bạn để hỗ trợ việc triển khai này. Đây là một [[:m:WMDE Technical Wishes/Sub-referencing/History|mong muốn lâu nay của cộng đồng]] được triển khai bởi [[:m:Special:MyLanguage/WMDE Technical Wishes|WMDE Technical Wishes]]. [https://phabricator.wikimedia.org/T440243][https://phabricator.wikimedia.org/T440304]
'''Cập nhật cho biên tập viên'''
* [[mw:Special:MyLanguage/Moderator Tools|Công cụ Kiểm tra]] sẽ loại bỏ chế độ xem dạng danh sách của Danh sách Theo dõi và chuyển mặc định tất cả người dùng sang chế độ xem dạng nhật ký thay đổi. Trước đây, có hai cách mà Danh sách Theo dõi được hiển thị cho người dùng phiên bản web trên di động: chế độ xem dạng danh sách, nơi mà các biên tập viên có thể xem các bài viết đã theo dõi dưới dạng danh sách, và chế độ xem dạng nhật ký thay đổi, nơi mà các biên tập viên có thể xem các thay đổi được thực hiện với các bài viết đã theo dõi dưới dạng nhật ký, được kiểm soát bởi tùy chọn Điều khiển Di động Nâng cao của người dùng. Điều này đã gây ra vấn đề cho việc bảo trì mã nguồn: hai kiểu hiển thị nghĩa là cần phải quản lý hai bộ mã nguồn khác nhau. Bằng việc chuyển mặc định sang chế độ xem nhật ký theo dõi, chúng tôi sẽ đơn giản hóa được mã nguồn và giảm thiểu nguy cơ bỏ sót lỗi.
* Ứng dụng Wikipedia dành cho Android đang thử nghiệm một cách để nghe phần giới thiệu của bài viết trong mục tin “Dành cho bạn”. Một mô hình chuyển đổi văn bản thành giọng nói (text-to-speech) sẽ đọc nội dung hiện có của bài viết mà không cần viết lại hay bổ sung thêm bất kỳ nội dung nào. Chương trình thử nghiệm 30 ngày này sẽ bắt đầu trong ứng dụng Wikipedia Beta vào tuần thứ ba của tháng 9, sau đó mở rộng sang ứng dụng Wikipedia dành cho Android bản chính thức trong tháng 10 dành cho một nhóm nhỏ người dùng đủ điều kiện. Một bộ phận nhỏ người dùng ứng dụng (những người có mục tin tiếng Anh và có quan tâm đến ít nhất một chủ đề) sẽ có quyền truy cập trải nghiệm tính năng này. Thử nghiệm này là một phần trong nỗ lực rộng lớn hơn nhằm mang lại cho độc giả nhiều lựa chọn tiếp nhận nội dung và qua đó tăng cường mức độ tương tác và khả năng giữ chân người dùng. [[mw:Special:MyLanguage/Readers/Listening to Wikipedia/Phase 1|Tìm hiểu thêm]] và [[mw:Talk:Readers/Listening to Wikipedia|chia sẻ ý kiến phản hồi]].
* Tính năng [[mw:Special:MyLanguage/Help:Extension:CodeMirror|nổi bật cú pháp bằng CodeMirror]] đã được [[phab:T288161|kích hoạt]] theo mặc định cho tất cả người dùng chưa đăng nhập và mới đăng ký trên Wikipedia tiếng Anh vào ngày 14 tháng 9. Do không ghi nhận tác động tiêu cực nào, thay đổi tương tự này đang được đề xuất áp dụng toàn cục cho tất cả các dự án wiki trong vài tuần tới. Nếu bạn có thắc mắc hay ý kiến phản hồi nào, hoặc nếu wiki của bạn muốn từ chối áp dụng thay đổi này, [[mw:Special:MyLanguage/Help talk:Extension:CodeMirror#Enabling CodeMirror by default on all WMF wikis for newbies|vui lòng xem trang trợ giúp]]. [https://phabricator.wikimedia.org/T440077]
* Tính năng [[d:Wikidata:Usability_and_usefulness/Item_editing_experience/Mobile_editing_of_statements|sửa đổi lời phát biểu trên giao diện di dộng của Wikidata]] cho mọi kiểu dữ liệu sẽ chính thức ra mắt vào ngày 13 tháng 10, khi đó nó sẽ được loại bỏ khỏi danh sách [[d:Special:Preferences#mw-prefsection-betafeatures|tính năng thử nghiệm beta]] của Wikidata và có sẵn cho tất cả các biên tập viên. Người dùng có thể [[d:Wikidata_talk:Usability_and_usefulness/Item_editing_experience/Mobile_editing_of_statements|báo cáo lỗi và chia sẻ ý kiến phản hồi]].
* Tuần trước, những thay đổi về liên kết ngôn ngữ đã bị loại bỏ khỏi nguồn cấp dữ liệu của [[Special:RecentChanges|Thay đổi Gần đây]] và [[Special:Watchlist|Danh sách Theo dõi]] trên Wikivoyage, Wikisource, Wikiversity, Wikiquote và Wiktionary. Do không ghi nhận tác động tiêu cực nào, [[m:Wikidata_For_Wikimedia_Projects|Wikidata cho các Dự án Wikimedia]] có kế hoạch triển khai thay đổi này trên toàn cục cho tất cả các phiên bản Wikipedia. Việc triển khai dự kiến diễn ra vào ngày 13 tháng 10 lúc 07:00 UTC, sau thời điểm này các biên tập viên sẽ không còn nhìn thấy những thay đổi khi một liên kết đến phiên bản ngôn ngữ ''khác'' của trang được thêm, xóa hoặc thay đổi trong khoản mục Wikidata tương ứng. Những biên tập viên thường theo dõi các thông báo này có thể tìm hiểu thêm tại [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|trang dự án]] cũng như chia sẻ ý kiến hoặc yêu cầu không áp dụng thay đổi cho wiki của mình tại [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|trang thảo luận]]. [https://phabricator.wikimedia.org/T440698]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:28}} {{PLURAL:28|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một vấn đề khiến cho việc vô tình chạm vào biểu đồ trong khi cuộn trên công cụ Lượt xem trang (Pageviews) trên thiết bị di động có thể vô tình phóng to biểu đồ nay đã được khắc phục. Tính năng thu phóng bằng cách nhấn và kéo nay đã bị vô hiệu hóa trên các thiết bị có màn hình cảm ứng. [https://phabricator.wikimedia.org/T440075]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* Sẽ có ba thay đổi lớn đối với các tập tin dữ liệu xuất (dump): các tập tin dữ liệu xuất nội dung kiểu cũ [https://lists.wikimedia.org/hyperkitty/list/xmldatadumps-l@lists.wikimedia.org/thread/E6D5EU4PMSTSOI2J7A46HJ3YW2W554CS/ đã ngừng hỗ trợ vào tháng 1 năm 2026] sẽ bị loại bỏ, giải pháp thay thế [https://wikitech.wikimedia.org/wiki/MediaWiki_Content_File_Exports Xuất Tập tin Nội dung MediaWiki] (MediaWiki Content File Exports) sẽ được hoãn triển khai để thiết lập một “khoảng đệm an toàn”, và chúng nay cũng có sẵn dưới dạng tập tin nén 7zip. Người dùng sẽ cần phải thay đổi URL dùng để tải xuống các tập tin dữ liệu xuất này. Để biết thêm thông tin, lộ trình thực hiện và hướng dẫn chuyển đổi, vui lòng xem trang [https://wikitech.wikimedia.org/wiki/Legacy_content_dumps_sunset Ngừng hỗ trợ tập tin dữ liệu xuất nội dung kiểu cũ].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.47/wmf.24|MediaWiki]]
'''Chuyên sâu'''
* Quỹ Wikimedia đã phát hiện các hoạt động trái phép từ các tác nhân của OpenAI trên các dự án Wikimedia, bao gồm việc sửa đổi các trang wiki, nỗ lực khai thác một công cụ ghi chú công khai, cũng như lưu lượng truy cập tự động với cường độ cao. [[diffblog:2026/10/05/openai-rogue-agent-activities-found-on-wikimedia-projects/|Đọc bài blog trên Diff]] để biết thêm thông tin chi tiết về hoạt động này cũng như phản hồi của Quỹ.
'''Các cuộc họp và sự kiện'''
* Hãy ghi lại lịch trình cho sự kiện Wikimedia Hackathon tiếp theo! Chúng tôi sẽ gặp gỡ nhau tại thành phố Tirana xinh đẹp của Albania để tham dự [https://www.mediawiki.org/wiki/Wikimedia%20Hackathon%202027 Wikimedia Hackathon 2027] diễn ra từ ngày 9–11 tháng 4 năm 2027. Hồ sơ đăng ký nhận học bổng và tài trợ cho nhân viên hiện đang được [https://pretix.eu/wikimedia/Hackathon-2027/ tiếp nhận qua nền tảng Pretix] và sẽ đóng vào ngày 30 tháng 10 năm 2026. Cổng đăng ký tham dự dành cho công chúng sẽ được mở vào tháng 1 năm 2027.
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/42|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W42"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 07:40, ngày 13 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31142468 -->
== Bản tin Kỹ thuật: Tuần 43-2026 ==
<section begin="technews-2026-W43"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/43|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Cập nhật cho biên tập viên'''
* Để đo lường tác động từ việc bổ sung một số [[mw:Special:MyLanguage/Readers/Reader_Growth/Image_Browsing#November 2025: Ideas and feedback|tính năng do cộng đồng yêu cầu]] đến tỷ lệ giữ chân độc giả chưa đăng nhập, một thử nghiệm về tính năng [[mw:Special:MyLanguage/Readers/Reader_Growth/Image_Browsing|Băng chuyền Hình ảnh]] (Image Carousel) sẽ được triển khai đến độc giả chưa đăng nhập. Với tính năng Băng chuyền Hình ảnh, độc giả có thể xem các hình ảnh do cộng đồng tải lên, được chọn lọc bởi các biên tập viên vì có liên quan đến bài viết cụ thể. Thử nghiệm sẽ bắt đầu vào ngày 20 tháng 11.
* Một thông báo thử nghiệm sẽ được hiển thị tới 0,5% số độc giả chưa đăng nhập sử dụng thiết bị di động khi họ truy cập Wikipedia tiếng Anh từ Google, nhằm mời họ thêm Wikipedia vào danh sách [https://blog.google/products-and-platforms/products/search/preferred-sources/ Nguồn Ưu tiên trên Google]. Thử nghiệm nhằm mục đích đánh giá liệu thông báo này có giúp tăng tỷ lệ giữ chân độc giả và khuyến khích người dùng sử dụng Google Tìm kiếm ghé thăm Wikipedia thường xuyên hơn hay không. Thử nghiệm sẽ diễn ra từ ngày 15–29 tháng 10, sau đó kết quả sẽ được phân tích nhằm xác định tác động của nó đối với tỷ lệ giữ chân và lưu lượng truy cập từ các nguồn giới thiệu.
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:26}} {{PLURAL:26|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, một sự cố khiến cho [[quarry:|Quarry]] trả về lỗi “Truy cập bị từ chối” khi người dùng cố gắng chạy các truy vấn SQL, làm cho các truy vấn không thể chạy được một cách bình thường, nay đã được khắc phục. [https://phabricator.wikimedia.org/T440966]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* [[File:Cog-icon-grey.svg|12px|link=|class=skin-invert|Đề mục nâng cao]] Do một lỗi đã tồn tại từ lâu, các ứng dụng sử dụng quy trình xác thực "client credentials" của [[mw:Special:MyLanguage/OAuth/For_Developers|OAuth 2]] để thay mặt chủ sở hữu thực hiện thao tác hiện đang bị hệ thống coi như là người dùng chưa đăng nhập. Vấn đề này sẽ được khắc phục đối với các ứng dụng mới đăng ký kể từ thứ Hai, ngày 19 tháng 10 trở đi. Một số ứng dụng bị ảnh hưởng sẽ cần phải thực hiện đăng ký lại. [https://phabricator.wikimedia.org/T420297]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.48/wmf.1|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* Một đề xuất tổ chức sự kiện Wikimedia Hackathon ba năm một lần, xen kẽ với các sự kiện hackathon khu vực, [[mw:Wikimedia Hackathon/Community Proposal 2026|đã được chia sẻ]]. Đề xuất này hướng tới việc giúp các cộng đồng kỹ thuật tại nhiều khu vực khác nhau có thể tiếp cận sự kiện này dễ dàng hơn. Hãy chia sẻ ý kiến của bạn tại [[mw:Talk:Wikimedia Hackathon/Community Proposal 2026|trang thảo luận]] của đề xuất này trước ngày 6 tháng 11.
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/43|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W43"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14:38, ngày 19 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31178499 -->
== Chuyển đổi máy chủ - Wiki của bạn sẽ sớm chuyển sang chế độ chỉ đọc trong một khoảng thời gian ngắn ==
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Đọc thông báo này bằng ngôn ngữ khác]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
[[foundation:|Quỹ Wikimedia]] sẽ chuyển đổi lưu lượng qua lại giữa các trung tâm dữ liệu. Điều này sẽ giúp đảm bảo rằng Wikipedia và các wiki khác của Wikimedia vẫn có thể duy trì trực tuyến ngay cả sau tình huống thiên tai.
Mọi lưu lượng sẽ chuyển đổi vào ngày '''{{#time:j xg|2026-10-28|vi}}'''. Việc chuyển đổi này sẽ bắt đầu vào lúc '''[https://zonestamp.toolforge.org/{{#time:U|2026-10-28T15:00|en}} {{#time:H:i e|2026-10-28T15:00}}]'''.
Dù vậy, vì một số hạn chế của phần mềm [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], mọi sửa đổi đều phải bị ngưng lại khi việc chuyển đổi được thực hiện. Chúng tôi chân thành xin lỗi vì sự gián đoạn này, và chúng tôi đang tìm cách giảm thiểu những tình huống như vậy trong tương lai.
Một biểu ngữ sẽ được hiển thị trên tất cả các wiki 30 phút trước khi quá trình này diễn ra. Biểu ngữ sẽ tiếp tục được hiển thị cho tới khi kết thúc quá trình này.
Bạn có thể đóng góp bằng cách [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate biên dịch và hiệu đính] dòng biểu ngữ này.
'''Bạn sẽ có thể đọc, nhưng không thể sửa đổi, tất cả wiki trong một khoảng thời gian ngắn.'''
* Bạn sẽ không thể sửa đổi trong vòng tối đa một giờ vào {{#time:l j xg Y|2026-10-28|vi}}.
* Nếu bạn cố gắng sửa đổi hay lưu trang trong khoảng thời gian này, bạn sẽ nhìn thấy một thông báo lỗi. Chúng tôi hy vọng sẽ không có sửa đổi nào bị mất trong khoảng thời gian đó, nhưng chúng tôi không thể đảm bảo được điều đó. Nếu bạn nhìn thấy thông báo lỗi, vui lòng chờ đợi cho đến khi mọi thứ trở lại bình thường. Sau đó bạn sẽ có thể lưu lại sửa đổi của mình. Tuy nhiên, chúng tôi khuyên bạn trước hết nên tạo một bản sao những thay đổi của bạn, nhằm mục đích đề phòng.
''Những ảnh hưởng khác'':
* Tác vụ xử lý nền sẽ bị chậm hơn và một số có thể bị ngừng hẳn. Các liên kết đỏ có thể sẽ không được cập nhật nhanh chóng như thường lệ. Nếu bạn tạo một bài viết đã được liên kết ở một nơi khác, liên kết đó vẫn sẽ có màu đỏ lâu hơn bình thường. Một số đoạn mã tốn nhiều thời gian chạy sẽ phải dừng lại.
* Chúng tôi hy vọng việc triển khai mã nguồn vẫn sẽ diễn ra như bất kỳ tuần nào khác. Tuy vậy, một vài trường hợp đóng băng mã nguồn có thể xảy ra nếu quá trình yêu cầu chúng sau đó.
* [[mw:Special:MyLanguage/GitLab|GitLab]] sẽ không khả dụng trong khoảng 90 phút.
Dự án này có thể bị hoãn lại nếu cần thiết. Bạn có thể [[wikitech:Switch_Datacenter|đọc lịch trình tại wikitech.wikimedia.org]]. Bất kỳ thay đổi nào đều sẽ được thông báo trong lịch trình này.
'''Xin hãy chia sẻ thông tin này với cộng đồng của bạn.'''</div><section end="server-switch"/>
[[user:Trizek_(WMF)|Trizek_(WMF)]] 14:01, ngày 26 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:Trizek (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=30513874 -->
== Bản tin Kỹ thuật: Tuần 44-2026 ==
<section begin="technews-2026-W44"/><div class="plainlinks">
'''[[m:Special:MyLanguage/Tech/News|Tin tức kỹ thuật]]''' mới nhất từ cộng đồng kỹ thuật Wikimedia. Vui lòng chia sẻ với các thành viên khác về những thay đổi này. Không phải mọi thay đổi đều sẽ ảnh hưởng đến bạn. [[m:Special:MyLanguage/Tech/News/2026/44|Các bản dịch]] của bản tin này cũng có sẵn cho bạn.
'''Nổi bật trong tuần'''
* Một thử nghiệm bắt đầu từ ngày 29 tháng 9 đang kiểm tra tính năng [[mw:Special:MyLanguage/Readers/Reader_Experience/Reading_recommendations|gợi ý bài viết]] dành cho những người dùng mới tạo tài khoản mà cũng tự xác định mình là độc giả. Bằng cách đề xuất các bài viết để đọc, tương tự như những gợi ý trong ứng dụng Wikipedia dành cho độc giả đã đăng nhập, thử nghiệm này hướng tới việc khuyến khích người dùng mới tạo tài khoản đọc nội dung và quay lại trang web thường xuyên hơn, với mục tiêu tăng tỷ lệ điều hướng nội bộ (internal referrals) thêm 1%. Xem thêm đề xuất có liên quan trong [[m:Community Wishlist/W505|Danh sách Mong muốn Cộng đồng]].
* Một số dịch vụ của Wikimedia đã bị ngừng hoạt động vào tuần trước do một [https://www.php.net/archive/2026.php#2026-10-20-1 lỗ hổng bảo mật trong PHP]. Điều này là do chúng cần được cập nhật trước khi có thể an toàn để đưa trở lại trực tuyến. Đây không phải là vấn đề chỉ của phong trào Wikimedia mà còn ảnh hưởng đến rất nhiều trang web. Bạn có thể theo dõi thông tin cập nhật trên [[wikitech:Incidents/2026-10-21 PHP security update/Community|Wikitech]]. Cloud VPS và Toolforge sẽ mất nhiều thời gian hơn để đưa trở lại trực tuyến. Điều này nhằm đảm bảo rằng các ứng dụng chạy trên Cloud VPS hoặc Toolforge không bị ảnh hưởng. Những nhà phát triển công cụ có thể xem các cập nhật và thông tin chi tiết trên [https://lists.wikimedia.org/postorius/lists/cloud-announce.lists.wikimedia.org/ danh sách gửi thư thông báo trên Cloud]. [https://diff.wikimedia.org/2026/10/21/impact-of-php-vulnerabilities-on-wikimedia-tools-and-services/][https://diff.wikimedia.org/2026/10/21/impact-of-php-vulnerabilities-on-wikimedia-cloud-services/]
* [[m:Special:MyLanguage/Tech/News/2026/43|Tuần trước, chúng tôi đã chia sẻ]] rằng để đo lường tác động của việc bổ sung một số tính năng được cộng đồng yêu cầu đối với tỷ lệ giữ chân độc giả chưa đăng nhập, một thử nghiệm cho tính năng [[mw:Special:MyLanguage/Readers/Reader Growth/Image Browsing|Băng chuyền Hình ảnh]] (Image Carousel) sẽ được triển khai tới nhóm độc giả chưa đăng nhập. Do có một vấn đề phát sinh, chúng tôi sẽ khởi chạy lại thử nghiệm này, dù vậy tính năng này sẽ bắt đầu hoạt động vào ngày 26 tháng 10, thay vì ngày 20 tháng 11 như thông báo ban đầu.
'''Cập nhật cho biên tập viên'''
* Một [[wikitech:KAPOW|hệ thống phát hiện bot]] mới được thiết kế để nhận diện tốt hơn các lưu lượng truy cập tự động vốn ngụy trang thành người dùng thật, sắp được triển khai trên các dự án wiki của Wikimedia. Thay đổi này có thể dẫn đến những biến động đột ngột trong số liệu thống kê khách truy cập kể từ ngày 26 tháng 10, áp dụng cho dữ liệu từ ngày 20 tháng 6 năm 2026 trở về trước.
* Phần mở rộng [[mw:Special:MyLanguage/Extension:Score|Score]] dùng để hiển thị ký hiệu âm nhạc trong các trang wiki, đã tạm thời bị vô hiệu hóa trên tất cả các trang wiki do một vấn đề bảo mật. Các trang bị ảnh hưởng sẽ hiển thị thông báo thay vì các bản nhạc, nhưng mã nguồn gốc vẫn sẽ được giữ nguyên. Các biên tập viên không cần thực hiện bất kỳ thao tác nào, một bản sửa lỗi hiện đang được triển khai. Một thông báo khác sẽ được đưa ra khi phần mở rộng này được kích hoạt trở lại. Đọc thêm tại [[phab:T441579|Phabricator]].
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Xem tất cả {{formatnum:18}} {{PLURAL:18|tác vụ}} được tạo bởi cộng đồng đã được [[m:Special:MyLanguage/Tech/News/Recently resolved community tasks|giải quyết vào tuần trước]]. Ví dụ, vấn đề khiến cho trình làm nổi bật cú pháp của CodeMirror có vẻ như đã vô tình được bật cho các biên tập viên hiện có nay đã được khắc phục. [https://phabricator.wikimedia.org/T441308]
'''Cập nhật cho những người đóng góp vào mảng kỹ thuật'''
* [[m:Special:MyLanguage/Tech/Server switch|Tất cả các wiki sẽ chuyển sang chế độ chỉ đọc trong vòng vài phút]] vào thứ 4, ngày 28 tháng 10 năm 2026 lúc [https://zonestamp.toolforge.org/1793199600 15:00 UTC]. Điều này là nhằm phục vụ cho việc thử nghiệm chuyển đổi máy chủ cơ sở dữ liệu dự phòng, [[wikitech:Deployments/Yearly calendar|diễn ra hai lần trong một năm]]. Trong quá trình chuyển đổi này, toàn bộ lưu lượng trên các trang web của Wikimedia được chuyển từ trung tâm dữ liệu chính sang trung tâm dữ liệu dự phòng nhằm kiểm tra tính khả dụng và ngăn ngừa việc gián đoạn dịch vụ ngay cả trong những trường hợp khẩn cấp. [https://phabricator.wikimedia.org/T439703]
* [[File:Reload icon with two arrows.svg|12px|link=|class=skin-invert|Đề mục định kỳ]] Chi tiết cập nhật mã nguồn sắp tới trong tuần này: [[mw:MediaWiki 1.48/wmf.2|MediaWiki]]
'''Các cuộc họp và sự kiện'''
* Cổng nộp đơn xin học bổng và tài trợ cho [https://www.mediawiki.org/wiki/Wikimedia%20Hackathon%202027 Wikimedia Hackathon 2027] sẽ đóng lại vào thứ Sáu, ngày 30 tháng 10. Hãy gửi đơn đăng ký của bạn [https://pretix.eu/wikimedia/Hackathon-2027/ thông qua Pretix] trước thời hạn này!
'''''[[m:Special:MyLanguage/Tech/News|Tin tức Kỹ thuật]]''' do [[m:Special:MyLanguage/Tech/News/Writers|các biên tập viên Bản tin Kỹ thuật]] chuẩn bị và được đăng bởi [[m:Special:MyLanguage/User:MediaWiki message delivery|bot]] • [[m:Special:MyLanguage/Tech/News#contribute|Đóng góp]] • [[m:Special:MyLanguage/Tech/News/2026/44|Biên dịch]] • [[m:Tech|Nhờ giúp đỡ]] • [[m:Talk:Tech/News|Phản hồi]] • [[m:Global message delivery/Targets/Tech ambassadors|Đăng ký hoặc huỷ đăng ký]].''
</div><section end="technews-2026-W44"/>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 18:56, ngày 26 tháng 10 năm 2026 (UTC)
<!-- Tin nhắn của Thành viên:STei (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Tech_ambassadors&oldid=31199592 -->
8931g58klfyyobwetugctyk6txzibvi
abilitate
0
110196
2573710
2038581
2026-10-26T16:20:32Z
Hiyuune
50834
2573710
wikitext
text/x-wiki
{{also|-abilitate}}
=={{langname|la}}==
==={{section|n}}===
{{head|la|Biến thể hình thái danh từ|head=abilitāte}}
# {{inflection of|la|abilitās||abl|s}}
=={{langname|ro}}==
==={{section|alt}}===
* {{alt|ro|абилитате||chữ Kirin mới}}
==={{section|etym}}===
{{bor+|ro|fr|habilité}}, {{der|ro|la|habilitās}}. Tương đương với {{suffix|ro|abil|itate}}.
==={{section|v}}===
* {{IPA|ro|/abiliˈtate/}}
* {{rhyme|ro|ate|s=5}}
* {{hyph|ro|a|bi|li|tá|te}}
==={{section|n}}===
{{ro-noun|f|abilități}}
# [[khả năng]].
#: {{syn|ro|îndemânare}}
===={{section|decl}}====
{{ro-noun-f-tate|abili}}
===={{section|rel}}====
* {{l|ro|abil}}
==={{section|further}}===
* {{R:DEX}}
=={{langname|it}}==
==={{section|adj}}===
{{head|it|Biến thể hình thái tính từ}}
# {{feminine plural of|it|abilitato}}
mz44r310iqwqwbry9rr2gb4mhhvpfc3
mở mang
0
142873
2573800
1878635
2026-10-27T05:49:52Z
~2026-57254-50
62132
/* */
2573800
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-ang|mở}}.
{{-pron-}}
{{vie-pron}}
{{-paro-}}
:* [[mơ màng]]
{{-verb-}}
{{vi-verb|head=[[mở]] mang|[[𨷑芒]], [[𨷑𫼳]], [[𲉇茫]], [[𲉇恾]], [[𲉇𫼳]]}}
# Làm cho mỗi [[ngày một]] lớn [[rộng]].
#: '''''Mở mang''' công nghiệp.''
#: '''''Mở mang''' trí tuệ.''
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
9a916wv3ix33wlcq96aherqexb7bk8i
liếm láp
0
194015
2573791
2029044
2026-10-27T05:43:25Z
~2026-57254-50
62132
/* */
2573791
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-ap|liếm}}.
{{-pron-}}
{{vie-pron}}
{{-verb-}}
{{vi-verb|head=[[liếm]] láp}}
# [[liếm|Liếm]] nói chung, với ý chê bai.
#: ''Ăn bánh xong còn '''liếm láp'''.''
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
05xztxocnsoi3tdj2dio9ugzrluvd7h
trắng trẻo
0
194047
2573802
2044006
2026-10-27T05:51:04Z
~2026-57254-50
62132
/* */
2573802
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-eo|trắng}}.
{{-pron-}}
{{vie-pron}}
{{-paro-}}
:* [[trăng treo]]
{{-adj-}}
{{vi-adj|head=[[trắng]] trẻo}}
# [[trắng|Trắng]] và [[xinh đẹp]].
#: ''Mặt mũi '''trắng trẻo'''.''
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
0uk23i53hnvymr6r4nvh46hrida4qtx
trong trẻo
0
194717
2573801
2046421
2026-10-27T05:50:29Z
~2026-57254-50
62132
/* */
2573801
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-eo|trong}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
{{vi-adj|head=[[trong]] trẻo}}
# Rất [[trong]], gây cảm giác dễ chịu.
#: {{ux|vi|Tiếng hát '''trong trẻo'''.}}
{{-ref-}}
{{R:FVDP}}
{{R:Tratu|vn|vn}}
[[Thể loại:Từ láy tiếng Việt]]
jopmd64bwtfraqom9wshyjtca69uuzx
nhỏ nhoi
0
197378
2573779
1325748
2026-10-27T05:38:20Z
~2026-57254-50
62132
/* */
2573779
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|oi1|nhỏ}}.
{{-pron-}}
{{vie-pron}}
{{-paro-}}
:* [[nhỡ nhời]]
{{-adj-}}
{{vi-adj|head=[[nhỏ]] nhoi}}
# [[ít ỏi|Ít ỏi]], [[nhỏ mọn]].
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
4u6dpak09gpmr8m1rfu6xjjd6dmaqwa
hối hả
0
198293
2573795
2018223
2026-10-27T05:45:26Z
~2026-57254-50
62132
/* */
2573795
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|a2|hối}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
{{vi-adj|head=[[hối]] hả}}
# [[vội vã|Vội vã]].
#: '''''Hối hả''' đi mua vé tàu.''
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Từ láy tiếng Việt]]
4oihmkgpxxwush8kwwbmq594biiqfj7
rắn rỏi
0
198681
2573781
2108179
2026-10-27T05:39:17Z
~2026-57254-50
62132
/* */
2573781
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|oi2|rắn}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
{{vi-adj|head=[[rắn]] rỏi|[[吝磊]]}}
# [[tỏ ra|Tỏ ra]] có [[khả năng]] [[chịu đựng]] những [[tác động]] [[bất lợi]] từ [[bên ngoài]] mà không [[thay đổi]] [[thái độ]].
#:{{ux|vi|vẻ mặt '''rắn rỏi'''}}
#:{{ux|vi|một con người '''rắn rỏi'''}}
{{-syn-}}
* [[cứng rắn]]
{{-ref-}}
{{R:Tratu|vi|vi}}
[[Thể loại:Từ láy tiếng Việt]]
ru3rve0wvus016rc8qwql6uf1dwp4h1
đứng đắn
0
238097
2573797
2443600
2026-10-27T05:46:49Z
~2026-57254-50
62132
/* */
2573797
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-ăn|đứng}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
{{vi-adj|head=[[đứng]] đắn}}
# Nói đến [[tính cách]] của một người sống [[đẹp]], từ cách [[ăn mặc]], [[giao tiếp]], [[đi đứng]].
#: {{ux|vi|Anh ta còn trẻ nhưng rất '''đứng đắn'''.}}
{{-trans-}}
{{đầu}}
* {{eng}}: [[serious]], [[serious-minded]]
{{giữa}}
* {{spa}}: [[serioso]] {{g-old|m}}, [[seriosa]] {{g-old|f}}
{{cuối}}
{{-ref-}}
{{R:FVDP}}
fvju8shz6cyit4flhy5bl58rz7wwwhf
śnieg
0
238817
2573722
2350353
2026-10-26T16:37:01Z
Hiyuune
50834
/* Tiếng Ba Lan */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2573722
wikitext
text/x-wiki
{{also|snieg|sniég|Śnieg}}
=={{langname|pl}}==
{{wp|pl:}}
[[File:Pilsko stacja wyciagu1.jpg|thumb|śnieg]]
==={{section|alt}}===
* {{alt|pl|śmiég||Lublin|Far Masovian|Mława}}
==={{section|etym}}===
{{etymon|pl|id=tuyết|:inh|zlw-opl:śnieg|:sl|en:snow|tree=+}}
{{inh+|pl|zlw-opl|śnieg}}. {{semantic loan|pl|en|snow|senseid=cocaine}}.
==={{section|pron}}===
{{pl-pr|a=Pl-śnieg.ogg;LL-Q809 (pol)-Olaf-śnieg.wav|hh=Śnieg}}
==={{section|n}}===
{{pl-noun|m-in|dim=śnieżek|adj=śniegowy}}
# {{lb|pl|uncountable}} [[tuyết|Tuyết]].
#: {{hyper|pl|opad}}
# {{lb|pl|countable}} [[tuyết rơi|Tuyết rơi]].
# {{senseid|pl|cocaine}} {{lb|pl|uncountable|slang}} [[cocaine|Cocaine]] ở dạng [[bột]].
#: {{syn|pl|biała dama|biała śmierć|biały proszek|koka|kokaina}}
===={{section|decl}}====
{{pl-ndecl|<m.inan>}}
===={{section|drv}}====
{{col|pl|title=tính từ|śnieżny|śnieżysty}}
{{col|pl|title=danh từ|przebiśnieg|śnieguła|śnieżka|śnieżnik|śnieżyca|śnieżynka}}
{{col|pl|title=động từ|śnieżyć<g:impf>}}
==={{section|further}}===
* {{R:pl:WSJP||4355}}
* {{R:pl:PWN}}
* {{R:pl:PWN Encyclopedia}}
=={{langname|zlw-opl}}==
==={{section|alt}}===
* {{alt|zlw-opl|śnig}}
==={{section|etym}}===
{{etymon|zlw-opl|id=tuyết|:inh|sla-pro:*sně̑gъ|tree=+|text=+}}
==={{section|pron}}===
* {{zlw-opl-IPA}}
==={{section|n}}===
{{zlw-opl-noun|m-in}}
# [[tuyết|Tuyết]].
# [[tuyết rơi|Tuyết rơi]].
===={{section|desc}}====
* {{desc|pl|śnieg|alts=1}}
* {{desc|szl|śniyg}}
==={{section|ref}}===
* {{R:zlw-opl:SPJSP}}
kwrz3ztsoijhhgfwua9ihnnrzsiv7rj
gu
0
240208
2573811
2183630
2026-10-27T06:35:35Z
~2026-57283-14
62133
2573811
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
Từ {{bor|vi|fr|goût}}.
{{-pron-}}
{{vie-pron}}
{{-noun-}}
{{vi-noun}}
# Sự [[ưa thích]], sự [[mến]].
#: ''Bữa cơm hợp '''gu''' cậu ta.''
#: '''''gu''' cà phê''
{{-usage-}}
Chữ ''gu'' chỉ duy nhất hợp thành được với loại [[cà phê]]. [[gu cà phê|Gu cà phê]] để ám chỉ hợp gu với vị cà phê.
{{-ref-}}
{{R:FVDP}}
r4v7v31am1vvvit9ae2jlhzwr4cl3vn
2573822
2573811
2026-10-27T07:30:37Z
Hiyuune
50834
2573822
wikitext
text/x-wiki
{{also|Phụ lục:Biến thể của "gu"}}
{{minitoc}}
=={{langname|mul}}==
==={{section|etym}}===
{{clip|mul|en:'''Gu'''jarati,gu:ગુજરાતી}}.
==={{section|symbol}}===
{{mul-symbol}}
# {{ISO 639|1}}
==={{section|see}}===
* {{langcat}}
=={{langname|vi}}==
==={{section|etym}}===
Từ {{bor|vi|fr|goût}}.
==={{section|pron}}===
{{vi-pron}}
==={{section|n}}===
{{vi-noun}}
# {{lb|vi|colloquial}} Sự [[ưa thích]], sự [[mến]].
#: {{ux|vi|Bữa cơm hợp '''gu''' cậu ta.}}
#: {{ux|vi|'''Gu''' cà phê.}}
===={{section|drv}}====
{{col|vi|hợp gu}}
===={{section|usage}}====
Chữ ''gu'' chỉ duy nhất hợp thành được với loại [[cà phê]]. [[gu cà phê|Gu cà phê]] để ám chỉ hợp gu với vị cà phê.
==={{section|ref}}===
* {{R:FVDP}}
=={{langname|abt}}==
==={{section|n}}===
{{head|abt|Danh từ}}
# [[nước|Nước]].
==={{section|ref}}===
* Patricia R. Wilson, ''Ambulas Grammar'' (1980)
=={{langname|en}}==
==={{section|n}}===
{{en-noun}}
# {{alternative spelling of|en|gue}}
# {{altform|en|gu.}}
==={{section|see}}===
* {{l|en|gu zheng}} {{i|không liên quan đến từ nguyên}}
==={{section|ana}}===
* {{anagrams|en|a=gu|UG|Ug|ug}}
{{cln|en|Từ 2 chữ cái}}
=={{langname|enm}}==
==={{section|pronoun}}===
{{head|enm|Đại từ|var=1}}
# {{lb|enm|early|Norfolk}} {{alt form|enm|yow}}
86qsqaets2axsb8rs2qzcsq25qmgnir
cường dương
0
253828
2573734
2057635
2026-10-26T23:01:26Z
TienMinh-mun6xnChing
57893
/* */
2573734
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron}}
{{-noun-}}
{{pn}}
# {{lb|vi|hiện tượng}} [[dương vật|Dương vật]] ở [[trạng thái]] [[cương cứng]] do có sự [[hưng phấn]] về [[tình dục]].
{{-ref-}}
{{R:Tratu|vi|vi}}
{{catname|Tính từ|tiếng Việt}}
9jo5jfn5rndigraber1t177xrq662t2
2573807
2573734
2026-10-27T06:30:48Z
Hiyuune
50834
2573807
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|v}}===
{{vi-verb}}
# {{lb|vi|hiện tượng}} [[dương vật|Dương vật]] ở [[trạng thái]] [[cương cứng]] do có sự [[hưng phấn]] về [[tình dục]].
==={{section|ref}}===
* {{R:Tratu}}
hqjchnw4arjon4ab6hvycidxcwccda8
2573808
2573807
2026-10-27T06:31:16Z
Hiyuune
50834
2573808
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|adj}}===
{{vi-adj}}
# {{lb|vi|hiện tượng}} [[dương vật|Dương vật]] ở [[trạng thái]] [[cương cứng]] do có sự [[hưng phấn]] về [[tình dục]].
==={{section|ref}}===
* {{R:Tratu}}
cb1u0iflvxra0zhedt0pvdof96xlwia
2573809
2573808
2026-10-27T06:31:26Z
Hiyuune
50834
2573809
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|adj}}===
{{vi-adj}}
# [[dương vật|Dương vật]] ở [[trạng thái]] [[cương cứng]] do có sự [[hưng phấn]] về [[tình dục]].
==={{section|ref}}===
* {{R:Tratu}}
smnxe3sb2yr3k3omujvgmxbgguaxhev
nguyên thần
0
258873
2573762
2015706
2026-10-27T03:59:15Z
TienMinh-mun6xnChing
57893
/* */
2573762
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron}}
{{-noun-}}
{{pn}}
# {{like-entry|thần trí}}.
{{catname|Danh từ|tiếng Việt}}
cgzem4k3he1zhtypf9ar57866o8mah9
abandon ship
0
261610
2573705
2038813
2026-10-26T16:11:12Z
Hiyuune
50834
2573705
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|v}}===
{{en-verb|*}}
# {{lb|en|nautical|literal}} [[rời|Rời]] [[khỏi]] [[tàu]], rời [[bỏ]] tàu.
===={{section|see}}====
{{col|en|like rats from a sinking ship|jump ship|ditch bag}}
==={{section|ref}}===
* {{R:Tratu|dict=en_vn}}
s4wljtsthynqqj59pl40aw5cn9pqxle
hiếm hoi
0
263723
2573776
2048669
2026-10-27T05:36:17Z
~2026-57254-50
62132
2573776
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|oi1|hiếm}}.
{{-pron-}}
{{vie-pron}}
{{-adj-}}
{{vi-adj|head=[[hiếm]] hoi}}
# ([[người]] [[lập]] [[gia đình]] đã [[lâu]]) [[hiếm]] [[con]] hoặc [[mãi]] chưa có con.
#:''vợ chồng '''hiếm hoi''' chỉ có một mụn con''
# [[hiếm có|Hiếm có]].
#:''giọt mưa '''hiếm hoi''' giữa những ngày hạn''
{{-ref-}}
{{R:Tratu|vi|vi}}
nzm1rz40oiunhdxd8ork7br05avrnir
hay ho
0
266079
2573784
2108897
2026-10-27T05:41:11Z
~2026-57254-50
62132
/* */
2573784
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|o1|hay}}.
{{-pron-}}
{{vie-pron}}
{{-adjc-}}
{{vie-adj|head=[[hay]] ho}}
# {{label|vi|thường dùng với hàm ý [[phủ định]], [[mỉa mai]]}} [[hay|Hay]] {{q|nói khái quát}}.
#: {{ux|vi|Chẳng có gì là '''hay ho''' cả!}}
{{-synonym-}}
* {{vie-l|hay hớm}}
{{-ref-}}
{{R:Tratu|vn|vn}}
bnhepkzn2ccpu2sjva3dwsq8pvmmj56
dày dặn
0
269098
2573796
2068591
2026-10-27T05:46:17Z
~2026-57254-50
62132
/* */
2573796
wikitext
text/x-wiki
{{-vie-}}
{{-etym-}}
{{vi-etym-redup|-ăn|dày}}.
{{-pron-}}
{{vie-pron}}
{{-paro-}}
* [[dày dạn]]
* [[đầy đặn]]
{{-adj-}}
{{vi-adj|head=[[dày]] dặn}}
# [[dày|Dày]] và có vẻ [[chắc chắn]] (nói khái quát).
#: {{ux|vi|Chiếc áo bông '''dày dặn'''.}}
#: {{ux|vi|Mái tóc '''dày dặn'''.}}
{{-ref-}}
{{R:Tratu|vn|vn}}
ewl1t2uji6lc35ubiuzqtytf5q8f0oe
Mô đun:labels/data
828
271309
2573816
2464080
2026-10-27T06:58:00Z
Hiyuune
50834
2573816
Scribunto
text/plain
local labels = {}
-- Grammatical labels
labels["abbreviation"] = {
display = "[[viết tắt]]",
pos_categories = "Từ viết tắt",
}
labels["tốc ký rất hiếm gặp"] = {
aliases = {"very rare shorthand"},
display = true,
}
labels["abstract noun"] = {
display = "trừu tượng",
glossary = "danh từ trừu tượng",
pos_categories = "Danh từ trừu tượng",
}
labels["acronym"] = {
display = "[[acronym]]",
pos_categories = "acronyms",
}
labels["thái chủ động"] = {
aliases = {"active", "active voice", "in active", "in the active", "in active voice", "in the active voice"},
glossary = true,
}
labels["ambitransitive"] = {
display = "[[ngoại động từ]], [[nội động từ]]",
pos_categories = {"Ngoại động từ", "Nội động từ"},
}
labels["angry register"] = {
aliases = {"angry", "anger", "said in anger"},
glossary = true,
pos_categories = "angry register terms",
}
labels["animate"] = {
glossary = true,
}
labels["indicative"] = {
aliases = {"in the indicative", "indicative mood"},
glossary = "indicative mood",
}
labels["subjunctive"] = {
aliases = {"in the subjunctive", "subjunctive mood"},
glossary = "subjunctive mood",
}
labels["imperative"] = {
aliases = {"in the imperative", "imperative mood"},
glossary = "imperative mood",
}
labels["jussive"] = {
aliases = {"in the jussive", "jussive mood"},
glossary = "jussive mood",
}
labels["archaic-verb-form"] = {
glossary = "archaic",
display = "archaic",
pos_categories = "archaic verb forms",
}
labels["atelic"] = {
glossary = true,
}
labels["attenuative"] = {
pos_categories = "attenuative verbs",
}
labels["attributive"] = {
aliases = {"thuộc ngữ"},
display = "[[Phụ lục:Từ điển thuật ngữ#Thuộc ngữ|thuộc ngữ]]",
}
labels["attributively"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#Thuộc ngữ|attributively]]",
}
labels["auxiliary"] = {
aliases = {"trợ động từ"},
display = "trợ động từ",
glossary = "trợ động từ",
pos_categories = "Trợ động từ",
}
labels["broadly"] = {
glossary = true,
}
labels["cardinal"] = {
display = "[[số đếm]]",
pos_categories = "Số đếm",
}
labels["catenative"] = {
glossary = "catenative verb",
}
labels["causative"] = {
display = "[[causative]]",
}
labels["causative verb"] = {
display = "causative",
pos_categories = "causative verbs",
}
labels["cognate object"] = {
aliases = {"with cognate object"},
display = "with [[w:Cognate object|cognate object]]",
pos_categories = "verbs used with cognate objects",
}
labels["tập hợp"] = {
aliases = {"collective", "tập thể"},
glossary = true,
pos_categories = "Danh từ tập hợp",
}
labels["collectively"] = {
glossary = "collective",
display = "collectively",
pos_categories = "Danh từ tập hợp",
}
labels["control verb"] = {
aliases = {"control"},
Wikipedia = true,
pos_categories = "control verbs",
}
labels["common"] = {
aliases = {"giống chung"},
display = "giống chung",
glossary = "giống chung",
}
labels["comparable"] = {
glossary = true,
}
labels["completive"] = {
pos_categories = "completive verbs",
}
labels["copulative"] = {
aliases = {"copular"},
display = "[[copular verb|copulative]]",
pos_categories = "copulative verbs",
}
labels["countable"] = {
aliases = {"đếm được"},
display = "đếm được",
glossary = "đếm được",
pos_categories = "Danh từ đếm được",
}
labels["cumulative"] = {
pos_categories = "cumulative verbs",
}
labels["delimitative"] = {
pos_categories = "delimitative verbs",
}
labels["deponent"] = {
glossary = true,
pos_categories = "deponent verbs",
}
labels["distributive"] = {
pos_categories = "distributive verbs",
}
labels["ditransitive"] = {
aliases = {"ngoại động từ kép"},
display = "ngoại động từ kép",
glossary = true,
pos_categories = "Ngoại động từ kép",
}
labels["dysphemistic"] = {
aliases = {"dysphemism"},
Wikipedia = "Dysphemism",
pos_categories = "dysphemisms",
}
labels["by ellipsis"] = {
display = "by [[ellipsis]]",
pos_categories = "ellipses",
}
labels["emphatic"] = {
glossary = true,
}
labels["ergative"] = {
display = "[[ergative|khiển cách]]",
glossary = true,
pos_categories = "Động từ khiển cách",
}
labels["by extension"] = {
aliases = {"hence", "mở rộng", "nghĩa mở rộng"},
display = "nghĩa mở rộng",
}
labels["feminine"] = {
glossary = true,
}
labels["focus"] = {
glossary = true,
pos_categories = "focus adverbs",
}
labels["fractional"] = {
display = "[[fractional number]]",
pos_categories = "fractional numbers",
}
labels["frequentative"] = {
glossary = true,
display = "frequentative",
pos_categories = "frequentative verbs",
}
labels["hedge"] = {
aliases = {"hedges"},
glossary = true,
pos_categories = "hedges",
}
labels["ideophonic"] = {
aliases = {"ideophone"},
glossary = true,
}
labels["idiomatic"] = {
aliases = {"idiom", "idiomatically", "thành ngữ", "thành ngữ tính", "tính thành ngữ", "mang tính thành ngữ", "có tính thành ngữ"},
display = "thành ngữ tính",
glossary = "thành ngữ tính",
pos_categories = "Thành ngữ",
}
labels["imperfect"] = {
glossary = true,
}
labels["imperfective"] = {
glossary = true,
pos_categories = "imperfective verbs",
}
labels["impersonal"] = {
glossary = true,
pos_categories = "impersonal verbs",
}
labels["in the singular"] = {
aliases = {"in singular"},
deprecated_aliases = {"singular"},
display = "in the [[singular]]",
}
labels["in the dual"] = {
aliases = {"in dual"},
deprecated_aliases = {"dual"},
display = "in the [[dual]]",
}
labels["in the plural"] = {
aliases = {"in plural", "ở dạng số nhiều", "ở số nhiều"},
deprecated_aliases = {"plural"},
display = "ở dạng [[Phụ lục:Từ điển thuật ngữ#số nhiều|số nhiều]]",
}
labels["inanimate"] = {
glossary = true,
}
labels["inchoative"] = {
pos_categories = "inchoative verbs",
}
labels["indefinite"] = {
aliases = {"indef"},
display = "[[indefinite]]",
}
labels["initialism"] = {
display = "viết tắt từ chữ đầu với cách đọc ghép âm",
glossary = true,
pos_categories = "Từ viết tắt từ chữ đầu với cách đọc ghép âm",
}
labels["intensive verb"] = {
display = "intensive",
pos_categories = "intensive verbs",
}
labels["intransitive"] = {
aliases = {"nội động từ", "nội đt"},
display = "nội động từ",
glossary = "nội động từ",
pos_categories = "Nội động từ",
}
labels["IPA"] = {
aliases = {"International Phonetic Alphabet"},
Wikipedia = "International Phonetic Alphabet",
plain_categories = "IPA symbols",
}
labels["iterative"] = {
glossary = true,
pos_categories = "iterative verbs",
}
labels["litotes"] = {
aliases = {"litote", "litotic", "litotical"},
glossary = true,
pos_categories = true,
}
labels["masculine"] = {
glossary = true,
}
labels["mediopassive"] = {
aliases = {"in the mediopassive", "in mediopassive"},
glossary = true,
}
labels["meiosis"] = {
aliases = {"meioses", "meiotic"},
glossary = true,
pos_categories = "meioses",
}
labels["middle voice"] = {
aliases = {"middle", "in the middle", "in the middle voice"},
glossary = true,
}
labels["mnemonic"] = {
display = "[[mnemonic]]",
pos_categories = "mnemonics",
}
labels["modal"] = {
Wikipedia = "Modality (linguistics)",
}
labels["chiefly in the negative"] = {
aliases = {"chiefly used in the negative", "negative polarity", "negative polarity item", "usually in the negative", "usually used in the negative"},
glossary = "negative polarity item",
pos_categories = "negative polarity items",
}
labels["chiefly in the negative plural"] = {
aliases = {"chiefly used in the negative plural", "negative polarity plural", "negative polarity plural item", "usually in the negative plural", "usually used in the negative plural"},
display = "chiefly in the [[Phụ lục:Từ điển thuật ngữ#negative polarity item|negative]] [[Phụ lục:Từ điển thuật ngữ#plural|plural]]",
pos_categories = "negative polarity items",
}
labels["chiefly in the positive"] = {
aliases = {"chiefly used in the positive", "positive polarity", "positive polarity item", "usually in the positive", "usually used in the positive"},
glossary = "positive polarity item",
-- pos_categories = {"positive polarity items"},
}
labels["chiefly in the positive plural"] = {
aliases = {"chiefly used in the positive plural", "positive polarity plural", "positive polarity plural item", "usually in the positive plural", "usually used in the positive plural"},
display = "chiefly in the [[Phụ lục:Từ điển thuật ngữ#positive polarity item|positive]] [[Phụ lục:Từ điển thuật ngữ#plural|plural]]",
-- pos_categories = "positive polarity items",
}
labels["neuter"] = {
glossary = true,
}
-- British English ("ise")
labels["nominalised"] = {
aliases = {"nominalisation", "substantivised", "substantivisation"},
display = "[[Phụ lục:Từ điển thuật ngữ#nominalization|nominalised]]",
pos_categories = "nominalized adjectives",
}
-- American English ("ize")
labels["nominalized"] = {
aliases = {"nominalization", "substantivized", "substantivization"},
display = "[[Phụ lục:Từ điển thuật ngữ#nominalization|nominalized]]",
pos_categories = "nominalized adjectives",
}
labels["not comparable"] = {
aliases = {"notcomp", "uncomparable", "không so sánh"},
display = "[[Phụ lục:Từ điển thuật ngữ#không so sánh|không so sánh được]]",
pos_categories = "Từ không so sánh được",
}
labels["numeronym"] = {
glossary = true,
pos_categories = "numeronyms",
}
labels["onomatopoeia"] = {
aliases = {"tượng thanh", "từ tượng thanh"},
display = "[[tượng thanh]]",
pos_categories = "Từ tượng thanh",
}
labels["ordinal"] = {
display = "[[số thứ tự]]",
pos_categories = "Số thứ tự",
}
labels["partitive verb"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#transitive|transitive]], usually [[Appendix:Finnic telic and atelic verbs|atelic]]",
--pos_categories = {"partitive verbs"},
}
labels["perfect"] = {
glossary = true,
}
labels["participle"] = {
glossary = true,
}
labels["passive voice"] = {
aliases = {"passive", "in the passive"},
glossary = true,
}
labels["perfect"] = {
glossary = true,
}
labels["perfective"] = {
glossary = true,
pos_categories = "perfective verbs",
}
labels["plural only"] = {
aliases = {"pluralonly", "plurale tantum", "chỉ có số nhiều"},
display = "chỉ có số nhiều",
pos_categories = "Danh từ chỉ có số nhiều",
}
labels["possessional adjective"] = {
aliases = {"possessional", "possessional adjectives"},
display = "possessional",
glossary = true,
pos_categories = "possessional adjectives",
}
labels["possessive pronoun"] = {
display = "possessive",
pos_categories = "possessive pronouns",
}
labels["postpositive"] = {
glossary = true,
}
labels["predicative"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#predicative|predicative]]",
}
labels["predicatively"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#predicative|predicatively]]",
}
labels["privative"] = {
pos_categories = "privative verbs",
}
labels["procedure word"] = {
display = "[[procedure word]]",
}
labels["productive"] = {
display = "[[productive]]",
}
-- TODO: This label is probably inappropriate for many languages
labels["pronominal"] = {
display = "takes a [[Phụ lục:Từ điển thuật ngữ#reflexive|reflexive pronoun]]",
}
labels["pro-verb"] = {
Wikipedia = true,
}
labels["reciprocal"] = {
glossary = true,
pos_categories = "reciprocal verbs",
}
labels["reflexive"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#reflexive|phản thân]]",
glossary = true,
pos_categories = "Động từ phản thân",
}
labels["reflexive pronoun"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#reflexive|phản thân]]",
pos_categories = "Đại từ phản thân",
}
labels["relational"] = {
aliases = {"tính từ quan hệ"},
display = "[[Phụ lục:Từ điển thuật ngữ#tính từ quan hệ|tính từ quan hệ]]",
pos_categories = "Tính từ quan hệ",
}
labels["repetitive"] = {
pos_categories = "repetitive verbs",
}
labels["reversative"] = {
pos_categories = "reversative verbs",
}
labels["rhetorical question"] = {
glossary = true,
pos_categories = "rhetorical questions",
}
labels["saturative"] = {
aliases = {"sative"},
pos_categories = "saturative verbs",
}
labels["semelfactive"] = {
glossary = true,
pos_categories = "semelfactive verbs",
}
labels["sentence adverb"] = {
glossary = true,
pos_categories = "sentence adverbs",
}
labels["set phrase"] = {
display = "[[set phrase]]",
}
labels["tỷ dụ"] = {
aliases = {"simile", "tỉ dụ"},
glossary = true,
pos_categories = "Tỷ dụ",
}
labels["singular only"] = {
aliases = {"singulare tantum", "no plural"},
display = "singular only",
pos_categories = "singularia tantum",
}
labels["snowclone"] = {
glossary = true,
pos_categories = "snowclones",
}
labels["stative"] = {
aliases = {"stative verb", "động từ tĩnh"},
display = "[[w:Động từ tĩnh|động từ tĩnh]]",
pos_categories = "Động từ tĩnh",
}
labels["strictly"] = {
aliases = {"strict", "narrowly", "narrow"},
glossary = true,
}
labels["substantive"] = {
glossary = true,
track = true,
}
labels["terminative"] = {
pos_categories = "terminative verbs",
}
labels["transitive"] = {
aliases = {"ngoại động từ", "ngoại đt"},
display = "ngoại động từ",
glossary = "ngoại động từ",
pos_categories = "Ngoại động từ",
}
labels["reduplications"] = {
aliases = {"từ láy", "láy"},
display = "từ láy",
glossary = "Từ láy",
pos_categories = "Từ láy",
}
labels["unaccusative"] = {
Wikipedia = "Unaccusative verb",
}
labels["uncountable"] = {
aliases = {"không đếm được"},
display = "không đếm được",
glossary = "không đếm được",
pos_categories = "Danh từ không đếm được",
}
labels["unergative"] = {
Wikipedia = "Unergative verb",
}
labels["usually plural"] = {
aliases = {"usually in the plural", "usually in plural"},
display = "usually in the [[Phụ lục:Từ điển thuật ngữ#plural|plural]]",
deprecated = true,
}
-- Usage labels
labels["4chan"] = {
display = "[[w:4chan|4chan]]",
pos_categories = "4chan slang",
}
labels["ACG"] = {
display = "[[ACG]]",
-- see also "fandom slang"
pos_categories = "fandom slang",
}
labels["endearing"] = {
aliases = {"affectionate"},
display = "[[endearing]]",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "endearing terms",
}
labels["pre-classical"] = {
aliases = {"Pre-classical", "pre-Classical", "Pre-Classical", "Preclassical", "preclassical", "ante-classical", "Ante-classical", "ante-Classical", "Ante-Classical", "Anteclassical", "anteclassical"},
display = "pre-Classical",
regional_categories = true,
}
labels["archaic"] = {
aliases = {"antiquated", "cổ xưa"},
display = "cổ xưa",
glossary = "cổ xưa",
sense_categories = {"cổ xưa"},
}
labels["Australian slang"] = {
regional_categories = "Australian",
plain_categories = true,
}
labels["avoidance"] = {
glossary = true,
}
labels["back slang"] = {
aliases = {"backslang", "back-slang"},
display = "[[Phụ lục:Từ điển thuật ngữ#backslang|back slang]]",
pos_categories = true,
}
labels["Bargoens"] = {
Wikipedia = true,
plain_categories = true,
}
labels["Braille"] = {
Wikipedia = true,
}
labels["British slang"] = {
aliases = {"UK slang"},
plain_categories = true,
}
labels["Cambridge University slang"] = {
aliases = {"University of Cambridge slang", "Cantab slang"},
display = "[[w:University of Cambridge|Cambridge University]] [[slang]]",
topical_categories = "Universities",
plain_categories = true,
}
labels["cant"] = {
aliases = {"argot", "cryptolect"},
display = "[[cant]]",
pos_categories = true,
}
labels["capitalized"] = {
display = "[[capitalisation|capitalized]]",
}
labels["Castilianism"] = {
aliases = {"Hispanicism"},
display = "[[Castilianism]]",
}
labels["childish"] = {
aliases = {"baby talk", "child language", "infantile", "ngôn ngữ trẻ con", "ngôn ngữ trẻ em", "ngôn ngữ nhà trường"},
display = "ngôn ngữ [[trẻ con]]",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "Ngôn ngữ trẻ con",
}
labels["chu Nom"] = {
display = "[[Vietnamese]] [[chữ Nôm]]",
plain_categories = "Mục từ chữ Nôm",
}
labels["Classic 1811 Dictionary of the i Tongue"] = {
aliases = {"1811"},
display = "[[Phụ lục:Từ điển thuật ngữ#archaic|archaic]], [[Phụ lục:Từ điển thuật ngữ#slang|slang]]",
plain_categories = "Classic 1811 Dictionary of the Vulgar Tongue",
}
labels["Cockney rhyming slang"] = {
aliases = {"từ lóng có vần điệu của người Luân Đôn", "tiếng lóng có vần điệu của người Luân Đôn"},
display = "[[Cockney rhyming slang|từ lóng có vần điệu của người Luân Đôn]]",
plain_categories = { "Từ lóng có vần điệu của người Luân Đôn" },
}
labels["colloquial"] = {
aliases = {"colloquially", "khẩu ngữ", "thông tục", "từ thông tục"},
display = "thông tục",
glossary = "thông tục",
pos_categories = "Từ thông tục",
}
-- FIXME! The following two are apparently for Persian but probably don't belong in this file.
labels["colloquial-um"] = {
glossary = "colloquial",
pos_categories = "colloquialisms containing sequence um",
}
labels["colloquial-un"] = {
glossary = "colloquial",
pos_categories = "colloquialisms containing sequence un",
}
labels["corporate jargon"] = {
aliases = {"business jargon", "corporatese", "businessese", "corporate speak", "business speak"},
display = "[[corporate]] [[jargon]]",
pos_categories = true,
}
labels["costermongers"] = {
aliases = {"coster", "costers", "costermonger", "costermongers back slang", "costermongers' back slang"},
display = "[[Appendix:Costermongers' back slang|costermongers]]",
plain_categories = "Costermongers' back slang",
}
labels["criminal slang"] = {
aliases = {"thieves' cant", "Thieves' Cant", "thieves cant", "thieves'", "thieves", "thieves’ cant"}, -- Thieves' Cant is English-only, so defined in the English submodule; if other languages try to use it, it's just criminal slang
display = "[[criminal]] [[slang]]",
topical_categories = "Crime",
pos_categories = true,
}
labels["dated"] = {
aliases = {"lỗi thời", "cũ", "từ cũ"},
display = "lỗi thời",
glossary = "lỗi thời",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "Từ lỗi thời",
}
labels["dated form"] = {
glossary = "dated",
pos_categories = "dated forms",
}
-- combine with previous?
labels["dated sense"] = {
glossary = "dated",
sense_categories = "dated",
}
labels["derogatory"] = {
aliases = {"pejorative", "derogative", "disparaging", "nghĩa xấu", "xấu"},
display = "nghĩa [[xấu]]",
pos_categories = "Từ xấu",
}
labels["dialect"] = {-- separated from "dialectal" so e.g. "obsolete|outside|the|_|dialect|of..." displays right
aliases = {"địa phương", "phương ngôn", "phương ngữ", "từ địa phương"},
display = "[[Phụ lục:Từ điển thuật ngữ#phương ngữ|phương ngữ]]",
pos_categories = {"Từ phương ngữ"},
}
labels["dialectal"] = {
aliases = {"thuộc phương ngữ"},
display = "thuộc phương ngữ",
glossary = "phương ngữ",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "Từ phương ngữ",
}
labels["dialects"] = {-- separated from "dialectal" so e.g. "obsolete|outside|dialects" displays right
display = "[[Phụ lục:Từ điển thuật ngữ#dialectal|dialects]]",
pos_categories = {"dialectal terms"},
}
labels["dismissal"] = {
display = "[[dismissal]]",
pos_categories = "dismissals",
}
labels["drag slang"] = {
aliases = {"Drag Race slang"},
display = "[[drag]] [[slang]]",
}
labels["solemn"] = {
glossary = true,
pos_categories = "solemn terms",
}
labels["ecclesiastical"] = {
pos_categories = "ecclesiastical terms",
}
labels["ethnic slur"] = {
aliases = {"racial slur", "xúc phạm dân tộc", "xúc phạm chủng tộc"},
display = "[[xúc phạm]] [[dân tộc]]",
pos_categories = "Từ xúc phạm dân tộc",
}
labels["euphemistic"] = {
aliases = {"euphemism", "uyển ngữ", "nói giảm nói tránh"},
display = "uyển ngữ",
glossary = "uyển ngữ",
pos_categories = "Uyển ngữ",
}
labels["eye dialect"] = {
display = "[[eye dialect]]",
pos_categories = true,
}
labels["familiar"] = {
aliases = {"thân mật"},
display = "thân mật",
glossary = "thân mật",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "Từ ngữ thân mật",
}
labels["fandom slang"] = {
aliases = {"fandom", "lóng fandom", "từ lóng fandom", "tiếng lóng fandom"},
display = "{{glossary|từ lóng}} [[fandom]]",
pos_categories = "Từ lóng fandom",
}
labels["figurative"] = {
aliases = {"ẩn dụ", "bóng", "figuratively", "metaphorical", "metaphorically", "metaphoric", "metaphor", "nghĩa bóng"},
display = "nghĩa bóng",
glossary = "nghĩa bóng",
}
labels["folk poetic"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = {"folk poetic terms", "poetic terms"},
}
labels["formal"] = {
aliases = {"trang trọng", "kiểu cách"},
display = "trang trọng",
glossary = "trang trọng",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "Từ trang trọng",
}
labels["gay slang"] = {
display = "{{glossary|từ lóng}} người [[đồng tính]]",
pos_categories = "Từ lóng người đồng tính",
}
labels["gender-neutral"] = {
glossary = "epicene",
pos_categories = "gender-neutral terms",
}
labels["genericized trademark"] = {
aliases = {"generic trademark", "proprietary eponym"},
display = "[[genericized trademark]]",
pos_categories = "genericized trademarks",
}
labels["hapax legomenon"] = {
aliases = {"hapax", "từ độc hiện"},
display = "từ độc hiện",
glossary = "từ độc hiện",
pos_categories = "Từ độc hiện",
}
labels["higher register"] = {
aliases = {"high register", "elevated register", "elevated"},
glossary = "higher register",
pos_categories = "higher register terms",
}
labels["historical"] = {
aliases = {"historic", "thuộc lịch sử", "từ lịch sử", "từ ngữ lịch sử"},
display = "từ ngữ lịch sử",
glossary = "từ ngữ lịch sử",
pos_categories = "Từ ngữ lịch sử",
}
labels["non-native speakers"] = {-- language-agnostic version
aliases = {"NNS"},
display = "[[non-native speaker]]s", -- so preceded by "used by", "error by children and", etc? or reword?
regional_categories = {"Non-native speakers'"},
}
labels["non-native speakers' English"] = {
aliases = {"NNES", "NNSE"},
display = "[[non-native speaker]]s' English",
regional_categories = "Non-native speakers'",
}
-- used exclusively by languages that use the “Jpan” script code
labels["historical hiragana"] = {
pos_categories = true,
}
-- used exclusively by languages that use the “Jpan” script code
labels["historical katakana"] = {
pos_categories = true,
}
-- applies to Japanese and Korean, etc., please do not confuse with "polite"
labels["honorific"] = {
aliases = {"kính ngữ"},
display = "kính ngữ",
Wikipedia = "Kính ngữ (ngôn ngữ học)",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "Kính ngữ",
}
-- for Ancient Greek
labels["Homeric epithet"] = {
display = "[[Homeric Greek|Homeric]] [[w:Homeric epithets|epithet]]",
omit_postComma = true,
plain_categories = "Epic Greek",
}
-- applies to Japanese and Korean, etc.
labels["humble"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
display = "[[humble]]",
pos_categories = "humble terms",
}
-- for Akkadian
labels["in hendiadys"] = {
aliases = {"hendiadys"},
pos_categories = "hendiadys",
}
labels["humorous"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp; NB and cf a similar "jocular" label further up on this page
aliases = {"humorously", "jocular", "hài hước"},
display = "[[hài hước]]",
pos_categories = "Từ hài hước",
}
labels["hyperbolic"] = {
aliases = {"hyperbole"},
display = "[[Phụ lục:Từ điển thuật ngữ#hyperbolic|hyperbolic]]",
pos_categories = "hyperboles",
}
labels["hypercorrect"] = {
aliases = {"siêu chỉnh"},
display = "[[Phụ lục:Từ điển thuật ngữ#siêu chỉnh|siêu chỉnh]]",
pos_categories = "Siêu chỉnh",
}
labels["hyperforeign"] = {
glossary = true,
pos_categories = "hyperforeign terms",
}
labels["imperial"] = {
aliases = {"emperor", "empress"},
pos_categories = "royal terms",
}
labels["incel slang"] = {
display = "[[incel]] [[slang]]",
pos_categories = true,
}
labels["informal"] = {
aliases = {"informally", "không trang trọng"},
display = "không trang trọng",
glossary = "không trang trọng",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "Từ không trang trọng",
}
labels["Internet slang"] = {
aliases = {"internet slang", "lóng Internet", "lóng internet", "ngôn ngữ mạng", "từ lóng Internet", "từ lóng internet", "tiếng lóng Internet", "tiếng lóng internet"},
display = "[[từ lóng]] [[Internet]]",
pos_categories = "Từ lóng Internet",
}
labels["IRC"] = {
display = "[[IRC]]",
pos_categories = "internet slang",
}
labels["ironic"] = {
aliases = {"biếm dụ"},
display = "[[biếm dụ]]",
}
-- Not the same as "journalism", which maps to a topical category (e.g. [[:Category:en:Journalism]], instead of [[:Category:English journalistic terms]]).
labels["journalistic"] = {
aliases = {"journalese"},
display = "[[journalistic]]",
pos_categories = "journalistic terms",
}
labels["leet"] = {
aliases = {"leetspeak"},
display = "[[leetspeak]]",
pos_categories = true,
}
labels["từ lóng LGBT"] = {
aliases = {"LGBTQ slang","LGBT slang"},
display = "từ lóng [[LGBT]]",
pos_categories = "Từ lóng LGBT",
}
labels["literal"] = {
display = "nghĩa đen",
glossary = "đen",
}
labels["literally"] = {
aliases = {"nghĩa đen", "đen"},
display = "nghĩa đen",
glossary = "đen",
}
labels["literary"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp
aliases = {"bookish", "văn chương"},
display = "văn chương",
glossary = "văn chương",
pos_categories = "Ngôn ngữ văn chương",
}
labels["loosely"] = {
glossary = true,
}
labels["Lubunyaca"] = {
display = "[[Lubunyaca]]",
pos_categories = true,
}
labels["medical slang"] = {
display = "[[medical]] [[slang]]",
pos_categories = true,
}
-- for Awetí, Karajá, etc., where men and women use different words
labels["men's speech"] = {
aliases = {"male speech"},
glossary = "men's speech",
pos_categories = "men's speech terms",
}
labels["metonymically"] = {
aliases = {"metonymic", "metonymy", "metonym", "hoán dụ"},
display = "hoán dụ",
glossary = "hoán dụ",
pos_categories = "Từ hoán dụ",
}
labels["military slang"] = {
aliases = {"lóng quân sự", "từ lóng quân sự", "tiếng lóng quân sự"},
display = "[[từ lóng]] [[quân sự]]",
pos_categories = "Từ lóng quân sự",
}
labels["minced oath"] = {
aliases = {"từ chửi thề ít gây khó chịu"},
display = "[[minced oath|từ chửi thề ít gây khó chịu]]",
pos_categories = "Từ chửi thề ít gây khó chịu",
}
labels["nativising coinage"] = {
display = "[[w:Linguistic purism in Korean|nativising coinage]]",
pos_categories = "nativising coinages",
}
labels["naval slang"] = {
aliases = {"navy slang"},
display = "[[naval]] [[slang]]",
pos_categories = true,
}
labels["neologism"] = {
aliases = {"neologistic", "mới", "từ mới", "từ ngữ mới"},
display = "từ mới",
glossary = "từ mới",
pos_categories = "Từ mới xuất hiện",
}
labels["neopronoun"] = {
display = "[[neopronoun]]",
-- pos_categories = {"neopronouns"},
}
labels["no longer productive"] = {
aliases = {"không còn phát sinh từ mới"},
display = "không còn [[Phụ lục:Từ điển thuật ngữ#phát sinh từ mới|phát sinh từ mới]]",
}
labels["nonce word"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
aliases = {"nonce"},
display = "[[Phụ lục:Từ điển thuật ngữ#nonce|từ tạo ra cho trường hợp cụ thể]]",
pos_categories = "Từ tạo ra cho trường hợp cụ thể",
}
labels["nonstandard"] = {
aliases = {"non-standard", "không tiêu chuẩn"},
display = "không tiêu chuẩn",
glossary = " không tiêu chuẩn",
pos_categories = "Từ không tiêu chuẩn",
}
labels["nonstandard form"] = {
glossary = "nonstandard",
pos_categories = "nonstandard forms",
}
labels["obsolete"] = {
aliases = {"không còn dùng"},
display = "không còn dùng",
glossary = "không còn dùng",
sense_categories = "không còn dùng",
}
labels["obsolete term"] = {
aliases = {"thuật ngữ không còn dùng", "từ không còn dùng", "từ ngữ không còn dùng"},
display = "thuật ngữ không còn dùng",
glossary = "không còn dùng",
-- combine with previous two, q.v.
pos_categories = "Từ không còn dùng",
}
labels["offensive"] = {
aliases = {"xúc phạm", "từ xúc phạm"},
display = "[[xúc phạm]]",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "Từ xúc phạm",
}
labels["officialese"] = {
aliases = {"bureaucratic"},
display = "[[officialese]]",
pos_categories = "officialese terms",
}
labels["Oxbridge slang"] = {
display = "[[w:Oxbridge|Oxbridge]] [[slang]]",
topical_categories = "Universities",
plain_categories = {"Cambridge University slang", "Oxford University slang"},
}
labels["Oxford University slang"] = {
aliases = {"University of Oxford slang", "Oxon slang"},
display = "[[w:University of Oxford|Oxford University]] [[slang]]",
topical_categories = "Universities",
plain_categories = true,
}
labels["poetic"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp
aliases = {"thơ ca", "thuộc thơ ca"},
display = "[[thơ ca]]",
pos_categories = "Từ thơ ca",
}
labels["polite"] = {
aliases = {"lịch sự"},
display = "lịch sự",
pos_categories = "Từ lịch sự",
}
labels["post-classical"] = {
aliases = {"Post-classical", "post-Classical", "Post-Classical", "Postclassical", "postclassical"},
display = "post-Classical",
regional_categories = true,
}
labels["prison slang"] = {
display = "[[prison]] [[slang]]",
pos_categories = true,
}
labels["proscribed"] = {
aliases = {"không nên dùng"},
glossary = "không nên dùng",
pos_categories = "Từ không nên dùng",
}
labels["puristic"] = {
aliases = {"purism"},
Wikipedia = "Linguistic purism",
pos_categories = "puristic terms",
}
labels["radio slang"] = {
display = "[[radio]] [[slang]]",
pos_categories = true,
}
labels["Reddit slang"] = {
display = "[[Reddit]] [[slang]]",
pos_categories = true,
}
labels["rare"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#hiếm|hiếm]]",
aliases = {"hiếm", "hiếm dùng", "ít dùng", "nghĩa hiếm", "rare sense"},
sense_categories = { "hiếm" },
}
labels["rare term"] = {
display = "rare",
-- see comments about "obsolete"
pos_categories = "rare terms",
}
-- cf Cockney rhyming slang
labels["rhyming slang"] = {
display = "[[rhyming slang]]",
pos_categories = true,
}
labels["religious slur"] = {
aliases = {"sectarian slur"},
display = "[[religious]] [[slur]]",
pos_categories = "religious slurs",
}
labels["retronym"] = {
glossary = true,
pos_categories = "retronyms",
}
labels["reverential"] = {
pos_categories = "reverential terms",
}
labels["royal"] = {
aliases = {"regal"},
pos_categories = "royal terms",
}
labels["rustic"] = {
glossary = true,
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
aliases = {"rural"},
pos_categories = "rustic terms",
}
labels["sarcastic"] = {
aliases = {"mỉa mai"},
display = "[[mỉa mai]]",
pos_categories = "Từ mỉa mai",
}
labels["school slang"] = {
aliases = {"public school slang"},
display = "[[school]] [[slang]]",
pos_categories = true,
}
labels["self-deprecatory"] = {
aliases = {"self-deprecating"},
display = "[[self-deprecatory]]",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "self-deprecatory terms",
}
-- Swahili Sheng cant / argot
labels["Sheng"] = {
Wikipedia = "Sheng slang",
plain_categories = true,
}
labels["siglum"] = {
aliases = {"sigla"},
glossary = true,
pos_categories = "sigla",
}
labels["slang"] = {
display = "{{glossary|từ lóng}}",
aliases = {"lóng", "tiếng lóng", "từ lóng"},
pos_categories = "Từ lóng",
}
labels["university slang"] = {
aliases = {"college slang", "student slang"},
display = "[[university]] [[slang]]",
topical_categories = "Universities",
pos_categories = "student slang",
}
labels["stenoscript"] = {
display = "[[Stenoscript|stenoscript]]",
pos_categories = "stenoscript abbreviations",
}
labels["swear word"] = {
aliases = {"profanity", "expletive"},
pos_categories = "swear words",
}
labels["syncopated"] = {
aliases = {"syncope", "syncopic", "syncopation"},
glossary = true,
pos_categories = "syncopic forms",
}
labels["synecdochically"] = {
aliases = {"synecdochic", "synecdochical", "synecdoche"},
glossary = true,
pos_categories = "synecdoches",
}
labels["technical"] = {
display = "[[technical]]",
pos_categories = "technical terms",
}
labels["telic"] = {
glossary = true,
}
labels["text messaging"] = {
aliases = {"texting", "nhắn tin", "nhắn tin văn bản"},
display = "[[nhắn tin]]",
pos_categories = "Từ lóng nhắn tin",
}
labels["tone indicator"] = {
display = "[[tone indicator]]",
pos_categories = "tone indicators",
}
labels["trademark"] = {
display = "[[trademark]]",
pos_categories = "trademarks",
}
labels["transferred sense"] = {
glossary = true,
pos_categories = "terms with transferred senses",
}
labels["transferred senses"] = {
display = "[[transferred sense#English|transferred senses]]",
pos_categories = "terms with transferred senses",
}
labels["transgender slang"] = {
display = "[[transgender]] [[slang]]",
pos_categories = true,
}
labels["Twitch-speak"] = {
display = "[[Twitch-speak]]",
pos_categories = true,
}
labels["uds."] = {
display = "[[Appendix:Spanish pronouns#Ustedes and vosotros|used formally in Spain]]",
}
labels["uncommon"] = {
aliases = {"không phổ biến"},
display = "[[Phụ lục:Từ điển thuật ngữ#không phổ biến|không phổ biến]]",
sense_categories = {"không phổ biến"},
}
labels["verlan"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#verlan|verlan]]",
plain_categories = true,
}
labels["very rare"] = {
display = "very [[Phụ lục:Từ điển thuật ngữ#rare|rare]]",
sense_categories = "rare",
}
labels["vulgar"] = {
display = "thô tục",
aliases = {"coarse", "obscene", "profane", "thô tục", "tục", "tục tĩu", "từ tục"},
glossary = "thô tục",
pos_categories = "Từ thô tục",
}
labels["vesre"] = {
Wikipedia = true,
plain_categories = true,
}
labels["youth slang"] = {
display = "[[youth]] [[slang]]",
pos_categories = "slang",
}
labels["2channel slang"]={
aliases = {"2ch slang"},
display ="[[w:2channel|2channel]] [[slang]]",
pos_categories = {"internet slang" , "2channel slang"},
}
-- for Awetí, Karajá, etc., where men & women use different words
labels["women's speech"] = {
aliases = {"female speech"},
glossary = "women's speech",
pos_categories = "women's speech terms",
}
-- terms applying to Old Norse skaldic poetry
labels["kenning"] = {
aliases = {"Kenning"},
Wikipedia = "Kenning",
pos_categories = "kennings",
}
labels["heiti"] = {
aliases = {"Heiti"},
Wikipedia = "Heiti",
pos_categories = "heiti",
}
-- Mục nhập từ [[Bản mẫu:context/data]]
labels["hoặc"] = {
display = "hoặc",
}
labels["hơi"] = {
display = "hơi",
}
labels["ngày nay"] = {
display = "ngày nay",
}
labels["thường"] = {
display = "thường",
}
labels["trừ"] = {
display = "trừ",
}
labels["tại"] = {
display = "tại",
}
labels["đôi khi"] = {
display = "đôi khi",
}
labels["Cao Đài"] = {
display = "Cao Đài",
plain_categories = "Cao Đài",
}
labels["Chính Thống giáo"] = {
display = "Chính Thống giáo",
plain_categories = "Chính Thống giáo",
}
labels["biệt ngữ"] = {
display = "biệt ngữ",
plain_categories = "Biệt ngữ",
}
labels["bóng"] = {
display = "nghĩa bóng",
plain_categories = "Từ có nghĩa bóng",
}
labels["Từ cũ"] = labels["dated"]
labels["cơ khí"] = {
display = "cơ khí",
plain_categories = "Kỹ thuật cơ khí",
}
labels["cổ"] = {
display = "cổ",
plain_categories = "Từ cổ",
}
labels["hiếm"] = {
display = "hiếm",
plain_categories = "Từ hiếm",
}
labels["hài hước"] = {
display = "hài hước",
plain_categories = "Từ hài hước",
}
labels["không dịch"] = {
display = "không dịch",
plain_categories = "Từ không dịch qua tiếng Việt",
}
labels["không nên dùng"] = {
display = "không nên dùng",
plain_categories = "Từ không nên dùng",
}
labels["Khẩu ngữ"] = labels["informal"]
labels["kết hợp hạn chế"] = {
display = "kết hợp hạn chế",
plain_categories = "Từ kết hợp hạn chế",
}
labels["nhãn khoa"] = {
display = "nhãn khoa",
plain_categories = "Nhãn khoa",
}
labels["rộng"] = {
display = "nghĩa rộng",
plain_categories = "Từ có nghĩa rộng",
}
labels["sân khấu"] = {
display = "sân khấu",
plain_categories = "Sân khấu",
}
labels["số nhiều"] = {
display = "số nhiều",
}
labels["số ít"] = {
display = "số ít",
}
labels["thần thoại"] = {
display = "thần thoại",
plain_categories = "Thần thoại",
}
labels["trang trọng"] = {
display = "trang trọng",
plain_categories = "Từ trang trọng",
}
labels["trại"] = {
display = "nói trại",
plain_categories = "Từ nói trại",
}
labels["tục tĩu"] = {
display = "tục tĩu",
plain_categories = "Từ tục tĩu",
}
labels["văn học"] = {
display = "văn học",
plain_categories = "Văn học",
}
labels["Văn chương"] = labels["văn học"]
labels["văn chương"] = labels["văn học"]
labels["xấu"] = {
display = "xấu",
plain_categories = "Từ xấu",
}
labels["Úc"] = {
display = "[[Hình:Flag of Australia.svg|22x20px|border|link=|Úc]] Úc",
plain_categories = "Tiếng Anh Úc",
}
labels["Ít dùng"] = labels["rare"]
labels["đen"] = {
display = "nghĩa đen",
plain_categories = "Từ có nghĩa đen",
}
labels["Phương ngữ"] = labels["dialect"]
labels["định ngữ"] = {
display = "định ngữ",
plain_categories = "Danh từ định ngữ",
}
labels["Andalucía"] = {
display = "Andalucía",
}
labels["Anglo-Norman"] = {
display = "Anglo-Norman",
}
labels["animal"] = {
display = "động vật",
plain_categories = "Động vật",
}
labels["exercise"] = {
display = "bài tập",
}
labels["eye dialect"] = {
display = "phương ngữ mắt",
}
labels["family"] = {
display = "gia đình",
}
return require("Module:labels").finalize_data(labels)
rwdveuxjbms07vr4s6qsk1gn1baiu5f
2573817
2573816
2026-10-27T06:58:18Z
Hiyuune
50834
2573817
Scribunto
text/plain
local labels = {}
-- Grammatical labels
labels["abbreviation"] = {
display = "[[viết tắt]]",
pos_categories = "Từ viết tắt",
}
labels["abstract noun"] = {
display = "trừu tượng",
glossary = "danh từ trừu tượng",
pos_categories = "Danh từ trừu tượng",
}
labels["acronym"] = {
display = "[[acronym]]",
pos_categories = "acronyms",
}
labels["thái chủ động"] = {
aliases = {"active", "active voice", "in active", "in the active", "in active voice", "in the active voice"},
glossary = true,
}
labels["ambitransitive"] = {
display = "[[ngoại động từ]], [[nội động từ]]",
pos_categories = {"Ngoại động từ", "Nội động từ"},
}
labels["angry register"] = {
aliases = {"angry", "anger", "said in anger"},
glossary = true,
pos_categories = "angry register terms",
}
labels["animate"] = {
glossary = true,
}
labels["indicative"] = {
aliases = {"in the indicative", "indicative mood"},
glossary = "indicative mood",
}
labels["subjunctive"] = {
aliases = {"in the subjunctive", "subjunctive mood"},
glossary = "subjunctive mood",
}
labels["imperative"] = {
aliases = {"in the imperative", "imperative mood"},
glossary = "imperative mood",
}
labels["jussive"] = {
aliases = {"in the jussive", "jussive mood"},
glossary = "jussive mood",
}
labels["archaic-verb-form"] = {
glossary = "archaic",
display = "archaic",
pos_categories = "archaic verb forms",
}
labels["atelic"] = {
glossary = true,
}
labels["attenuative"] = {
pos_categories = "attenuative verbs",
}
labels["attributive"] = {
aliases = {"thuộc ngữ"},
display = "[[Phụ lục:Từ điển thuật ngữ#Thuộc ngữ|thuộc ngữ]]",
}
labels["attributively"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#Thuộc ngữ|attributively]]",
}
labels["auxiliary"] = {
aliases = {"trợ động từ"},
display = "trợ động từ",
glossary = "trợ động từ",
pos_categories = "Trợ động từ",
}
labels["broadly"] = {
glossary = true,
}
labels["cardinal"] = {
display = "[[số đếm]]",
pos_categories = "Số đếm",
}
labels["catenative"] = {
glossary = "catenative verb",
}
labels["causative"] = {
display = "[[causative]]",
}
labels["causative verb"] = {
display = "causative",
pos_categories = "causative verbs",
}
labels["cognate object"] = {
aliases = {"with cognate object"},
display = "with [[w:Cognate object|cognate object]]",
pos_categories = "verbs used with cognate objects",
}
labels["tập hợp"] = {
aliases = {"collective", "tập thể"},
glossary = true,
pos_categories = "Danh từ tập hợp",
}
labels["collectively"] = {
glossary = "collective",
display = "collectively",
pos_categories = "Danh từ tập hợp",
}
labels["control verb"] = {
aliases = {"control"},
Wikipedia = true,
pos_categories = "control verbs",
}
labels["common"] = {
aliases = {"giống chung"},
display = "giống chung",
glossary = "giống chung",
}
labels["comparable"] = {
glossary = true,
}
labels["completive"] = {
pos_categories = "completive verbs",
}
labels["copulative"] = {
aliases = {"copular"},
display = "[[copular verb|copulative]]",
pos_categories = "copulative verbs",
}
labels["countable"] = {
aliases = {"đếm được"},
display = "đếm được",
glossary = "đếm được",
pos_categories = "Danh từ đếm được",
}
labels["cumulative"] = {
pos_categories = "cumulative verbs",
}
labels["delimitative"] = {
pos_categories = "delimitative verbs",
}
labels["deponent"] = {
glossary = true,
pos_categories = "deponent verbs",
}
labels["distributive"] = {
pos_categories = "distributive verbs",
}
labels["ditransitive"] = {
aliases = {"ngoại động từ kép"},
display = "ngoại động từ kép",
glossary = true,
pos_categories = "Ngoại động từ kép",
}
labels["dysphemistic"] = {
aliases = {"dysphemism"},
Wikipedia = "Dysphemism",
pos_categories = "dysphemisms",
}
labels["by ellipsis"] = {
display = "by [[ellipsis]]",
pos_categories = "ellipses",
}
labels["emphatic"] = {
glossary = true,
}
labels["ergative"] = {
display = "[[ergative|khiển cách]]",
glossary = true,
pos_categories = "Động từ khiển cách",
}
labels["by extension"] = {
aliases = {"hence", "mở rộng", "nghĩa mở rộng"},
display = "nghĩa mở rộng",
}
labels["feminine"] = {
glossary = true,
}
labels["focus"] = {
glossary = true,
pos_categories = "focus adverbs",
}
labels["fractional"] = {
display = "[[fractional number]]",
pos_categories = "fractional numbers",
}
labels["frequentative"] = {
glossary = true,
display = "frequentative",
pos_categories = "frequentative verbs",
}
labels["hedge"] = {
aliases = {"hedges"},
glossary = true,
pos_categories = "hedges",
}
labels["ideophonic"] = {
aliases = {"ideophone"},
glossary = true,
}
labels["idiomatic"] = {
aliases = {"idiom", "idiomatically", "thành ngữ", "thành ngữ tính", "tính thành ngữ", "mang tính thành ngữ", "có tính thành ngữ"},
display = "thành ngữ tính",
glossary = "thành ngữ tính",
pos_categories = "Thành ngữ",
}
labels["imperfect"] = {
glossary = true,
}
labels["imperfective"] = {
glossary = true,
pos_categories = "imperfective verbs",
}
labels["impersonal"] = {
glossary = true,
pos_categories = "impersonal verbs",
}
labels["in the singular"] = {
aliases = {"in singular"},
deprecated_aliases = {"singular"},
display = "in the [[singular]]",
}
labels["in the dual"] = {
aliases = {"in dual"},
deprecated_aliases = {"dual"},
display = "in the [[dual]]",
}
labels["in the plural"] = {
aliases = {"in plural", "ở dạng số nhiều", "ở số nhiều"},
deprecated_aliases = {"plural"},
display = "ở dạng [[Phụ lục:Từ điển thuật ngữ#số nhiều|số nhiều]]",
}
labels["inanimate"] = {
glossary = true,
}
labels["inchoative"] = {
pos_categories = "inchoative verbs",
}
labels["indefinite"] = {
aliases = {"indef"},
display = "[[indefinite]]",
}
labels["initialism"] = {
display = "viết tắt từ chữ đầu với cách đọc ghép âm",
glossary = true,
pos_categories = "Từ viết tắt từ chữ đầu với cách đọc ghép âm",
}
labels["intensive verb"] = {
display = "intensive",
pos_categories = "intensive verbs",
}
labels["intransitive"] = {
aliases = {"nội động từ", "nội đt"},
display = "nội động từ",
glossary = "nội động từ",
pos_categories = "Nội động từ",
}
labels["IPA"] = {
aliases = {"International Phonetic Alphabet"},
Wikipedia = "International Phonetic Alphabet",
plain_categories = "IPA symbols",
}
labels["iterative"] = {
glossary = true,
pos_categories = "iterative verbs",
}
labels["litotes"] = {
aliases = {"litote", "litotic", "litotical"},
glossary = true,
pos_categories = true,
}
labels["masculine"] = {
glossary = true,
}
labels["mediopassive"] = {
aliases = {"in the mediopassive", "in mediopassive"},
glossary = true,
}
labels["meiosis"] = {
aliases = {"meioses", "meiotic"},
glossary = true,
pos_categories = "meioses",
}
labels["middle voice"] = {
aliases = {"middle", "in the middle", "in the middle voice"},
glossary = true,
}
labels["mnemonic"] = {
display = "[[mnemonic]]",
pos_categories = "mnemonics",
}
labels["modal"] = {
Wikipedia = "Modality (linguistics)",
}
labels["chiefly in the negative"] = {
aliases = {"chiefly used in the negative", "negative polarity", "negative polarity item", "usually in the negative", "usually used in the negative"},
glossary = "negative polarity item",
pos_categories = "negative polarity items",
}
labels["chiefly in the negative plural"] = {
aliases = {"chiefly used in the negative plural", "negative polarity plural", "negative polarity plural item", "usually in the negative plural", "usually used in the negative plural"},
display = "chiefly in the [[Phụ lục:Từ điển thuật ngữ#negative polarity item|negative]] [[Phụ lục:Từ điển thuật ngữ#plural|plural]]",
pos_categories = "negative polarity items",
}
labels["chiefly in the positive"] = {
aliases = {"chiefly used in the positive", "positive polarity", "positive polarity item", "usually in the positive", "usually used in the positive"},
glossary = "positive polarity item",
-- pos_categories = {"positive polarity items"},
}
labels["chiefly in the positive plural"] = {
aliases = {"chiefly used in the positive plural", "positive polarity plural", "positive polarity plural item", "usually in the positive plural", "usually used in the positive plural"},
display = "chiefly in the [[Phụ lục:Từ điển thuật ngữ#positive polarity item|positive]] [[Phụ lục:Từ điển thuật ngữ#plural|plural]]",
-- pos_categories = "positive polarity items",
}
labels["neuter"] = {
glossary = true,
}
-- British English ("ise")
labels["nominalised"] = {
aliases = {"nominalisation", "substantivised", "substantivisation"},
display = "[[Phụ lục:Từ điển thuật ngữ#nominalization|nominalised]]",
pos_categories = "nominalized adjectives",
}
-- American English ("ize")
labels["nominalized"] = {
aliases = {"nominalization", "substantivized", "substantivization"},
display = "[[Phụ lục:Từ điển thuật ngữ#nominalization|nominalized]]",
pos_categories = "nominalized adjectives",
}
labels["not comparable"] = {
aliases = {"notcomp", "uncomparable", "không so sánh"},
display = "[[Phụ lục:Từ điển thuật ngữ#không so sánh|không so sánh được]]",
pos_categories = "Từ không so sánh được",
}
labels["numeronym"] = {
glossary = true,
pos_categories = "numeronyms",
}
labels["onomatopoeia"] = {
aliases = {"tượng thanh", "từ tượng thanh"},
display = "[[tượng thanh]]",
pos_categories = "Từ tượng thanh",
}
labels["ordinal"] = {
display = "[[số thứ tự]]",
pos_categories = "Số thứ tự",
}
labels["partitive verb"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#transitive|transitive]], usually [[Appendix:Finnic telic and atelic verbs|atelic]]",
--pos_categories = {"partitive verbs"},
}
labels["perfect"] = {
glossary = true,
}
labels["participle"] = {
glossary = true,
}
labels["passive voice"] = {
aliases = {"passive", "in the passive"},
glossary = true,
}
labels["perfect"] = {
glossary = true,
}
labels["perfective"] = {
glossary = true,
pos_categories = "perfective verbs",
}
labels["plural only"] = {
aliases = {"pluralonly", "plurale tantum", "chỉ có số nhiều"},
display = "chỉ có số nhiều",
pos_categories = "Danh từ chỉ có số nhiều",
}
labels["possessional adjective"] = {
aliases = {"possessional", "possessional adjectives"},
display = "possessional",
glossary = true,
pos_categories = "possessional adjectives",
}
labels["possessive pronoun"] = {
display = "possessive",
pos_categories = "possessive pronouns",
}
labels["postpositive"] = {
glossary = true,
}
labels["predicative"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#predicative|predicative]]",
}
labels["predicatively"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#predicative|predicatively]]",
}
labels["privative"] = {
pos_categories = "privative verbs",
}
labels["procedure word"] = {
display = "[[procedure word]]",
}
labels["productive"] = {
display = "[[productive]]",
}
-- TODO: This label is probably inappropriate for many languages
labels["pronominal"] = {
display = "takes a [[Phụ lục:Từ điển thuật ngữ#reflexive|reflexive pronoun]]",
}
labels["pro-verb"] = {
Wikipedia = true,
}
labels["reciprocal"] = {
glossary = true,
pos_categories = "reciprocal verbs",
}
labels["reflexive"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#reflexive|phản thân]]",
glossary = true,
pos_categories = "Động từ phản thân",
}
labels["reflexive pronoun"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#reflexive|phản thân]]",
pos_categories = "Đại từ phản thân",
}
labels["relational"] = {
aliases = {"tính từ quan hệ"},
display = "[[Phụ lục:Từ điển thuật ngữ#tính từ quan hệ|tính từ quan hệ]]",
pos_categories = "Tính từ quan hệ",
}
labels["repetitive"] = {
pos_categories = "repetitive verbs",
}
labels["reversative"] = {
pos_categories = "reversative verbs",
}
labels["rhetorical question"] = {
glossary = true,
pos_categories = "rhetorical questions",
}
labels["saturative"] = {
aliases = {"sative"},
pos_categories = "saturative verbs",
}
labels["semelfactive"] = {
glossary = true,
pos_categories = "semelfactive verbs",
}
labels["sentence adverb"] = {
glossary = true,
pos_categories = "sentence adverbs",
}
labels["set phrase"] = {
display = "[[set phrase]]",
}
labels["tỷ dụ"] = {
aliases = {"simile", "tỉ dụ"},
glossary = true,
pos_categories = "Tỷ dụ",
}
labels["singular only"] = {
aliases = {"singulare tantum", "no plural"},
display = "singular only",
pos_categories = "singularia tantum",
}
labels["snowclone"] = {
glossary = true,
pos_categories = "snowclones",
}
labels["stative"] = {
aliases = {"stative verb", "động từ tĩnh"},
display = "[[w:Động từ tĩnh|động từ tĩnh]]",
pos_categories = "Động từ tĩnh",
}
labels["strictly"] = {
aliases = {"strict", "narrowly", "narrow"},
glossary = true,
}
labels["substantive"] = {
glossary = true,
track = true,
}
labels["terminative"] = {
pos_categories = "terminative verbs",
}
labels["transitive"] = {
aliases = {"ngoại động từ", "ngoại đt"},
display = "ngoại động từ",
glossary = "ngoại động từ",
pos_categories = "Ngoại động từ",
}
labels["reduplications"] = {
aliases = {"từ láy", "láy"},
display = "từ láy",
glossary = "Từ láy",
pos_categories = "Từ láy",
}
labels["unaccusative"] = {
Wikipedia = "Unaccusative verb",
}
labels["uncountable"] = {
aliases = {"không đếm được"},
display = "không đếm được",
glossary = "không đếm được",
pos_categories = "Danh từ không đếm được",
}
labels["unergative"] = {
Wikipedia = "Unergative verb",
}
labels["usually plural"] = {
aliases = {"usually in the plural", "usually in plural"},
display = "usually in the [[Phụ lục:Từ điển thuật ngữ#plural|plural]]",
deprecated = true,
}
-- Usage labels
labels["4chan"] = {
display = "[[w:4chan|4chan]]",
pos_categories = "4chan slang",
}
labels["ACG"] = {
display = "[[ACG]]",
-- see also "fandom slang"
pos_categories = "fandom slang",
}
labels["endearing"] = {
aliases = {"affectionate"},
display = "[[endearing]]",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "endearing terms",
}
labels["pre-classical"] = {
aliases = {"Pre-classical", "pre-Classical", "Pre-Classical", "Preclassical", "preclassical", "ante-classical", "Ante-classical", "ante-Classical", "Ante-Classical", "Anteclassical", "anteclassical"},
display = "pre-Classical",
regional_categories = true,
}
labels["archaic"] = {
aliases = {"antiquated", "cổ xưa"},
display = "cổ xưa",
glossary = "cổ xưa",
sense_categories = {"cổ xưa"},
}
labels["Australian slang"] = {
regional_categories = "Australian",
plain_categories = true,
}
labels["avoidance"] = {
glossary = true,
}
labels["back slang"] = {
aliases = {"backslang", "back-slang"},
display = "[[Phụ lục:Từ điển thuật ngữ#backslang|back slang]]",
pos_categories = true,
}
labels["Bargoens"] = {
Wikipedia = true,
plain_categories = true,
}
labels["Braille"] = {
Wikipedia = true,
}
labels["British slang"] = {
aliases = {"UK slang"},
plain_categories = true,
}
labels["Cambridge University slang"] = {
aliases = {"University of Cambridge slang", "Cantab slang"},
display = "[[w:University of Cambridge|Cambridge University]] [[slang]]",
topical_categories = "Universities",
plain_categories = true,
}
labels["cant"] = {
aliases = {"argot", "cryptolect"},
display = "[[cant]]",
pos_categories = true,
}
labels["capitalized"] = {
display = "[[capitalisation|capitalized]]",
}
labels["Castilianism"] = {
aliases = {"Hispanicism"},
display = "[[Castilianism]]",
}
labels["childish"] = {
aliases = {"baby talk", "child language", "infantile", "ngôn ngữ trẻ con", "ngôn ngữ trẻ em", "ngôn ngữ nhà trường"},
display = "ngôn ngữ [[trẻ con]]",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "Ngôn ngữ trẻ con",
}
labels["chu Nom"] = {
display = "[[Vietnamese]] [[chữ Nôm]]",
plain_categories = "Mục từ chữ Nôm",
}
labels["Classic 1811 Dictionary of the i Tongue"] = {
aliases = {"1811"},
display = "[[Phụ lục:Từ điển thuật ngữ#archaic|archaic]], [[Phụ lục:Từ điển thuật ngữ#slang|slang]]",
plain_categories = "Classic 1811 Dictionary of the Vulgar Tongue",
}
labels["Cockney rhyming slang"] = {
aliases = {"từ lóng có vần điệu của người Luân Đôn", "tiếng lóng có vần điệu của người Luân Đôn"},
display = "[[Cockney rhyming slang|từ lóng có vần điệu của người Luân Đôn]]",
plain_categories = { "Từ lóng có vần điệu của người Luân Đôn" },
}
labels["colloquial"] = {
aliases = {"colloquially", "khẩu ngữ", "thông tục", "từ thông tục"},
display = "thông tục",
glossary = "thông tục",
pos_categories = "Từ thông tục",
}
-- FIXME! The following two are apparently for Persian but probably don't belong in this file.
labels["colloquial-um"] = {
glossary = "colloquial",
pos_categories = "colloquialisms containing sequence um",
}
labels["colloquial-un"] = {
glossary = "colloquial",
pos_categories = "colloquialisms containing sequence un",
}
labels["corporate jargon"] = {
aliases = {"business jargon", "corporatese", "businessese", "corporate speak", "business speak"},
display = "[[corporate]] [[jargon]]",
pos_categories = true,
}
labels["costermongers"] = {
aliases = {"coster", "costers", "costermonger", "costermongers back slang", "costermongers' back slang"},
display = "[[Appendix:Costermongers' back slang|costermongers]]",
plain_categories = "Costermongers' back slang",
}
labels["criminal slang"] = {
aliases = {"thieves' cant", "Thieves' Cant", "thieves cant", "thieves'", "thieves", "thieves’ cant"}, -- Thieves' Cant is English-only, so defined in the English submodule; if other languages try to use it, it's just criminal slang
display = "[[criminal]] [[slang]]",
topical_categories = "Crime",
pos_categories = true,
}
labels["dated"] = {
aliases = {"lỗi thời", "cũ", "từ cũ"},
display = "lỗi thời",
glossary = "lỗi thời",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "Từ lỗi thời",
}
labels["dated form"] = {
glossary = "dated",
pos_categories = "dated forms",
}
-- combine with previous?
labels["dated sense"] = {
glossary = "dated",
sense_categories = "dated",
}
labels["derogatory"] = {
aliases = {"pejorative", "derogative", "disparaging", "nghĩa xấu", "xấu"},
display = "nghĩa [[xấu]]",
pos_categories = "Từ xấu",
}
labels["dialect"] = {-- separated from "dialectal" so e.g. "obsolete|outside|the|_|dialect|of..." displays right
aliases = {"địa phương", "phương ngôn", "phương ngữ", "từ địa phương"},
display = "[[Phụ lục:Từ điển thuật ngữ#phương ngữ|phương ngữ]]",
pos_categories = {"Từ phương ngữ"},
}
labels["dialectal"] = {
aliases = {"thuộc phương ngữ"},
display = "thuộc phương ngữ",
glossary = "phương ngữ",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "Từ phương ngữ",
}
labels["dialects"] = {-- separated from "dialectal" so e.g. "obsolete|outside|dialects" displays right
display = "[[Phụ lục:Từ điển thuật ngữ#dialectal|dialects]]",
pos_categories = {"dialectal terms"},
}
labels["dismissal"] = {
display = "[[dismissal]]",
pos_categories = "dismissals",
}
labels["drag slang"] = {
aliases = {"Drag Race slang"},
display = "[[drag]] [[slang]]",
}
labels["solemn"] = {
glossary = true,
pos_categories = "solemn terms",
}
labels["ecclesiastical"] = {
pos_categories = "ecclesiastical terms",
}
labels["ethnic slur"] = {
aliases = {"racial slur", "xúc phạm dân tộc", "xúc phạm chủng tộc"},
display = "[[xúc phạm]] [[dân tộc]]",
pos_categories = "Từ xúc phạm dân tộc",
}
labels["euphemistic"] = {
aliases = {"euphemism", "uyển ngữ", "nói giảm nói tránh"},
display = "uyển ngữ",
glossary = "uyển ngữ",
pos_categories = "Uyển ngữ",
}
labels["eye dialect"] = {
display = "[[eye dialect]]",
pos_categories = true,
}
labels["familiar"] = {
aliases = {"thân mật"},
display = "thân mật",
glossary = "thân mật",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "Từ ngữ thân mật",
}
labels["fandom slang"] = {
aliases = {"fandom", "lóng fandom", "từ lóng fandom", "tiếng lóng fandom"},
display = "{{glossary|từ lóng}} [[fandom]]",
pos_categories = "Từ lóng fandom",
}
labels["figurative"] = {
aliases = {"ẩn dụ", "bóng", "figuratively", "metaphorical", "metaphorically", "metaphoric", "metaphor", "nghĩa bóng"},
display = "nghĩa bóng",
glossary = "nghĩa bóng",
}
labels["folk poetic"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = {"folk poetic terms", "poetic terms"},
}
labels["formal"] = {
aliases = {"trang trọng", "kiểu cách"},
display = "trang trọng",
glossary = "trang trọng",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "Từ trang trọng",
}
labels["gay slang"] = {
display = "{{glossary|từ lóng}} người [[đồng tính]]",
pos_categories = "Từ lóng người đồng tính",
}
labels["gender-neutral"] = {
glossary = "epicene",
pos_categories = "gender-neutral terms",
}
labels["genericized trademark"] = {
aliases = {"generic trademark", "proprietary eponym"},
display = "[[genericized trademark]]",
pos_categories = "genericized trademarks",
}
labels["hapax legomenon"] = {
aliases = {"hapax", "từ độc hiện"},
display = "từ độc hiện",
glossary = "từ độc hiện",
pos_categories = "Từ độc hiện",
}
labels["higher register"] = {
aliases = {"high register", "elevated register", "elevated"},
glossary = "higher register",
pos_categories = "higher register terms",
}
labels["historical"] = {
aliases = {"historic", "thuộc lịch sử", "từ lịch sử", "từ ngữ lịch sử"},
display = "từ ngữ lịch sử",
glossary = "từ ngữ lịch sử",
pos_categories = "Từ ngữ lịch sử",
}
labels["non-native speakers"] = {-- language-agnostic version
aliases = {"NNS"},
display = "[[non-native speaker]]s", -- so preceded by "used by", "error by children and", etc? or reword?
regional_categories = {"Non-native speakers'"},
}
labels["non-native speakers' English"] = {
aliases = {"NNES", "NNSE"},
display = "[[non-native speaker]]s' English",
regional_categories = "Non-native speakers'",
}
-- used exclusively by languages that use the “Jpan” script code
labels["historical hiragana"] = {
pos_categories = true,
}
-- used exclusively by languages that use the “Jpan” script code
labels["historical katakana"] = {
pos_categories = true,
}
-- applies to Japanese and Korean, etc., please do not confuse with "polite"
labels["honorific"] = {
aliases = {"kính ngữ"},
display = "kính ngữ",
Wikipedia = "Kính ngữ (ngôn ngữ học)",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "Kính ngữ",
}
-- for Ancient Greek
labels["Homeric epithet"] = {
display = "[[Homeric Greek|Homeric]] [[w:Homeric epithets|epithet]]",
omit_postComma = true,
plain_categories = "Epic Greek",
}
-- applies to Japanese and Korean, etc.
labels["humble"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
display = "[[humble]]",
pos_categories = "humble terms",
}
-- for Akkadian
labels["in hendiadys"] = {
aliases = {"hendiadys"},
pos_categories = "hendiadys",
}
labels["humorous"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp; NB and cf a similar "jocular" label further up on this page
aliases = {"humorously", "jocular", "hài hước"},
display = "[[hài hước]]",
pos_categories = "Từ hài hước",
}
labels["hyperbolic"] = {
aliases = {"hyperbole"},
display = "[[Phụ lục:Từ điển thuật ngữ#hyperbolic|hyperbolic]]",
pos_categories = "hyperboles",
}
labels["hypercorrect"] = {
aliases = {"siêu chỉnh"},
display = "[[Phụ lục:Từ điển thuật ngữ#siêu chỉnh|siêu chỉnh]]",
pos_categories = "Siêu chỉnh",
}
labels["hyperforeign"] = {
glossary = true,
pos_categories = "hyperforeign terms",
}
labels["imperial"] = {
aliases = {"emperor", "empress"},
pos_categories = "royal terms",
}
labels["incel slang"] = {
display = "[[incel]] [[slang]]",
pos_categories = true,
}
labels["informal"] = {
aliases = {"informally", "không trang trọng"},
display = "không trang trọng",
glossary = "không trang trọng",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "Từ không trang trọng",
}
labels["Internet slang"] = {
aliases = {"internet slang", "lóng Internet", "lóng internet", "ngôn ngữ mạng", "từ lóng Internet", "từ lóng internet", "tiếng lóng Internet", "tiếng lóng internet"},
display = "[[từ lóng]] [[Internet]]",
pos_categories = "Từ lóng Internet",
}
labels["IRC"] = {
display = "[[IRC]]",
pos_categories = "internet slang",
}
labels["ironic"] = {
aliases = {"biếm dụ"},
display = "[[biếm dụ]]",
}
-- Not the same as "journalism", which maps to a topical category (e.g. [[:Category:en:Journalism]], instead of [[:Category:English journalistic terms]]).
labels["journalistic"] = {
aliases = {"journalese"},
display = "[[journalistic]]",
pos_categories = "journalistic terms",
}
labels["leet"] = {
aliases = {"leetspeak"},
display = "[[leetspeak]]",
pos_categories = true,
}
labels["từ lóng LGBT"] = {
aliases = {"LGBTQ slang","LGBT slang"},
display = "từ lóng [[LGBT]]",
pos_categories = "Từ lóng LGBT",
}
labels["literal"] = {
display = "nghĩa đen",
glossary = "đen",
}
labels["literally"] = {
aliases = {"nghĩa đen", "đen"},
display = "nghĩa đen",
glossary = "đen",
}
labels["literary"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp
aliases = {"bookish", "văn chương"},
display = "văn chương",
glossary = "văn chương",
pos_categories = "Ngôn ngữ văn chương",
}
labels["loosely"] = {
glossary = true,
}
labels["Lubunyaca"] = {
display = "[[Lubunyaca]]",
pos_categories = true,
}
labels["medical slang"] = {
display = "[[medical]] [[slang]]",
pos_categories = true,
}
-- for Awetí, Karajá, etc., where men and women use different words
labels["men's speech"] = {
aliases = {"male speech"},
glossary = "men's speech",
pos_categories = "men's speech terms",
}
labels["metonymically"] = {
aliases = {"metonymic", "metonymy", "metonym", "hoán dụ"},
display = "hoán dụ",
glossary = "hoán dụ",
pos_categories = "Từ hoán dụ",
}
labels["military slang"] = {
aliases = {"lóng quân sự", "từ lóng quân sự", "tiếng lóng quân sự"},
display = "[[từ lóng]] [[quân sự]]",
pos_categories = "Từ lóng quân sự",
}
labels["minced oath"] = {
aliases = {"từ chửi thề ít gây khó chịu"},
display = "[[minced oath|từ chửi thề ít gây khó chịu]]",
pos_categories = "Từ chửi thề ít gây khó chịu",
}
labels["nativising coinage"] = {
display = "[[w:Linguistic purism in Korean|nativising coinage]]",
pos_categories = "nativising coinages",
}
labels["naval slang"] = {
aliases = {"navy slang"},
display = "[[naval]] [[slang]]",
pos_categories = true,
}
labels["neologism"] = {
aliases = {"neologistic", "mới", "từ mới", "từ ngữ mới"},
display = "từ mới",
glossary = "từ mới",
pos_categories = "Từ mới xuất hiện",
}
labels["neopronoun"] = {
display = "[[neopronoun]]",
-- pos_categories = {"neopronouns"},
}
labels["no longer productive"] = {
aliases = {"không còn phát sinh từ mới"},
display = "không còn [[Phụ lục:Từ điển thuật ngữ#phát sinh từ mới|phát sinh từ mới]]",
}
labels["nonce word"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
aliases = {"nonce"},
display = "[[Phụ lục:Từ điển thuật ngữ#nonce|từ tạo ra cho trường hợp cụ thể]]",
pos_categories = "Từ tạo ra cho trường hợp cụ thể",
}
labels["nonstandard"] = {
aliases = {"non-standard", "không tiêu chuẩn"},
display = "không tiêu chuẩn",
glossary = " không tiêu chuẩn",
pos_categories = "Từ không tiêu chuẩn",
}
labels["nonstandard form"] = {
glossary = "nonstandard",
pos_categories = "nonstandard forms",
}
labels["obsolete"] = {
aliases = {"không còn dùng"},
display = "không còn dùng",
glossary = "không còn dùng",
sense_categories = "không còn dùng",
}
labels["obsolete term"] = {
aliases = {"thuật ngữ không còn dùng", "từ không còn dùng", "từ ngữ không còn dùng"},
display = "thuật ngữ không còn dùng",
glossary = "không còn dùng",
-- combine with previous two, q.v.
pos_categories = "Từ không còn dùng",
}
labels["offensive"] = {
aliases = {"xúc phạm", "từ xúc phạm"},
display = "[[xúc phạm]]",
-- should be "terms with X senses", leaving "X terms" to the term-context temp
pos_categories = "Từ xúc phạm",
}
labels["officialese"] = {
aliases = {"bureaucratic"},
display = "[[officialese]]",
pos_categories = "officialese terms",
}
labels["Oxbridge slang"] = {
display = "[[w:Oxbridge|Oxbridge]] [[slang]]",
topical_categories = "Universities",
plain_categories = {"Cambridge University slang", "Oxford University slang"},
}
labels["Oxford University slang"] = {
aliases = {"University of Oxford slang", "Oxon slang"},
display = "[[w:University of Oxford|Oxford University]] [[slang]]",
topical_categories = "Universities",
plain_categories = true,
}
labels["poetic"] = {
-- should be "terms with X senses", leaving "X terms" to the term-context temp
aliases = {"thơ ca", "thuộc thơ ca"},
display = "[[thơ ca]]",
pos_categories = "Từ thơ ca",
}
labels["polite"] = {
aliases = {"lịch sự"},
display = "lịch sự",
pos_categories = "Từ lịch sự",
}
labels["post-classical"] = {
aliases = {"Post-classical", "post-Classical", "Post-Classical", "Postclassical", "postclassical"},
display = "post-Classical",
regional_categories = true,
}
labels["prison slang"] = {
display = "[[prison]] [[slang]]",
pos_categories = true,
}
labels["proscribed"] = {
aliases = {"không nên dùng"},
glossary = "không nên dùng",
pos_categories = "Từ không nên dùng",
}
labels["puristic"] = {
aliases = {"purism"},
Wikipedia = "Linguistic purism",
pos_categories = "puristic terms",
}
labels["radio slang"] = {
display = "[[radio]] [[slang]]",
pos_categories = true,
}
labels["Reddit slang"] = {
display = "[[Reddit]] [[slang]]",
pos_categories = true,
}
labels["rare"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#hiếm|hiếm]]",
aliases = {"hiếm", "hiếm dùng", "ít dùng", "nghĩa hiếm", "rare sense"},
sense_categories = { "hiếm" },
}
labels["rare term"] = {
display = "rare",
-- see comments about "obsolete"
pos_categories = "rare terms",
}
-- cf Cockney rhyming slang
labels["rhyming slang"] = {
display = "[[rhyming slang]]",
pos_categories = true,
}
labels["religious slur"] = {
aliases = {"sectarian slur"},
display = "[[religious]] [[slur]]",
pos_categories = "religious slurs",
}
labels["retronym"] = {
glossary = true,
pos_categories = "retronyms",
}
labels["reverential"] = {
pos_categories = "reverential terms",
}
labels["royal"] = {
aliases = {"regal"},
pos_categories = "royal terms",
}
labels["rustic"] = {
glossary = true,
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
aliases = {"rural"},
pos_categories = "rustic terms",
}
labels["sarcastic"] = {
aliases = {"mỉa mai"},
display = "[[mỉa mai]]",
pos_categories = "Từ mỉa mai",
}
labels["school slang"] = {
aliases = {"public school slang"},
display = "[[school]] [[slang]]",
pos_categories = true,
}
labels["self-deprecatory"] = {
aliases = {"self-deprecating"},
display = "[[self-deprecatory]]",
-- should be "terms with X senses", leaving "X terms" to the term-context temp?
pos_categories = "self-deprecatory terms",
}
-- Swahili Sheng cant / argot
labels["Sheng"] = {
Wikipedia = "Sheng slang",
plain_categories = true,
}
labels["siglum"] = {
aliases = {"sigla"},
glossary = true,
pos_categories = "sigla",
}
labels["slang"] = {
display = "{{glossary|từ lóng}}",
aliases = {"lóng", "tiếng lóng", "từ lóng"},
pos_categories = "Từ lóng",
}
labels["university slang"] = {
aliases = {"college slang", "student slang"},
display = "[[university]] [[slang]]",
topical_categories = "Universities",
pos_categories = "student slang",
}
labels["stenoscript"] = {
display = "[[Stenoscript|stenoscript]]",
pos_categories = "stenoscript abbreviations",
}
labels["swear word"] = {
aliases = {"profanity", "expletive"},
pos_categories = "swear words",
}
labels["syncopated"] = {
aliases = {"syncope", "syncopic", "syncopation"},
glossary = true,
pos_categories = "syncopic forms",
}
labels["synecdochically"] = {
aliases = {"synecdochic", "synecdochical", "synecdoche"},
glossary = true,
pos_categories = "synecdoches",
}
labels["technical"] = {
display = "[[technical]]",
pos_categories = "technical terms",
}
labels["telic"] = {
glossary = true,
}
labels["text messaging"] = {
aliases = {"texting", "nhắn tin", "nhắn tin văn bản"},
display = "[[nhắn tin]]",
pos_categories = "Từ lóng nhắn tin",
}
labels["tone indicator"] = {
display = "[[tone indicator]]",
pos_categories = "tone indicators",
}
labels["trademark"] = {
display = "[[trademark]]",
pos_categories = "trademarks",
}
labels["transferred sense"] = {
glossary = true,
pos_categories = "terms with transferred senses",
}
labels["transferred senses"] = {
display = "[[transferred sense#English|transferred senses]]",
pos_categories = "terms with transferred senses",
}
labels["transgender slang"] = {
display = "[[transgender]] [[slang]]",
pos_categories = true,
}
labels["Twitch-speak"] = {
display = "[[Twitch-speak]]",
pos_categories = true,
}
labels["uds."] = {
display = "[[Appendix:Spanish pronouns#Ustedes and vosotros|used formally in Spain]]",
}
labels["uncommon"] = {
aliases = {"không phổ biến"},
display = "[[Phụ lục:Từ điển thuật ngữ#không phổ biến|không phổ biến]]",
sense_categories = {"không phổ biến"},
}
labels["verlan"] = {
display = "[[Phụ lục:Từ điển thuật ngữ#verlan|verlan]]",
plain_categories = true,
}
labels["very rare"] = {
display = "very [[Phụ lục:Từ điển thuật ngữ#rare|rare]]",
sense_categories = "rare",
}
labels["vulgar"] = {
display = "thô tục",
aliases = {"coarse", "obscene", "profane", "thô tục", "tục", "tục tĩu", "từ tục"},
glossary = "thô tục",
pos_categories = "Từ thô tục",
}
labels["vesre"] = {
Wikipedia = true,
plain_categories = true,
}
labels["youth slang"] = {
display = "[[youth]] [[slang]]",
pos_categories = "slang",
}
labels["2channel slang"]={
aliases = {"2ch slang"},
display ="[[w:2channel|2channel]] [[slang]]",
pos_categories = {"internet slang" , "2channel slang"},
}
-- for Awetí, Karajá, etc., where men & women use different words
labels["women's speech"] = {
aliases = {"female speech"},
glossary = "women's speech",
pos_categories = "women's speech terms",
}
-- terms applying to Old Norse skaldic poetry
labels["kenning"] = {
aliases = {"Kenning"},
Wikipedia = "Kenning",
pos_categories = "kennings",
}
labels["heiti"] = {
aliases = {"Heiti"},
Wikipedia = "Heiti",
pos_categories = "heiti",
}
-- Mục nhập từ [[Bản mẫu:context/data]]
labels["hoặc"] = {
display = "hoặc",
}
labels["hơi"] = {
display = "hơi",
}
labels["ngày nay"] = {
display = "ngày nay",
}
labels["thường"] = {
display = "thường",
}
labels["trừ"] = {
display = "trừ",
}
labels["tại"] = {
display = "tại",
}
labels["đôi khi"] = {
display = "đôi khi",
}
labels["Cao Đài"] = {
display = "Cao Đài",
plain_categories = "Cao Đài",
}
labels["Chính Thống giáo"] = {
display = "Chính Thống giáo",
plain_categories = "Chính Thống giáo",
}
labels["biệt ngữ"] = {
display = "biệt ngữ",
plain_categories = "Biệt ngữ",
}
labels["bóng"] = {
display = "nghĩa bóng",
plain_categories = "Từ có nghĩa bóng",
}
labels["Từ cũ"] = labels["dated"]
labels["cơ khí"] = {
display = "cơ khí",
plain_categories = "Kỹ thuật cơ khí",
}
labels["cổ"] = {
display = "cổ",
plain_categories = "Từ cổ",
}
labels["hiếm"] = {
display = "hiếm",
plain_categories = "Từ hiếm",
}
labels["hài hước"] = {
display = "hài hước",
plain_categories = "Từ hài hước",
}
labels["không dịch"] = {
display = "không dịch",
plain_categories = "Từ không dịch qua tiếng Việt",
}
labels["không nên dùng"] = {
display = "không nên dùng",
plain_categories = "Từ không nên dùng",
}
labels["Khẩu ngữ"] = labels["informal"]
labels["kết hợp hạn chế"] = {
display = "kết hợp hạn chế",
plain_categories = "Từ kết hợp hạn chế",
}
labels["nhãn khoa"] = {
display = "nhãn khoa",
plain_categories = "Nhãn khoa",
}
labels["rộng"] = {
display = "nghĩa rộng",
plain_categories = "Từ có nghĩa rộng",
}
labels["sân khấu"] = {
display = "sân khấu",
plain_categories = "Sân khấu",
}
labels["số nhiều"] = {
display = "số nhiều",
}
labels["số ít"] = {
display = "số ít",
}
labels["thần thoại"] = {
display = "thần thoại",
plain_categories = "Thần thoại",
}
labels["trang trọng"] = {
display = "trang trọng",
plain_categories = "Từ trang trọng",
}
labels["trại"] = {
display = "nói trại",
plain_categories = "Từ nói trại",
}
labels["tục tĩu"] = {
display = "tục tĩu",
plain_categories = "Từ tục tĩu",
}
labels["văn học"] = {
display = "văn học",
plain_categories = "Văn học",
}
labels["Văn chương"] = labels["văn học"]
labels["văn chương"] = labels["văn học"]
labels["xấu"] = {
display = "xấu",
plain_categories = "Từ xấu",
}
labels["Úc"] = {
display = "[[Hình:Flag of Australia.svg|22x20px|border|link=|Úc]] Úc",
plain_categories = "Tiếng Anh Úc",
}
labels["Ít dùng"] = labels["rare"]
labels["đen"] = {
display = "nghĩa đen",
plain_categories = "Từ có nghĩa đen",
}
labels["Phương ngữ"] = labels["dialect"]
labels["định ngữ"] = {
display = "định ngữ",
plain_categories = "Danh từ định ngữ",
}
labels["Andalucía"] = {
display = "Andalucía",
}
labels["Anglo-Norman"] = {
display = "Anglo-Norman",
}
labels["animal"] = {
display = "động vật",
plain_categories = "Động vật",
}
labels["exercise"] = {
display = "bài tập",
}
labels["eye dialect"] = {
display = "phương ngữ mắt",
}
labels["family"] = {
display = "gia đình",
}
return require("Module:labels").finalize_data(labels)
iqwt3c1dhunawtig94zo98nwalb9ps1
Mô đun:labels/data/topical
828
271311
2573812
2565380
2026-10-27T06:48:02Z
Hiyuune
50834
2573812
Scribunto
text/plain
local labels = {}
local function alias(a, b) for _, v in ipairs(b) do labels[v] = a end end -- allows aliases to be entered as a list
-- This file is split into two sections: topical labels and labels for set-type categories.
-- Each section is sorted alphabetically.
-- Topical labels
labels["Abrahamism"] = {
display = "[[Abrahamism#Noun|Abrahamism]]",
topical_categories = {"Abrahamism"},
}
labels["accounting"] = {
aliases = {"kế toán"},
display = "[[kế toán]]",
topical_categories = {"Kế toán"},
}
labels["acoustics"] = {
display = "[[âm học]]",
topical_categories = {"Âm học"},
}
labels["acting"] = {
display = "[[diễn xuất]]",
topical_categories = {"Diễn xuất"},
}
labels["advertising"] = {
display = "[[quảng cáo]]",
topical_categories = {"Quảng cáo"},
}
labels["aeronautics"] = {
display = "[[hàng không]] [[học]]",
topical_categories = {"Hàng không học"},
}
labels["aerospace"] = {
display = "[[hàng không]] [[vũ trụ]]",
topical_categories = {"Hàng không vũ trụ"},
}
labels["affection"] = {
display = "[[tình cảm]]",
topical_categories = {"Tình cảm"},
}
labels["agriculture"] = {
aliases = {"farming", "nông", "nông nghiệp"},
display = "[[nông nghiệp]]",
topical_categories = "Nông nghiệp",
}
labels["Ahmadiyya"] = {
display = "[[Ahmadiyya]]",
topical_categories = {"Ahmadiyya"},
}
labels["Ahmadiyyat"] = "Ahmadiyya"
labels["Ahmadi"] = "Ahmadiyya"
labels["aircraft"] = {
display = "[[khí]] [[cụ]] [[bay]]",
topical_categories = {"Khí cụ bay"},
}
labels["alchemy"] = {
display = "[[giả]] [[kim]] [[thuật]]",
topical_categories = {"Giả kim thuật"},
}
labels["alcoholic beverages"] = {
display = "[[thức uống]] [[có cồn]]",
topical_categories = {"Thức uống có cồn"},
}
labels["alcohol"] = "alcoholic beverages"
labels["alcoholism"] = {
display = "[[lạm dụng]] [[rượu bia]]",
topical_categories = {"Lạm dụng rượu bia"},
}
labels["algebra"] = {
aliases = {"đại số"},
display = "[[đại số]]",
topical_categories = "Đại số",
}
labels["algebraic geometry"] = {
display = "[[hình học]] [[đại số]]",
topical_categories = {"Hình học đại số"},
}
labels["algebraic topology"] = {
display = "[[tô]] [[pô]] [[đại số]]",
topical_categories = {"Tô pô đại số"},
}
labels["alt-right"] = {
display = "[[alt-right]]",
topical_categories = {"Alt-right"},
}
alias("alt-right", {"Alt-right", "altright", "Altright"})
labels["alternative medicine"] = {
display = "[[y học]] [[thay thế]]",
topical_categories = {"Y học thay thế"},
}
labels["amateur radio"] = {
display = "[[phát thanh]] [[nghiệp dư]]",
topical_categories = {"Phát thanh nghiệp dư"},
}
labels["ham radio"] = "amateur radio"
labels["American football"] = {
display = "[[bóng]] [[bầu dục]] [[Mỹ]]",
topical_categories = {"Bóng bầu dục Mỹ"},
}
labels["analytic geometry"] = {
display = "[[hình học]] [[giải tích]]",
topical_categories = {"Hình học"},
}
labels["analytical chemistry"] = {
display = "[[hóa]] [[phân tích]]",
topical_categories = {"Hóa phân tích"},
}
labels["anarchism"] = {
display = "[[chủ nghĩa]] [[vô]] [[trị]]",
topical_categories = {"Chủ nghĩa vô trị"},
}
labels["anatomy"] = {
aliases = {"giải phẫu", "giải phẫu học"},
display = "[[giải phẫu học]]",
topical_categories = {"Giải phẫu học"},
}
labels["Ancient Greece"] = {
display = "[[Hy Lạp]] [[cổ đại]]",
topical_categories = {"Hy Lạp cổ đại"},
}
labels["Ancient Rome"] = {
display = "[[La Mã]] [[cổ đại]]",
topical_categories = {"La Mã cổ đại"},
}
labels["Anglicanism"] = {
display = "[[Anh]] [[giáo]]",
topical_categories = {"Anh giáo"},
}
alias("Anglicanism", {"Anglican"})
labels["animation"] = {
display = "[[hoạt hình]]",
topical_categories = {"Hoạt hình"},
}
labels["anime"] = {
display = "[[anime]]",
topical_categories = {"Japanese fiction"},
}
labels["anthropology"] = {
aliases = {"nhân loại học"},
display = "[[nhân loại học]]",
topical_categories = "Nhân loại học",
}
labels["applied mathematics"] = {
aliases = {"toán học ứng dụng"},
display = "[[toán học]] [[ứng dụng]]",
topical_categories = "Toán học ứng dụng",
}
labels["arachnology"] = {
display = "[[arachnology]]",
topical_categories = {"Arachnology"},
}
labels["Arabian god"] = {
display = "[[Arabian]] [[mythology]]",
topical_categories = {"Arabian deities"},
}
labels["archaeology"] = {
display = "[[khảo cổ học]]",
topical_categories = {"Khảo cổ học"},
}
labels["archery"] = {
display = "[[bắn cung]]",
topical_categories = {"Bắn cung"},
}
labels["architecture"] = {
aliases = {"kiến trúc"},
display = "[[kiến trúc]]",
topical_categories = {"Kiến trúc"},
}
labels["arithmetic"] = {
display = "[[số học]]",
topical_categories = {"Số học"},
}
labels["Armenian mythology"] = {
display = "[[Armenian]] [[mythology]]",
topical_categories = {"Armenian mythology"},
}
labels["art"] = {
display = "[[nghệ thuật]]",
topical_categories = {"Nghệ thuật"},
}
labels["arts"] = "art"
labels["artificial intelligence"] = {
display = "[[trí tuệ nhân tạo]]",
topical_categories = {"Trí tuệ nhân tạo"},
}
labels["AI"] = "artificial intelligence"
labels["Arthurian legend"] = {
display = "[[w:Arthurian legend|Arthurian legend]]",
topical_categories = {"Arthurian mythology"},
}
labels["Arthurian mythology"] = "Arthurian legend"
labels["ASMR"] = {
aliases = {"asmr","autonomous sensory meridian response","phản ứng kích thích cảm giác tự động"},
display = "[[:w:vi:ASMR|ASMR]]",
topical_categories = {"ASMR"},
}
labels["astrology"] = {
display = "[[chiêm tinh học]]",
topical_categories = {"Chiêm tinh học"},
}
labels["horoscope"] = "astrology"
labels["zodiac"] = "astrology"
labels["astronautics"] = {
display = "[[astronautics]]",
topical_categories = {"Astronautics"},
}
labels["rocketry"] = "astronautics"
labels["astronomy"] = {
display = "[[thiên văn học]]",
topical_categories = {"Thiên văn học"},
}
labels["thiên văn"] = "astronomy"
labels["thiên văn học"] = "astronomy"
labels["astrophysics"] = {
display = "[[vật lý thiên văn]]",
topical_categories = {"Vật lý thiên văn"},
}
labels["Asturian mythology"] = {
display = "[[Asturian]] [[mythology]]",
topical_categories = {"Asturian mythology"},
}
labels["athletics"] = {
display = "[[điền kinh]]",
topical_categories = {"Điền kinh"},
}
labels["điền kinh"] = "athletics"
labels["Australian Aboriginal mythology"] = {
display = "[[w:Australian Aboriginal religion and mythology|Australian Aboriginal mythology]]",
topical_categories = {"Australian Aboriginal mythology"},
}
labels["Australian rules football"] = {
display = "[[Australian rules football]]",
topical_categories = {"Australian rules football"},
}
labels["automotive"] = {
display = "[[ô tô]]",
aliases = {"automotives", "ô tô"},
topical_categories = {"Ô tô"},
}
labels["aviation"] = {
display = "[[hàng không]]",
topical_categories = {"Hàng không"},
}
labels["hàng không"] = "aviation"
alias("aviation", {"air transport"})
labels["backgammon"] = {
display = "[[backgammon]]",
topical_categories = {"Backgammon"},
}
labels["bacteria"] = {
display = "[[bacteriology]]",
topical_categories = {"Bacteria"},
}
labels["bacteriology"] = {
display = "[[bacteriology]]",
topical_categories = {"Bacteriology"},
}
labels["badminton"] = {
aliases = {"cầu lông"},
display = "[[cầu lông]]",
topical_categories = "Cầu lông",
}
labels["baking"] = {
display = "[[baking#Noun|baking]]",
topical_categories = {"Baking"},
}
labels["ball games"] = {
display = "[[trò chơi]] với [[bóng]]",
topical_categories = {"Trò chơi với bóng"},
}
labels["ballet"] = {
display = "[[ballet]]",
topical_categories = {"Ballet"},
}
labels["banking"] = {
display = "[[ngân hàng]]",
topical_categories = {"Ngân hàng"},
}
labels["bóng chày"] = {
display = "[[bóng chày]]",
topical_categories = {"Bóng chày"},
}
labels["basketball"] = {
display = "[[bóng rổ]]",
topical_categories = {"Bóng rổ"},
}
labels["BDSM"] = {
display = "[[BDSM]]",
topical_categories = {"BDSM"},
}
labels["beekeeping"] = {
display = "[[beekeeping]]",
topical_categories = {"Beekeeping"},
}
labels["beer"] = {
display = "[[beer]]",
topical_categories = {"Beer"},
}
labels["betting"] = {
display = "[[gambling#Noun|gambling]]",
topical_categories = {"Betting"},
}
labels["biblical"] = {
display = "[[Kinh Thánh]]",
topical_categories = {"Kinh Thánh"},
}
labels["Bible"] = "biblical"
labels["Biblical"] = "biblical"
labels["Kinh Thánh"] = "biblical"
labels["billiards"] = {
display = "[[billiards]]",
topical_categories = {"Billiards"},
}
labels["bingo"] = {
display = "[[bingo]]",
topical_categories = {"Bingo"},
}
labels["biochemistry"] = {
display = "[[hóa sinh]]",
topical_categories = {"Hóa sinh"},
}
labels["biology"] = {
display = "[[sinh học]]",
topical_categories = {"Sinh học"},
}
labels["sinh"] = "biology"
labels["sinh học"] = "biology"
labels["biotechnology"] = {
display = "[[biotechnology]]",
topical_categories = {"Biotechnology"},
}
labels["birdwatching"] = {
display = "[[birdwatching#Noun|birdwatching]]",
topical_categories = {"Birdwatching"},
}
labels["blogging"] = {
display = "[[blogging#Noun|blogging]]",
topical_categories = {"Internet"},
}
labels["board games"] = {
aliases = {"board game", "trò chơi bàn cờ", "trò chơi với bàn cờ"},
display = "[[trò chơi]] với [[bàn cờ]]",
topical_categories = "Trò chơi với bàn cờ",
}
labels["board sports"] = {
display = "[[boardsport|board sports]]",
topical_categories = {"Board sports"},
}
labels["bodybuilding"] = {
display = "[[bodybuilding#Noun|bodybuilding]]",
topical_categories = {"Bodybuilding"},
}
labels["botany"] = {
display = "[[thực vật học]]",
topical_categories = {"Thực vật học"},
}
labels["thực vật học"] = "botany"
labels["bowling"] = {
display = "[[bowling#Noun|bowling]]",
topical_categories = {"Bowling"},
}
labels["boxing"] = {
aliases = {"đấm bốc", "quyền Anh"},
display = "[[quyền Anh]]",
topical_categories = {"Quyền Anh"},
}
labels["brewing"] = {
display = "[[brewing#Noun|brewing]]",
topical_categories = {"Brewing"},
}
labels["bridge"] = {
display = "[[bridge#English:_game|bridge]]",
topical_categories = {"Bridge"},
}
labels["broadcasting"] = {
aliases = {"phát sóng"},
display = "[[phát sóng]]",
topical_categories = {"Phát sóng"},
}
labels["bryology"] = {
display = "[[rêu học]]",
topical_categories = {"Rêu học"},
}
labels["Buddhism"] = {
display = "[[Phật giáo]]",
topical_categories = {"Phật giáo"},
}
labels["đạo Phật"] = "Buddhism"
labels["Phật giáo"] = "Buddhism"
labels["bullfighting"] = {
display = "[[bullfighting]]",
topical_categories = {"Bullfighting"},
}
labels["business"] = {
aliases = {"professional", "kinh doanh"},
display = "[[kinh doanh]]",
topical_categories = {"Kinh doanh"},
}
labels["Byzantine Empire"] = {
display = "[[Byzantine Empire]]",
topical_categories = {"Byzantine Empire"},
}
labels["calculus"] = {
display = "[[vi tích phân]]",
topical_categories = {"Vi tích phân"},
}
labels["calligraphy"] = {
display = "[[calligraphy]]",
topical_categories = {"Calligraphy"},
}
labels["Camelids"] = {
display = "[[họ]] [[lạc đà|Lạc đà]]",
topical_categories = {"Họ Lạc đà"},
}
labels["Canadian football"] = {
display = "[[Canadian football]]",
topical_categories = {"Canadian football"},
}
labels["canoeing"] = {
display = "[[canoeing#Noun|canoeing]]",
topical_categories = {"Water sports"},
}
labels["capitalism"] = {
display = "[[capitalism]]",
topical_categories = {"Capitalism"},
}
labels["card games"] = {
aliases = {"đánh bài"},
display = "[[trò chơi]] [[bài]]",
topical_categories = {"Trò chơi bài"},
}
labels["cards"] = "card games"
labels["card game"] = "card games"
labels["playing card"] = "card games"
labels["trò chơi bài"] = "card games"
labels["cardiology"] = {
display = "[[bệnh]] [[học]] [[tim]]",
topical_categories = {"Bệnh học tim"},
}
labels["carpentry"] = {
display = "[[carpentry]]",
topical_categories = {"Carpentry"},
}
labels["cartography"] = {
display = "[[cartography]]",
topical_categories = {"Cartography"},
}
labels["cartomancy"] = {
display = "[[cartomancy]]",
topical_categories = {"Cartomancy"},
}
labels["castells"] = {
display = "[[castells]]",
topical_categories = {"Castells"},
}
labels["category theory"] = {
display = "[[category theory]]",
topical_categories = {"Category theory"},
}
labels["Catholicism"] = {
aliases = {"catholicism", "Catholic", "catholic", "Công giáo"},
display = "[[Công giáo]]",
topical_categories = "Công giáo",
}
labels["caving"] = {
display = "[[caving#Noun|caving]]",
topical_categories = {"Caving"},
}
labels["Celtic mythology"] = {
display = "[[Celtic]] [[mythology]]",
topical_categories = {"Celtic mythology"},
}
labels["ceramics"] = {
display = "[[ceramics]]",
topical_categories = {"Ceramics"},
}
labels["cheerleading"] = {
display = "[[cheerleading#Noun|cheerleading]]",
topical_categories = {"Cheerleading"},
}
labels["nguyên tố hóa học"] = {
display = "[[hóa học]]",
topical_categories = {"Nguyên tố hóa học"},
}
labels["chemical engineering"] = {
display = "[[kỹ thuật]] [[hóa học]]",
topical_categories = {"Kỹ thuật hóa học"},
}
labels["chemistry"] = {
aliases = {"hóa", "hóa học", "hoá", "hoá học"},
display = "[[hóa học]]",
topical_categories = "Hóa học",
}
labels["chess"] = {
aliases = {"cờ vua"},
display = "[[cờ vua]]",
topical_categories = "Cờ vua",
}
labels["Church of England"] = {
Wikipedia = "Church of England",
topical_categories = {"Church of England"},
}
alias("Church of England", {"C of E", "CofE"})
labels["Chinese astronomy"] = {
display = "[[thiên văn học]] [[Trung Quốc]]",
topical_categories = {"Thiên văn học Trung Quốc"},
}
labels["Chinese calligraphy"] = {
display = "[[Chinese]] [[calligraphy]]",
topical_categories = {"Calligraphy"},
}
labels["Chinese constellation"] = {
display = "[[Chinese]] [[astronomy]]",
topical_categories = {"Constellations"},
}
labels["Chinese folk religion"] = {
display = "[[Chinese]] [[folk religion]]",
topical_categories = {"Religion"},
}
labels["Chinese linguistics"] = {
display = "[[Chinese]] [[linguistics]]",
topical_categories = {"Linguistics"},
}
labels["Chinese mythology"] = {
aliases = {"thần thoại Trung Hoa", "thần thoại Trung Quốc"},
display = "[[thần thoại]] [[Trung Hoa]]",
topical_categories = "Thần thoại Trung Hoa",
}
labels["Chinese philosophy"] = {
display = "[[Chinese]] [[philosophy]]",
topical_categories = {"Chinese philosophy"},
}
labels["Chinese phonetics"] = {
display = "[[Chinese]] [[phonetics]]",
topical_categories = {"Chinese phonetics"},
}
labels["Chinese religion"] = {
display = "[[Chinese]] [[religion]]",
topical_categories = {"Religion"},
}
labels["Chinese star"] = {
display = "[[Chinese]] [[astronomy]]",
topical_categories = {"Stars"},
}
labels["Christianity"] = {
aliases = {"christianity", "Christian", "christian", "Kitô giáo", "Ki-tô giáo", "Cơ Đốc giáo"},
display = "[[Kitô giáo]]",
topical_categories = {"Kitô giáo"},
}
labels["Church of the East"] = {
display = "[[Church of the East]]",
topical_categories = {"Church of the East"},
}
labels["cinematography"] = {
display = "[[cinematography]]",
topical_categories = {"Cinematography"},
}
labels["filmology"] = "cinematography"
labels["cladistics"] = {
display = "[[cladistics]]",
topical_categories = {"Systematics"},
}
labels["classical mechanics"] = {
display = "[[classical mechanics]]",
topical_categories = {"Classical mechanics"},
}
labels["classical studies"] = {
display = "[[classical studies]]",
topical_categories = {"Classical studies"},
}
labels["climatology"] = {
display = "[[khí hậu học]]",
topical_categories = {"Khí hậu học"},
}
labels["climate change"] = {
display = "[[climate change]]",
topical_categories = {"Climate change"},
}
labels["climbing"] = {
display = "[[climbing#Noun|climbing]]",
topical_categories = {"Climbing"},
}
labels["clinical psychology"] = {
display = "[[clinical]] [[psychology]]",
topical_categories = {"Clinical psychology"},
}
labels["clothing"] = {
aliases = {"trang phục"},
display = "[[trang phục]]",
topical_categories = {"Trang phục"},
}
labels["cloud computing"] = {
display = "[[cloud computing]]",
topical_categories = {"Computing"},
}
labels["collectible card games"] = {
display = "collectible card games",
topical_categories = {"Collectible card games"},
}
labels["trading card games"] = "collectible card games"
labels["color"] = {
display = "[[color]]",
topical_categories = {"Colors"},
}
labels["colour"] = {
display = "[[colour]]",
topical_categories = {"Colors"},
}
labels["combinatorics"] = {
aliases = {"tổ hợp học"},
display = "[[tổ hợp học]]",
topical_categories = {"Tổ hợp học"},
}
labels["comedy"] = {
display = "[[hài kịch]]",
topical_categories = {"Hài kịch"},
}
labels["commercial law"] = {
display = "[[commercial#Adjective|commercial]] [[law]]",
topical_categories = {"Commercial law"},
}
labels["comics"] = {
aliases = {"truyện tranh"},
display = "[[truyện tranh]]",
topical_categories = {"Truyện tranh"},
}
labels["communication"] = {
aliases = {"giao tiếp"},
display = "[[giao tiếp]]",
topical_categories = {"Giao tiếp"},
}
labels["communications"] = "communication"
labels["communism"] = {
aliases = {"Communism", "chủ nghĩa cộng sản"},
display = "[[chủ nghĩa cộng sản]]",
topical_categories = {"Chủ nghĩa cộng sản"},
}
labels["compilation"] = {
display = "[[software]] [[compilation]]",
topical_categories = {"Compilation"},
}
labels["complex analysis"] = {
display = "[[giải tích phức]]",
topical_categories = {"Giải tích phức"},
}
labels["computational linguistics"] = {
display = "[[computational linguistics]]",
topical_categories = {"Computational linguistics"},
}
labels["computer games"] = {
display = "[[computer game]]s",
topical_categories = {"Video games"},
}
labels["computer game"] = "computer games"
labels["computer graphics"] = {
display = "[[đồ hoạ]] [[máy tính]]",
topical_categories = {"Đồ họa máy tính"},
}
labels["computer hardware"] = {
display = "[[phần cứng]]",
topical_categories = {"Phần cứng"},
}
labels["computer languages"] = {
display = "[[computer language]]s",
topical_categories = {"Computer languages"},
}
labels["computer language"] = "computer languages"
labels["programming language"] = "computer languages"
labels["computer science"] = {
display = "[[khoa học máy tính]]",
topical_categories = {"Khoa học máy tính"},
}
labels["comp sci"] = "computer science"
labels["bảo mật máy tính"] = {
aliases = {"computer security"},
display = "[[bảo mật]] [[máy tính]]",
topical_categories = "Bảo mật máy tính",
}
labels["computing"] = {
display = "[[máy tính]]",
topical_categories = {"Máy tính"},
}
labels["computer"] = "computing"
labels["computers"] = "computing"
labels["điện toán"] = "computing"
labels["máy tính"] = "computing"
labels["computing theory"] = {
display = "[[lý thuyết]] [[tính toán]]",
topical_categories = {"Lý thuyết tính toán"},
}
labels["comptheory"] = "computing theory"
labels["conchology"] = {
display = "[[conchology]]",
topical_categories = {"Conchology"},
}
labels["Confucianism"] = {
aliases = {"đạo Khổng", "đạo nho", "đạo Nho", "nho giáo", "Nho giáo"},
display = "[[Nho giáo]]",
topical_categories = {"Nho giáo"},
}
labels["conlanging"] = {
display = "[[conlanging]]",
topical_categories = {"Conlanging"},
}
labels["constructed languages"] = "conlanging"
labels["conservatism"] = {
display = "[[conservatism]]",
topical_categories = {"Conservatism"},
}
labels["construction"] = {
display = "[[construction]]",
topical_categories = {"Construction"},
}
labels["cooking"] = {
aliases = {"culinary", "cuisine", "cookery", "gastronomy", "nấu ăn", "nấu nướng"},
display = "[[nấu ăn]]",
topical_categories = {"Nấu ăn"},
}
labels["copyright"] = {
display = "[[copyright]] [[law]]",
topical_categories = {"Copyright"},
}
alias("copyright", {"copyright law"})
labels["cosmetics"] = {
display = "[[cosmetics]]",
topical_categories = {"Cosmetics"},
}
labels["cosmetology"] = "cosmetics"
labels["cosmology"] = {
display = "[[cosmology]]",
topical_categories = {"Cosmology"},
}
labels["crabs"] = {
display = "[[w:vi:Phân thứ bộ Cua|phân thứ bộ Cua]]",
topical_categories = {"Phân thứ bộ Cua"},
}
labels["creationism"] = {
display = "[[creationism#English|creationism]]",
topical_categories = {"Creationism"},
}
labels["baraminology"] = "creationism"
labels["cribbage"] = {
display = "[[cribbage]]",
topical_categories = {"Cribbage"},
}
labels["cricket"] = {
display = "[[cricket]]",
topical_categories = {"Cricket"},
}
labels["crime"] = {
aliases = {"tội phạm"},
display = "[[tội phạm]]",
topical_categories = {"Tội phạm"},
}
labels["criminal law"] = {
display = "[[criminal law]]",
topical_categories = {"Criminal law"},
}
labels["criminology"] = {
display = "[[criminology]]",
topical_categories = {"Criminology"},
}
labels["Crustaceans"] = {
display = "[[phân ngành]] [[giáp xác|Giáp xác]]",
topical_categories = {"Phân ngành Giáp xác"},
}
labels["cryptocurrencies"] = {
display = "[[cryptocurrency|cryptocurrencies]]",
topical_categories = {"Cryptocurrency"},
}
labels["cryptocurrency"] = "cryptocurrencies"
labels["cryptography"] = {
display = "[[cryptography]]",
topical_categories = {"Cryptography"},
}
labels["cryptozoology"] = {
display = "[[cryptozoology]]",
topical_categories = {"Cryptozoology"},
}
labels["crystallography"] = {
display = "[[crystallography]]",
topical_categories = {"Crystallography"},
}
labels["cultural anthropology"] = {
display = "[[cultural anthropology]]",
topical_categories = {"Cultural anthropology"},
}
labels["curling"] = {
display = "[[curling]]",
topical_categories = {"Curling"},
}
labels["cybernetics"] = {
display = "[[điều khiển học]]",
topical_categories = {"Điều khiển học"},
}
labels["cycle racing"] = {
display = "[[w:cycle sport|cycle racing]]",
topical_categories = {"Cycle racing"},
}
labels["cycling"] = {
aliases = {"bicycling", "đạp xe", "đạp xe đạp"},
display = "[[đạp xe]]",
topical_categories = "Đạp xe",
}
labels["cytology"] = {
aliases = {"sinh học tế bào"},
display = "[[sinh học tế bào]]",
topical_categories = "Sinh học tế bào",
}
labels["dairy products"] = {
aliases = {"chế phẩm sữa"},
display = "[[chế phẩm]] [[sữa]]",
topical_categories = "Chế phẩm sữa",
}
labels["dance"] = {
display = "[[dance#Noun|dance]]",
topical_categories = {"Dance"},
}
labels["darts"] = {
display = "[[darts]]",
topical_categories = {"Darts"},
}
labels["data management"] = {
display = "[[data management]]",
topical_categories = {"Data management"},
}
labels["data modeling"] = {
display = "[[data modeling]]",
topical_categories = {"Data modeling"},
}
labels["databases"] = {
display = "[[database]]s",
topical_categories = {"Databases"},
}
labels["database"] = "databases"
labels["deltiology"] = {
display = "[[deltiology]]",
topical_categories = {"Deltiology"},
}
labels["demography"] = {
display = "[[demography]]",
topical_categories = {"Demography"},
}
labels["demoscene"] = {
topical_categories = {"Demoscene"},
}
labels["dentistry"] = {
display = "[[nha khoa]]",
topical_categories = {"Nha khoa"},
}
labels["dermatology"] = {
display = "[[dermatology]]",
topical_categories = {"Dermatology"},
}
labels["desserts"] = {
display = "[[món]] [[tráng miệng]]",
topical_categories = {"Món tráng miệng"},
}
labels["design"] = {
display = "[[design#Noun|design]]",
topical_categories = {"Design"},
}
labels["dice games"] = {
aliases = {"dice", "xúc xắc", "trò chơi với xúc xắc", "xí ngầu", "trò chơi với xí ngầu"},
display = "[[xúc xắc|trò chơi với xúc xắc]]",
topical_categories = "Trò chơi với xúc xắc",
}
labels["dictation"] = {
display = "[[dictation]]",
topical_categories = {"Dictation"},
}
labels["differential geometry"] = {
display = "[[differential geometry]]",
topical_categories = {"Differential geometry"},
}
labels["diplomacy"] = {
aliases = {"ngoại giao"},
display = "[[ngoại giao]]",
topical_categories = {"Ngoại giao"},
}
labels["disc golf"] = {
display = "[[disc golf]]",
topical_categories = {"Disc golf"},
}
labels["divination"] = {
display = "[[divination]]",
topical_categories = {"Divination"},
}
labels["diving"] = {
display = "[[diving#Noun|diving]]",
topical_categories = {"Diving"},
}
labels["dogs"] = {
display = "[[chó]]",
topical_categories = {"Chó"},
}
labels["dominoes"] = {
display = "[[dominoes]]",
topical_categories = {"Dominoes"},
}
labels["dou dizhu"] = {
display = "[[w:Dou dizhu|dou dizhu]]",
topical_categories = {"Dou dizhu"},
}
labels["drama"] = {
display = "[[kịch]]",
topical_categories = {"Kịch"},
}
labels["dressage"] = {
display = "[[dressage]]",
topical_categories = {"Dressage"},
}
labels["earth science"] = {
display = "[[earth science]]",
topical_categories = {"Earth sciences"},
}
labels["Eastern Catholicism"] = {
display = "[[w:Eastern Catholic Churches|Eastern Catholicism]]",
topical_categories = {"Eastern Catholicism"},
}
labels["Eastern Catholic"] = "Eastern Catholicism"
labels["Eastern Orthodoxy"] = {
display = "[[Eastern Orthodoxy]]",
topical_categories = {"Eastern Orthodoxy"},
}
labels["ecclesiastical"] = {
display = "[[ecclesiastical]]",
topical_categories = {"Christianity"},
}
labels["ecology"] = {
display = "[[sinh thái học]]",
topical_categories = {"Sinh thái học"},
}
labels["sinh thái học"] = "ecology"
labels["economics"] = {
aliases = {"kinh tế học"},
display = "[[kinh tế học]]",
topical_categories = {"Kinh tế học"},
}
labels["education"] = {
display = "[[giáo dục]]",
aliases = {"giáo dục"},
topical_categories = {"Giáo dục"},
}
labels["Egyptian mythology"] = {
aliases = {"thần thoại Ai Cập"},
display = "[[thần thoại]] [[Ai Cập]]",
topical_categories = "Thần thoại Ai Cập",
}
labels["Egyptology"] = {
display = "[[Ai Cập]] [[học]]",
topical_categories = {"Ai Cập học"},
}
labels["electrencephalography"] = {
display = "[[electrencephalography]]",
topical_categories = {"Electrencephalography"},
}
labels["kỹ thuật điện"] = {
aliases = {"electrical engineering", "kĩ thuật điện"},
display = "[[kỹ thuật]] [[điện]]",
topical_categories = "Kỹ thuật điện",
}
labels["electricity"] = {
aliases = {"điện"},
display = "[[điện]]",
topical_categories = "Điện",
}
labels["electrodynamics"] = {
display = "[[electrodynamics]]",
topical_categories = {"Electrodynamics"},
}
labels["electromagnetism"] = {
display = "[[điện từ học]]",
topical_categories = {"Điện từ học"},
}
labels["electronics"] = {
display = "[[điện tử học]]",
topical_categories = {"Điện tử học"},
}
labels["embryology"] = {
display = "[[embryology]]",
topical_categories = {"Embryology"},
}
labels["emergency services"] = {
display = "[[emergency services]]",
topical_categories = {"Emergency services"},
}
labels["emergency medicine"] = {
display = "[[emergency medicine]]",
topical_categories = {"Emergency medicine"},
}
labels["endocrinology"] = {
display = "[[endocrinology]]",
topical_categories = {"Endocrinology"},
}
labels["engineering"] = {
display = "[[kĩ thuật]]",
topical_categories = {"Kĩ thuật"},
}
labels["enterprise engineering"] = {
display = "[[enterprise engineering]]",
topical_categories = {"Enterprise engineering"},
}
labels["entomology"] = {
display = "[[entomology]]",
topical_categories = {"Entomology"},
}
labels["epidemiology"] = {
display = "[[dịch tễ học]]",
topical_categories = {"Dịch tễ học"},
}
labels["epistemology"] = {
display = "[[nhận thức]] [[luận]]",
topical_categories = {"Nhận thức luận"},
}
labels["equestrianism"] = {
display = "[[equestrianism]]",
topical_categories = {"Equestrianism"},
}
labels["equestrian"] = "equestrianism"
labels["horses"] = "equestrianism"
labels["erotic literature"] = {
display = "[[văn học]] [[khiêu dâm]]",
topical_categories = {"Văn học khiêu dâm"},
}
labels["espionage"] = {
display = "[[espionage]]",
topical_categories = {"Espionage"},
}
labels["ethics"] = {
display = "[[ethics]]",
topical_categories = {"Ethics"},
}
labels["ethnography"] = {
display = "[[ethnography]]",
topical_categories = {"Ethnography"},
}
labels["ethology"] = {
display = "[[ethology]]",
topical_categories = {"Ethology"},
}
labels["European folklore"] = {
display = "[[European]] [[folklore]]",
topical_categories = {"European folklore"},
}
labels["evolutionary theory"] = {
aliases = {"evolutionary biology", "thuyết tiến hoá", "thuyết tiến hóa"},
display = "[[thuyết tiến hoá]]",
topical_categories = "Thuyết tiến hoá",
}
labels["exercise"] = {
display = "[[exercise]]",
topical_categories = {"Exercise"},
}
labels["falconry"] = {
display = "[[falconry]]",
topical_categories = {"Falconry"},
}
labels["fantasy"] = {
aliases = {"kì ảo", "kỳ ảo"},
display = "[[kì ảo]]",
topical_categories = {"Kì ảo"},
}
labels["fascism"] = {
display = "[[fascism]]",
topical_categories = {"Fascism"},
}
labels["fashion"] = {
aliases = {"thời trang"},
display = "[[thời trang]]",
topical_categories = "Thời trang",
}
labels["feminism"] = {
display = "[[feminism]]",
topical_categories = {"Feminism"},
}
labels["fencing"] = {
display = "[[fencing#Noun|fencing]]",
topical_categories = {"Fencing"},
}
labels["feudalism"] = {
display = "[[feudalism|feudalism]]",
topical_categories = {"Feudalism"},
}
labels["fiction"] = {
display = "[[hư cấu]]",
topical_categories = {"Hư cấu"},
}
labels["field hockey"] = {
display = "[[field hockey]]",
topical_categories = {"Field hockey"},
}
labels["figure skating"] = {
display = "[[figure skating]]",
topical_categories = {"Figure skating"},
}
labels["film"] = {
aliases = {"điện ảnh"},
display = "[[điện ảnh]]",
topical_categories = {"Điện ảnh"},
}
labels["film genre"] = {
aliases = {"cinema", "thể loại phim", "dòng phim"},
display = "[[phim]]",
topical_categories = {"Thể loại phim"},
}
labels["finance"] = {
aliases = {"tài chính"},
display = "[[tài chính]]",
topical_categories = {"Tài chính"},
}
labels["Finnish mythology"] = {
display = "[[Finnish]] [[mythology]]",
topical_categories = {"Finnish mythology"},
}
labels["firearms"] = {
aliases = {"firearm", "súng cầm tay"},
display = "[[súng]] cầm tay",
topical_categories = {"Súng cầm tay"}
}
labels["firefighting"] = {
display = "[[firefighting]]",
topical_categories = {"Firefighting"},
}
labels["fishing"] = {
aliases = {"angling", "ngư nghiệp"},
display = "[[ngư nghiệp]]",
topical_categories = "Ngư nghiệp",
}
labels["flamenco"] = {
display = "[[flamenco]]",
topical_categories = {"Flamenco"},
}
labels["flowers"] = {
aliases = {"flower", "hoa"},
display = "[[hoa]]",
topical_categories = {"Hoa"},
}
labels["fluid dynamics"] = {
display = "[[fluid dynamics]]",
topical_categories = {"Fluid dynamics"},
}
labels["fluid mechanics"] = {
display = "[[cơ học]] [[chất]] [[lưu]]",
topical_categories = {"Cơ học"},
}
labels["folklore"] = {
display = "[[văn hóa]] [[dân gian]]",
topical_categories = {"Văn hóa dân gian"},
}
labels["forestry"] = {
display = "[[lâm nghiệp]]",
topical_categories = {"Lâm nghiệp"},
}
labels["freemasonry"] = {
display = "[[Freemasonry]]",
topical_categories = {"Freemasonry"},
}
labels["functions"] = {
aliases = {"hàm toán học", "function"},
display = "[[hàm]] [[toán học]]",
topical_categories = {"Hàm toán học"},
}
labels["functional analysis"] = {
aliases = {"giải tích hàm"},
display = "[[giải tích]] [[hàm]]",
topical_categories = {"Giải tích hàm"},
}
labels["furniture"] = {
display = "[[đồ]] [[nội thất]]",
topical_categories = {"Đồ nội thất"},
}
labels["fuzzy logic"] = {
display = "[[fuzzy logic]]",
topical_categories = {"Fuzzy logic"},
}
labels["Gaelic football"] = {
display = "[[Gaelic football]]",
topical_categories = {"Gaelic football"},
}
labels["cờ bạc"] = {
aliases = {"gambling"},
display = "[[cờ bạc]]",
topical_categories = {"Cờ bạc"},
}
labels["game of go"] = {
display = "[[Go|game of Go]]",
topical_categories = {"Go"},
}
labels["game theory"] = {
display = "[[game theory]]",
topical_categories = {"Game theory"},
}
labels["games"] = {
aliases = {"game", "trò chơi"},
display = "[[trò chơi]]",
topical_categories = {"Trò chơi"},
}
labels["gaming"] = {
display = "[[gaming#Noun|gaming]]",
topical_categories = {"Gaming"},
}
labels["genealogy"] = {
display = "[[genealogy]]",
topical_categories = {"Genealogy"},
}
labels["genetics"] = {
display = "[[di truyền học]]",
topical_categories = {"Di truyền học"},
}
labels["geography"] = {
aliases = {"địa lí", "địa lí học", "địa lý", "địa lý học"},
display = "[[địa lý học]]",
topical_categories = {"Địa lý học"},
}
labels["geology"] = {
aliases = {"địa chất học"},
display = "[[địa chất học]]",
topical_categories = "Địa chất học",
}
labels["geometry"] = {
aliases = {"hình học"},
display = "[[hình học]]",
topical_categories = {"Hình học"},
}
labels["địa mạo học"] = {
aliases = {"geomorphology"},
display = "[[địa mạo]] [[học]]",
topical_categories = {"Địa mạo học"},
}
labels["gerontology"] = {
display = "[[gerontology]]",
topical_categories = {"Gerontology"},
}
labels["glassblowing"] = {
display = "[[glassblowing]]",
topical_categories = {"Glassblowing"},
}
labels["Gnosticism"] = {
display = "[[Gnosticism]]",
topical_categories = {"Gnosticism"},
}
labels["gnosticism"] = "Gnosticism"
labels["go"] = {
display = "[[go]]",
topical_categories = {"Go"},
}
labels["Go"] = "go"
labels["golf"] = {
display = "[[golf]]",
topical_categories = {"Golf"},
}
labels["government"] = {
display = "[[chính phủ]]",
aliases = {"chính phủ"},
topical_categories = {"Chính phủ"},
}
labels["grammar"] = {
display = "[[ngữ pháp]]",
aliases = {"ngữ pháp"},
topical_categories = {"Ngữ pháp"},
}
labels["grammatical case"] = {
display = "[[ngữ pháp]]",
aliases = {"cách ngữ pháp"},
topical_categories = {"Cách ngữ pháp"},
}
labels["grammatical mood"] = {
display = "[[ngữ pháp]]",
aliases = {"lối ngữ pháp"},
topical_categories = {"Lối ngữ pháp"},
}
labels["graph theory"] = {
display = "[[lý thuyết]] [[đồ thị]]",
topical_categories = {"Lý thuyết đồ thị"},
}
labels["graphic design"] = {
display = "[[graphic design]]",
topical_categories = {"Graphic design"},
}
labels["graphical user interface"] = {
display = "[[:w:vi:Giao diện đồ họa người dùng|giao diện đồ họa người dùng]]",
topical_categories = {"Giao diện đồ họa người dùng"},
}
labels["GUI"] = "graphical user interface"
labels["Greek mythology"] = {
aliases = {"thần thoại Hy Lạp"},
display = "[[thần thoại]] [[Hy Lạp]]",
topical_categories = {"Thần thoại Hy Lạp"},
}
labels["group theory"] = {
display = "[[group theory]]",
topical_categories = {"Group theory"},
}
labels["gun mechanisms"] = {
display = "[[firearm]]s",
topical_categories = {"Gun mechanisms"}
}
labels["firearm mechanism"] = "Gun mechanisms"
labels["firearm mechanisms"] = "Gun mechanisms"
labels["gun mechanism"] = "Gun mechanisms"
labels["gymnastics"] = {
display = "[[thể dục]] [[dụng cụ]]",
topical_categories = {"Thể dục dụng cụ"},
}
labels["gynaecology"] = {
display = "[[gynaecology]]",
topical_categories = {"Gynaecology"},
}
labels["gynecology"] = "gynaecology"
labels["trò chơi bằng tay"] = {
aliases = {"hand game", "hand games"},
display = "[[trò chơi]] bằng [[tay]]",
topical_categories = true,
}
labels["handball"] = {
display = "[[handball]]",
topical_categories = {"Handball"},
}
labels["Hawaiian mythology"] = {
display = "[[Hawaiian]] [[mythology]]",
topical_categories = {"Hawaiian mythology"},
}
labels["healthcare"] = {
display = "[[healthcare]]",
topical_categories = {"Healthcare"},
}
labels["helminthology"] = {
display = "[[helminthology]]",
topical_categories = {"Helminthology"},
}
labels["hematology"] = {
display = "[[huyết học]]",
topical_categories = {"Huyết học"},
}
labels["haematology"] = "hematology"
labels["heraldry"] = {
display = "[[heraldry]]",
topical_categories = {"Heraldry"},
}
labels["herbalism"] = {
display = "[[herbalism]]",
topical_categories = {"Herbalism"},
}
labels["herpetology"] = {
display = "[[herpetology]]",
topical_categories = {"Herpetology"},
}
labels["Hinduism"] = {
aliases = {"Ấn Độ giáo"},
display = "[[Ấn Độ giáo]]",
topical_categories = "Ấn Độ giáo",
}
labels["Hindutva"] = {
display = "[[Hindutva]]",
topical_categories = {"Hindutva"},
}
labels["historical period"] = {
display = "[[lịch sử]] [[thời đại]]",
topical_categories = {"Lịch sử thời đại"},
}
labels["historiography"] = {
display = "[[historiography]]",
topical_categories = {"Historiography"},
}
labels["history"] = {
aliases = {"lịch sử", "sử", "sử học"},
display = "[[lịch sử]]",
topical_categories = "Lịch sử",
}
labels["hockey"] = {
display = "[[field hockey]] or [[ice hockey]]",
topical_categories = {"Field hockey", "Ice hockey"},
}
labels["homeopathy"] = {
display = "[[:w:vi:Vi lượng đồng căn|vi lượng đồng căn]]",
topical_categories = {"Vi lượng đồng căn"},
}
labels["hominids"] = {
display = "[[họ]] [[người|Người]]",
topical_categories = {"Họ Người"},
}
labels["horse racing"] = {
display = "[[horse racing]]",
topical_categories = {"Horse racing"},
}
labels["horticulture"] = {
display = "[[làm vườn]]",
topical_categories = {"Làm vườn"},
}
labels["gardening"] = "horticulture"
labels["làm vườn"] = "horticulture"
labels["HTML"] = {
display = "[[Hypertext Markup Language|HTML]]",
topical_categories = {"HTML"},
}
labels["human resources"] = {
display = "[[human resources]]",
topical_categories = {"Human resources"},
}
labels["humanities"] = {
display = "[[humanities]]",
topical_categories = {"Humanities"},
}
labels["hunting"] = {
aliases = {"săn"},
display = "[[săn]]",
topical_categories = {"Săn"},
}
labels["hurling"] = {
display = "[[hurling#Noun|hurling]]",
topical_categories = {"Hurling"},
}
labels["hydroacoustics"] = {
Wikipedia = "Hydroacoustics",
topical_categories = {"Hydroacoustics"},
}
labels["hydrology"] = {
aliases = {"thủy văn", "thuỷ văn", "thủy văn học", "thuỷ văn học"},
display = "[[thủy văn học]]",
topical_categories = "Thủy văn học",
}
labels["khúc côn cầu trên băng"] = {
display = "[[khúc côn cầu trên băng]]",
topical_categories = {"Khúc côn cầu trên băng"},
}
labels["ichthyology"] = {
aliases = {"ngư học", "ngư loại học"},
display = "[[ngư học]]",
topical_categories = "Ngư học",
}
labels["ideologies"] = {
aliases = {"ý thức hệ", "ideology", "hệ tư tưởng"},
display = "[[ý thức hệ]]",
topical_categories = {"Ý thức hệ"},
}
labels["idol fandom"] = {
display = "[[idol]] [[fandom]]",
topical_categories = {"Idol fandom"},
}
labels["immunochemistry"] = {
display = "[[immunochemistry]]",
topical_categories = {"Immunochemistry"},
}
labels["immunology"] = {
display = "[[miễn dịch]] [[học]]",
topical_categories = {"Miễn dịch học"},
}
labels["import/export"] = {
display = "[[import#Noun|import]]/[[export#Noun|export]]",
topical_categories = {"Import/export"},
}
labels["Indo-European studies"] = {
display = "[[Indo-European studies]]",
topical_categories = {"Indo-European studies"},
}
labels["indo-european studies"] = "Indo-European studies"
labels["information science"] = {
display = "[[khoa học]] [[thông tin]]",
topical_categories = {"Khoa học thông tin"},
}
labels["information theory"] = {
display = "[[lý thuyết]] [[thông tin]]",
topical_categories = {"Lý thuyết thông tin"},
}
labels["information technology"] = {
display = "[[information technology]]",
topical_categories = {"Computing"},
}
alias("information technology", {"IT"})
labels["inorganic chemistry"] = {
display = "[[inorganic chemistry]]",
topical_categories = {"Inorganic chemistry"},
}
labels["insurance"] = {
display = "[[bảo hiểm]]",
topical_categories = {"Bảo hiểm"},
}
labels["international law"] = {
display = "[[luật quốc tế]]",
topical_categories = {"Luật quốc tế"},
}
labels["international relations"] = {
aliases = {"quan hệ quốc tế"},
display = "[[quan hệ quốc tế]]",
topical_categories = {"Quan hệ quốc tế"},
}
labels["tiêu chuẩn quốc tế"] = {
aliases = {"international standard", "international standards", "ISO", "International Organization for Standardization", "International Organisation for Standardisation"},
Wikipedia = true,
}
labels["Internet"] = {
display = "[[Internet]]",
topical_categories = {"Internet"},
}
labels["internet"] = "Internet"
labels["online"] = "Internet"
labels["Iranian mythology"] = {
display = "[[Iranian]] [[mythology]]",
topical_categories = {"Iranian mythology"},
}
labels["Irish mythology"] = {
display = "[[Irish]] [[mythology]]",
topical_categories = {"Irish mythology"},
}
labels["Islam"] = {
aliases = {"islam", "Islamic", "Muslim", "đạo Hồi", "đạo Islam", "Hồi giáo"},
Wikipedia = "Hồi giáo",
display = "Hồi giáo",
topical_categories = {"Hồi giáo"},
}
labels["Islamic finance"] = {
Wikipedia = "Islamic finance",
topical_categories = {"Islamic finance"},
}
alias("Islamic finance", {"Islamic banking", "Muslim finance", "Muslim banking", "Sharia-compliant finance"})
labels["Jainism"] = {
display = "[[:w:vi:Kỳ Na giáo|Kỳ Na giáo]]",
topical_categories = {"Kỳ Na giáo"},
}
labels["Japanese fiction"] = {
display = "[[tác phẩm]] [[giả tưởng]] [[Nhật Bản]]",
topical_categories = {"Tác phẩm giả tưởng Nhật Bản"},
}
labels["Japanese god"] = {
display = "[[Japanese]] [[mythology]]",
topical_categories = {"Japanese deities"},
}
labels["Japanese mythology"] = {
display = "[[Japanese]] [[mythology]]",
topical_categories = {"Japanese mythology"},
}
labels["Japanese pornography"] = {
aliases = {"Japanese porn", "hentai", "adult anime", "erotic anime", "ero anime"},
display = "[[khiêu dâm|nội dung khiêu dâm]] [[Nhật Bản]]",
Wikipedia = true,
topical_categories = "Nội dung khiêu dâm Nhật Bản",
}
labels["Java programming language"] = {
display = "[[w:Java (programming language)|Java programming language]]",
topical_categories = {"Java programming language"},
}
labels["JavaPL"] = "Java programming language"
labels["Java PL"] = "Java programming language"
labels["jazz"] = {
display = "[[jazz#Noun|jazz]]",
topical_categories = {"Jazz"},
}
labels["jewelry"] = {
display = "[[jewelry]]",
topical_categories = {"Jewelry"},
}
labels["jewellery"] = "jewelry"
labels["Jewish law"] = {
display = "[[Jewish]] [[law]]",
topical_categories = {"Jewish law"},
}
labels["Halacha"] = "Jewish law"
labels["Halachah"] = "Jewish law"
labels["Halakha"] = "Jewish law"
labels["Halakhah"] = "Jewish law"
labels["halacha"] = "Jewish law"
labels["halachah"] = "Jewish law"
labels["halakha"] = "Jewish law"
labels["halakhah"] = "Jewish law"
labels["jewish law"] = "Jewish law"
labels["Jewish Law"] = "Jewish law"
labels["Germanic paganism"] = {
display = "Germanic [[paganism]]",
topical_categories = {"Germanic paganism"},
}
labels["Germanic neopaganism"] = "Germanic paganism"
labels["Germanic Paganism"] = "Germanic paganism"
labels["Asatru"] = "Germanic paganism"
labels["Ásatrú"] = "Germanic paganism"
labels["Heathenry"] = "Germanic paganism"
labels["heathenry"] = "Germanic paganism"
labels["Norse neopaganism"] = "Germanic paganism"
labels["Norse paganism"] = "Germanic paganism"
labels["journalism"] = {
display = "[[journalism]]",
topical_categories = {"Mass media"},
}
labels["Judaism"] = {
display = "[[Do Thái]] [[giáo]]",
topical_categories = {"Do Thái giáo"},
}
labels["judo"] = {
display = "[[judo]]",
topical_categories = {"Judo"},
}
labels["juggling"] = {
display = "[[juggling#Noun|juggling]]",
topical_categories = {"Juggling"},
}
labels["kendo"] = {
display = "[[kendo]]",
topical_categories = {"Kendo"},
}
labels["knitting"] = {
display = "[[knitting#Noun|knitting]]",
topical_categories = {"Knitting"},
}
labels["lacrosse"] = {
display = "[[lacrosse]]",
topical_categories = {"Lacrosse"},
}
labels["law"] = {
aliases = {"legal", "luật", "luật pháp", "pháp luật"},
display = "[[luật pháp]]",
topical_categories = "Luật pháp",
}
labels["luật pháp Hoa Kỳ"] = {
aliases = {"luật pháp Hoa Kì", "pháp luật Hoa Kỳ", "pháp luật Hoa Kì"},
display = "[[w:Luật pháp Hoa Kỳ|luật pháp Hoa Kỳ]]",
topical_categories = "Luật pháp Hoa Kỳ",
}
labels["luật pháp Việt Nam"] = {
aliases = {"pháp luật Việt Nam"},
display = "[[w:Hệ thống pháp luật Việt Nam|luật pháp Việt Nam]]",
topical_categories = "Luật pháp Việt Nam",
}
labels["law enforcement"] = {
display = "[[law enforcement]]",
topical_categories = {"Law enforcement"},
}
labels["police"] = "law enforcement"
labels["policing"] = "law enforcement"
labels["leftism"] = {
display = "[[leftism]]",
topical_categories = {"Leftism"},
}
labels["letterpress"] = {
display = "[[letterpress]] [[typography]]",
topical_categories = {"Typography"},
}
labels["metal type"] = "letterpress"
labels["metal typesetting"] = "letterpress"
labels["lexicography"] = {
display = "[[từ điển]] [[học]]",
topical_categories = {"Từ điển học"},
}
labels["LGBT"] = {
display = "[[LGBT]]",
topical_categories = {"LGBT"},
}
labels["LGBTQ"] = "LGBT"
labels["liberalism"] = {
display = "[[liberalism]]",
topical_categories = {"Liberalism"},
}
labels["library science"] = {
display = "[[library science]]",
topical_categories = {"Library science"},
}
labels["lichenology"] = {
display = "[[lichenology]]",
topical_categories = {"Lichenology"},
}
labels["light sources"] = {
display = "[[nguồn]] [[ánh sáng]]",
topical_categories = {"Nguồn ánh sáng"},
}
labels["limnology"] = {
display = "[[limnology]]",
topical_categories = {"Ecology"},
}
labels["lipid"] = {
display = "[[:w:vi:Lipid|Lipid]]",
topical_categories = {"Lipid"},
}
labels["linear algebra"] = {
display = "[[đại số tuyến tính]]",
topical_categories = {"Đại số tuyến tính"},
}
labels["vector algebra"] = "linear algebra"
labels["linguistic morphology"] = {
display = "[[linguistic]] [[morphology]]",
topical_categories = {"Linguistic morphology"},
}
labels["linguistics"] = {
display = "[[ngôn ngữ học]]",
aliases = {"ngôn ngữ học", "philology"},
topical_categories = {"Ngôn ngữ học"},
}
labels["văn học"] = {
aliases = {"literature"},
display = "[[văn học]]",
topical_categories = {"Văn học"},
}
labels["logic"] = {
display = "[[logic]]",
topical_categories = {"Logic"},
}
labels["luge"] = {
display = "[[luge]]",
topical_categories = {"Luge"},
}
labels["machining"] = {
display = "[[machining#Noun|machining]]",
topical_categories = {"Machining"},
}
labels["machine learning"] = {
display = "[[machine learning]]",
topical_categories = {"Trí tuệ nhân tạo"},
}
labels["ML"] = "machine learning"
labels["mahjong"] = {
display = "[[mahjong]]",
topical_categories = {"Mahjong"},
}
labels["malacology"] = {
display = "[[malacology]]",
topical_categories = {"Malacology"},
}
labels["mammalogy"] = {
display = "[[mammalogy]]",
topical_categories = {"Mammalogy"},
}
labels["management"] = {
display = "[[management]]",
topical_categories = {"Management"},
}
labels["manga"] = {
display = "[[manga]]",
topical_categories = {"Japanese fiction"},
}
labels["Manichaeism"] = {
display = "[[Manichaeism]]",
topical_categories = {"Manichaeism"},
}
labels["manufacturing"] = {
display = "[[sản xuất]]",
topical_categories = {"Sản xuất"},
}
labels["Maoism"] = {
display = "[[Maoism]]",
topical_categories = {"Maoism"},
}
labels["marching"] = {
display = "[[marching#Noun|marching]]",
topical_categories = {"Marching"},
}
labels["marine biology"] = {
display = "[[marine biology]]",
topical_categories = {"Marine biology"},
}
labels["coral science"] = "marine biology"
labels["marketing"] = {
display = "[[marketing#Noun|marketing]]",
topical_categories = {"Marketing"},
}
labels["martial arts"] = {
display = "[[martial arts]]",
topical_categories = {"Martial arts"},
}
labels["Marxism"] = {
display = "[[w:vi:Chủ nghĩa Marx|Chủ nghĩa Marx]]",
topical_categories = {"Chủ nghĩa Marx"},
}
labels["masonry"] = {
display = "[[masonry]]",
topical_categories = {"Masonry"},
}
labels["massage"] = {
display = "[[massage]]",
topical_categories = {"Massage"},
}
labels["materials science"] = {
display = "[[materials science]]",
topical_categories = {"Materials science"},
}
labels["mathematical analysis"] = {
display = "[[giải tích]] [[toán học]]",
topical_categories = {"Giải tích toán học"},
}
labels["analysis"] = "mathematical analysis"
labels["mathematics"] = {
display = "[[toán học]]",
topical_categories = {"Toán học"},
}
labels["math"] = "mathematics"
labels["maths"] = "mathematics"
labels["toán"] = "mathematics"
labels["toán học"] = "mathematics"
labels["measure theory"] = {
display = "[[measure theory]]",
topical_categories = {"Measure theory"},
}
labels["mechanical engineering"] = {
display = "[[mechanical engineering]]",
topical_categories = {"Mechanical engineering"},
}
labels["mechanics"] = {
aliases = {"cơ học"},
display = "[[cơ học]]",
topical_categories = {"Cơ học"},
}
labels["media"] = {
display = "[[media]]",
topical_categories = {"Media"},
}
labels["mediaeval folklore"] = {
display = "[[mediaeval]] [[folklore]]",
topical_categories = {"European folklore"},
}
labels["medieval folklore"] = "mediaeval folklore"
labels["medical genetics"] = {
display = "[[medical]] [[genetics]]",
topical_categories = {"Medical genetics"},
}
labels["medical sign"] = {
display = "[[medicine]]",
topical_categories = {"Medical signs and symptoms"},
}
labels["medicine"] = {
display = "[[y học]]",
topical_categories = {"Y học"},
}
labels["medical"] = "medicine"
labels["y"] = "medicine"
labels["y học"] = "medicine"
labels["y khoa"] = "medicine"
labels["Mesopotamian mythology"] = {
aliases = {"thần thoại Lưỡng Hà"},
display = "[[thần thoại]] [[Lưỡng Hà]]",
topical_categories = "Thần thoại Lưỡng Hà",
}
labels["metadata"] = {
display = "[[metadata]]",
topical_categories = {"Data management"},
}
labels["metallurgy"] = {
display = "[[luyện kim]]",
topical_categories = {"Luyện kim"},
}
labels["metaphysics"] = {
display = "[[siêu]] [[hình]] [[học]]",
topical_categories = {"Siêu hình học"},
}
labels["meteorology"] = {
display = "[[khí tượng]] [[học]]",
topical_categories = {"Khí tượng học"},
}
labels["metrology"] = {
display = "[[đo lường]] [[học]]",
topical_categories = {"Đo lường học"},
}
labels["microbiology"] = {
display = "[[vi sinh vật]] [[học]]",
topical_categories = {"Vi sinh vật học"},
}
labels["microelectronics"] = {
display = "[[microelectronics]]",
topical_categories = {"Microelectronics"},
}
labels["microscopy"] = {
display = "[[microscopy]]",
topical_categories = {"Microscopy"},
}
labels["military"] = {
aliases = {"quân sự"},
display = "[[quân sự]]",
topical_categories = "Quân sự",
}
labels["mineralogy"] = {
aliases = {"khoáng vật học"},
display = "[[khoáng vật học]]",
topical_categories = {"Khoáng vật học"},
}
labels["mining"] = {
display = "khai thác mỏ",
topical_categories = {"Khai thác mỏ"},
}
labels["molecular biology"] = {
display = "[[molecular biology]]",
topical_categories = {"Molecular biology"},
}
labels["monarchy"] = {
display = "[[monarchy]]",
topical_categories = {"Monarchy"},
}
labels["money"] = {
display = "[[tiền]]",
topical_categories = {"Tiền"},
}
labels["Mormonism"] = {
display = "[[Mormonism]]",
topical_categories = {"Mormonism"},
}
labels["motorcycling"] = {
display = "[[motorcycling#Noun|motorcycling]]",
topical_categories = {"Motorcycles"},
}
labels["motorcycle"] = "motorcycling"
labels["motorcycles"] = "motorcycling"
labels["motorbike"] = "motorcycling"
-- There are other types of racing, but 99% of the time "racing" on its own refers to motorsports
labels["motor racing"] = {
aliases = {"motor sport", "motorsport", "motorsports", "racing", "đua xe"},
display = "[[đua xe]] có [[động cơ]]",
topical_categories = "Đua xe có động cơ",
}
labels["music"] = {
aliases = {"âm nhạc", "nhạc"},
display = "[[âm nhạc]]",
topical_categories = "Âm nhạc",
}
labels["music industry"] = {
Wikipedia = "Music industry",
topical_categories = {"Music industry"},
}
labels["mycology"] = {
display = "[[nấm]] [[học]]",
topical_categories = {"Nấm học"},
}
labels["mythology"] = {
aliases = {"huyền thoại", "thần thoại"},
display = "[[thần thoại]]",
topical_categories = {"Thần thoại"},
}
labels["nanotechnology"] = {
display = "[[nanotechnology]]",
topical_categories = {"Nanotechnology"},
}
labels["narratology"] = {
display = "[[narratology]]",
topical_categories = {"Narratology"},
}
labels["nautical"] = {
aliases = {"giao thông đường thủy"},
display = "[[giao thông]] [[đường thủy]]",
topical_categories = "Giao thông đường thủy",
}
labels["navigation"] = {
display = "[[navigation]]",
topical_categories = {"Navigation"},
}
labels["Nazism"] = { -- see also Neo-Nazism
Wikipedia = "Nazism",
topical_categories = {"Nazism"},
}
alias("Nazism", {"nazism", "Nazi", "nazi", "Nazis", "nazis" })
labels["nematology"] = {
display = "[[nematology]]",
topical_categories = {"Zoology"},
}
labels["neo-Nazism"] = { -- but also this is often used to indicate Nazi-used jargon; cf "white supremacist ideology"
Wikipedia = "Neo-Nazism",
topical_categories = {"Neo-Nazism"},
}
alias("neo-Nazism", {"Neo-Nazism", "Neo-nazism", "neo-nazism", "Neo-Nazi", "Neo-nazi", "neo-Nazi", "neo-nazi", "Neo-Nazis", "Neo-nazis", "neo-Nazis", "neo-nazis", "NeoNazism", "Neonazism", "neoNazism", "neonazism", "NeoNazi", "Neonazi", "neoNazi", "neonazi", "NeoNazis", "Neonazis", "neoNazis", "neonazis" })
labels["netball"] = {
display = "[[netball]]",
topical_categories = {"Netball"},
}
labels["networking"] = {
display = "[[networking#Noun|networking]]",
topical_categories = {"Networking"},
}
labels["neuroanatomy"] = {
display = "[[giải phẫu]] [[thần kinh]]",
topical_categories = {"Giải phẫu thần kinh"},
}
labels["neurology"] = {
display = "[[thần kinh học]]",
topical_categories = {"Thần kinh học"},
}
labels["neuroscience"] = {
display = "[[khoa học]] [[thần kinh]]",
topical_categories = {"Khoa học thần kinh"},
}
labels["neurosurgery"] = {
display = "[[neurosurgery]]",
topical_categories = {"Neurosurgery"},
}
labels["newspapers"] = {
display = "[[newspaper]]s",
topical_categories = {"Newspapers"},
}
labels["nightshades"] = {
display = "[[họ]] [[cà|Cà]]",
topical_categories = {"Họ Cà"},
}
labels["solanaceae"] = "nightshades"
labels["Norse mythology"] = {
display = "[[Norse]] [[mythology]]",
topical_categories = {"Norse mythology"},
}
labels["nuclear physics"] = {
aliases = {"vật lý hạt nhân"},
display = "[[vật lý]] [[hạt nhân]]",
topical_categories = {"Vật lý hạt nhân"},
}
labels["number theory"] = {
display = "[[number theory]]",
topical_categories = {"Number theory"},
}
labels["numismatics"] = {
display = "[[hóa tệ học]]",
topical_categories = {"Hóa tệ học"},
}
labels["nutrition"] = {
display = "[[nutrition]]",
topical_categories = {"Nutrition"},
}
labels["object-oriented programming"] = {
display = "[[object-oriented programming]]",
topical_categories = {"Object-oriented programming"},
}
alias("object-oriented programming", {"object-oriented", "OOP"})
labels["obstetrics"] = {
display = "[[obstetrics]]",
topical_categories = {"Obstetrics"},
}
labels["obstetric"] = "obstetrics"
labels["occult"] = {
aliases = {"thần bí học"},
display = "[[thần bí học]]",
topical_categories = {"Thần bí học"},
}
labels["oceanography"] = {
display = "[[hải dương học]]",
topical_categories = {"Hải dương học"},
}
labels["oenology"] = {
display = "[[oenology]]",
topical_categories = {"Oenology"},
}
labels["oil industry"] = {
display = "[[w:Petroleum industry|oil industry]]",
topical_categories = {"Oil industry"},
}
labels["oil drilling"] = "oil industry"
labels["oncology"] = {
display = "[[ung thư]] [[học]]",
topical_categories = {"Ung thư học"},
}
labels["online gaming"] = {
display = "[[online]] [[gaming#Noun|gaming]]",
topical_categories = {"Video games"},
}
labels["online games"] = "online gaming"
labels["MMO"] = "online gaming"
labels["MMORPG"] = "online gaming"
labels["opera"] = {
display = "[[opera]]",
topical_categories = {"Opera"},
}
labels["operating systems"] = {
display = "[[hệ điều hành]]",
topical_categories = {"Hệ điều hành"},
}
labels["ophthalmology"] = {
display = "[[ophthalmology]]",
topical_categories = {"Ophthalmology"},
}
labels["optics"] = {
aliases = {"quang học"},
display = "[[quang học]]",
topical_categories = {"Quang học"},
}
labels["Orchids"] = {
aliases = {"Họ Lan"},
display = "[[w:Họ Lan|Họ Lan]]",
topical_categories = {"Họ Lan"},
}
labels["organic chemistry"] = {
aliases = {"hóa học hữu cơ"},
display = "[[hóa hữu cơ]]",
topical_categories = {"Hóa hữu cơ"},
}
labels["ornithology"] = {
aliases = {"điểu học"},
display = "[[điểu học]]",
topical_categories = {"Điểu học"},
}
labels["orthodontics"] = {
display = "[[orthodontics]]",
topical_categories = {"Dentistry"},
}
labels["orthography"] = {
display = "[[chính tả]]",
aliases = {"chính tả"},
topical_categories = {"Chính tả"},
}
labels["paganism"] = {
display = "[[:w:vi:Pagan giáo|Pagan giáo]]",
topical_categories = {"Pagan giáo"},
}
labels["pagan"] = "paganism"
labels["neopagan"] = "paganism"
labels["neopaganism"] = "paganism"
labels["neo-pagan"] = "paganism"
labels["neo-paganism"] = "paganism"
labels["pain"] = {
display = "[[medicine]]",
topical_categories = {"Pain"},
}
labels["paintball"] = {
display = "[[paintball]]",
topical_categories = {"Paintball"},
}
labels["painting"] = {
display = "[[painting#Noun|painting]]",
topical_categories = {"Painting"},
}
labels["cổ văn tự học"] = {
aliases = {"cổ tự học", "palaeography","paleography"},
display = "[[cổ văn tự học]]",
topical_categories = {"Cổ văn tự học"},
}
labels["paleontology"] = {
display = "[[cổ sinh vật học]]",
topical_categories = {"Cổ sinh vật học"},
}
labels["palaeontology"] = "paleontology"
labels["palmistry"] = {
aliases = {"xem chỉ tay"},
display = "[[chỉ tay|xem chỉ tay]]",
topical_categories = "Xem chỉ tay",
}
labels["palynology"] = {
display = "[[palynology]]",
topical_categories = {"Palynology"},
}
labels["paraphilia"] = {
aliases = {"paraphilias", "paraphilic", "fetish", "fetishes", "fetishism", "fetishistic", "fetishization", "fetishisation", "lệch lạc tình dục"},
display = "[[lệch lạc]] [[tình dục]]",
topical_categories = "Lệch lạc tình dục",
}
labels["parapsychology"] = {
display = "[[parapsychology]]",
topical_categories = {"Parapsychology"},
}
labels["particle physics"] = {
display = "[[particle physics]]",
topical_categories = {"Particle physics"},
}
labels["pasteurisation"] = {
display = "[[pasteurisation]]",
topical_categories = {"Pasteurisation"},
}
labels["patent law"] = {
display = "[[patent#Noun|patent]] [[law]]",
topical_categories = {"Patent law"},
}
labels["patents"] = "patent law"
labels["pathology"] = {
display = "[[bệnh lí học]]",
aliases = {"bệnh lí học", "bệnh lý học"},
topical_categories = {"Bệnh lí học"},
}
labels["pedology"] = {
display = "[[thổ nhưỡng học]]",
aliases = {"thổ nhưỡng học"},
topical_categories = {"Thổ nhưỡng học"},
}
labels["pensions"] = {
display = "[[pension]]s",
topical_categories = {"Pensions"},
}
labels["pesäpallo"] = {
display = "[[pesäpallo]]",
topical_categories = {"Pesäpallo"},
}
labels["pesapallo"] = "pesäpallo"
labels["petrochemistry"] = {
aliases = {"hóa dầu"},
display = "[[hóa dầu]]",
topical_categories = {"Hóa dầu"},
}
labels["petrology"] = {
aliases = {"thạch học","thạch luận"},
display = "[[thạch luận]]",
topical_categories = {"Thạch luận"},
}
labels["pharmacology"] = {
display = "[[dược]] [[lý học]]",
topical_categories = {"Dược lý học"},
}
labels["pharmacy"] = {
aliases = {"dược học","dược khoa"},
display = "[[dược học]]",
topical_categories = {"Dược học"},
}
labels["pharyngology"] = {
display = "[[pharyngology]]",
topical_categories = {"Pharyngology"},
}
labels["philately"] = {
display = "[[philately]]",
topical_categories = {"Philately"},
}
labels["philosophy"] = {
aliases = {"triết học", "triết"},
display = "[[triết học]]",
topical_categories = {"Triết học"},
}
labels["phonetics"] = {
aliases = {"ngữ âm"},
display = "[[ngữ âm]]",
topical_categories = {"Ngữ âm"},
}
labels["phonology"] = {
display = "[[âm vị học]]",
topical_categories = {"Âm vị học"},
}
labels["âm vị học"] = "phonology"
labels["photography"] = {
display = "[[nhiếp ảnh]]",
topical_categories = {"Nhiếp ảnh"},
}
labels["Não tướng học"] = {
display = "[[não tướng học]]",
topical_categories = {"Não tướng học"},
}
labels["physical chemistry"] = {
display = "[[hóa]] [[lý]]",
topical_categories = {"Hóa lý"},
}
labels["physics"] = {
aliases = {"vật lí", "vật lí học", "vật lý", "vật lý học"},
display = "[[vật lý học]]",
topical_categories = {"Vật lý học"},
}
labels["physiology"] = {
display = "[[sinh lí học]]",
topical_categories = {"Sinh lí học"},
}
labels["sinh lí học"] = "physiology"
labels["sinh lý học"] = "physiology"
labels["phytopathology"] = {
display = "[[phytopathology]]",
topical_categories = {"Phytopathology"},
}
labels["pinball"] = {
display = "[[pinball]]",
topical_categories = {"Pinball"},
}
labels["piperales"] = {
display = "[[w:Bộ Hồ tiêu|bộ Hồ tiêu]]",
topical_categories = {"Bộ Hồ tiêu"},
}
labels["planetology"] = {
display = "[[khoa học hành tinh]]",
topical_categories = {"Khoa học hành tinh"},
}
labels["poetry"] = {
aliases = {"thơ", "thơ ca"},
display = "[[thơ]]",
topical_categories = {"Thơ"},
}
labels["Pokémon"] = {
display = "[[w:Pokémon|Pokémon]]",
topical_categories = {"Pokémon"},
}
labels["poker"] = {
display = "[[poker]]",
topical_categories = {"Poker"},
}
labels["poker slang"] = {
display = "[[poker]] [[slang]]",
topical_categories = {"Poker"},
}
labels["political science"] = {
aliases = {"khoa học chính trị"},
display = "[[khoa học chính trị]]",
topical_categories = {"Khoa học chính trị"},
}
labels["politics"] = {
display = "[[chính trị]]",
topical_categories = {"Chính trị"},
}
labels["political"] = "politics"
labels["chính trị"] = "politics"
labels["Australian politics"] = {
display = "[[w:Chính trị Úc|Chính trị Úc]]",
topical_categories = {"Chính trị Úc"},
}
labels["Canadian politics"] = {
display = "[[w:Politics of Canada|Canadian politics]]",
topical_categories = {"Canadian politics"},
}
labels["European politics"] = {
display = "[[w:Politics of Europe|European politics]]",
topical_categories = {"European politics"},
}
labels["EU politics"] = "European politics"
labels["French politics"] = {
display = "[[w:Politics of France|French politics]]",
topical_categories = {"French politics"},
}
labels["chính trị Đức"] = {
aliases = {"German politics"},
display = "[[w:Chính trị Đức|chính trị Đức]]",
topical_categories = {"Chính trị Đức"},
}
labels["chính trị Hồng Kông"] = {
aliases = {"HK politics"},
display = "[[w:Chính trị Hồng Kông|chính trị Hồng Kông]]",
topical_categories = {"Chính trị Hồng Kông"},
}
labels["Indian politics"] = {
display = "[[w:Politics of India|Indian politics]]",
topical_categories = {"Indian politics"},
}
labels["Irish politics"] = {
display = "[[w:Politics of the Republic of Ireland|Irish politics]]",
topical_categories = {"Irish politics"},
}
labels["New Zealand politics"] = {
display = "[[w:Politics of New Zealand|New Zealand politics]]",
topical_categories = {"New Zealand politics"},
}
labels["Pakistani politics"] = {
display = "[[w:Politics of Pakistan|Pakistani politics]]",
topical_categories = {"Pakistani politics"},
}
labels["Philippine politics"] = {
aliases = {"Filipino politics", "chính trị Philippines"},
display = "[[w:Chính trị Philippines|chính trị Philippines]]",
topical_categories = "Chính trị Philippines",
}
labels["Philmont Scout Ranch"] = {
display = "[[w:Philmont Scout Ranch|Philmont Scout Ranch]]",
topical_categories = {"Philmont Scout Ranch"},
}
labels["Philmont"] = "Philmont Scout Ranch"
labels["Spanish politics"] = {
display = "[[w:Politics of Spain|Spanish politics]]",
topical_categories = {"Spanish politics"},
}
labels["Swiss politics"] = {
display = "[[w:Politics of Switzerland|Swiss politics]]",
topical_categories = {"Swiss politics"},
}
labels["UK politics"] = {
display = "[[w:Politics of the United Kingdom|UK politics]]",
topical_categories = {"UK politics"},
}
labels["US politics"] = {
display = "[[w:Politics of the United States|US politics]]",
topical_categories = {"US politics"},
}
labels["pornography"] = {
aliases = {"porn", "porno", "khiêu dâm"},
display = "[[khiêu dâm]]",
topical_categories = {"Khiêu dâm"},
}
labels["Portuguese folklore"] = {
display = "[[Portuguese#Adjective|Portuguese]] [[folklore]]",
topical_categories = {"European folklore"},
}
labels["pottery"] = {
display = "[[pottery]]",
topical_categories = {"Ceramics"},
}
labels["pragmatics"] = {
display = "[[pragmatics]]",
topical_categories = {"Pragmatics"},
}
labels["printing"] = {
display = "[[printing#Noun|printing]]",
topical_categories = {"Printing"},
}
labels["probability theory"] = {
display = "[[lý thuyết xác suất]]",
topical_categories = {"Lý thuyết xác suất"},
}
labels["professional wrestling"] = {
display = "[[professional wrestling]]",
topical_categories = {"Professional wrestling"},
}
labels["pro wrestling"] = "professional wrestling"
labels["programming"] = {
aliases = {"computer programming", "lập trình", "lập trình máy tính"},
display = "[[lập trình]]",
topical_categories = "Lập trình máy tính",
}
labels["property law"] = {
display = "[[property law]]",
topical_categories = {"Property law"},
}
alias("property law", {"land law"})
labels["prosody"] = {
display = "[[prosody]]",
topical_categories = {"Prosody"},
}
labels["Protestantism"] = {
display = "[[Protestantism]]",
topical_categories = {"Protestantism"},
}
labels["pseudoscience"] = {
display = "[[pseudoscience]]",
topical_categories = {"Pseudoscience"},
}
labels["psychiatry"] = {
display = "[[tâm thần học]]",
aliases = {"tâm thần học"},
topical_categories = {"Tâm thần học"},
}
labels["psychoanalysis"] = {
display = "[[psychoanalysis]]",
topical_categories = {"Psychoanalysis"},
}
labels["psychology"] = {
aliases = {"tâm lí học", "tâm lý học"},
display = "[[tâm lý học]]",
topical_categories = "Tâm lý học",
}
labels["psychotherapy"] = {
display = "[[psychotherapy]]",
topical_categories = {"Psychotherapy"},
}
labels["publishing"] = {
display = "[[publishing#Noun|publishing]]",
topical_categories = {"Publishing"},
}
labels["pyrotechnics"] = {
display = "[[pyrotechnics]]",
topical_categories = {"Pyrotechnics"},
}
labels["QAnon"] = {
Wikipedia = "QAnon",
topical_categories = {"QAnon"},
}
alias("QAnon", {"Qanon"})
labels["Quakerism"] = {
topical_categories = {"Quakerism"},
}
labels["quantum computing"] = {
display = "[[quantum computing]]",
topical_categories = {"Quantum computing"},
}
labels["cơ học lượng tử"] = {
aliases = {"quantum mechanics","quantum physics"},
display = "[[cơ học]] [[lượng tử]]",
topical_categories = {"Cơ học lượng tử"},
}
-- TODO: What kind of topic is "radiation"? Is it specific kinds of radiation? That would be a set-type category.
labels["radiation"] = {
display = "[[physics]]",
topical_categories = {"Radiation"},
}
labels["radio"] = {
display = "[[radio]]",
topical_categories = {"Radio"},
}
labels["Raëlism"] = {
display = "[[Raëlism]]",
topical_categories = {"Raëlism"},
}
labels["rail transport"] = {
aliases = {"rail","railroading","railroads","vận tải đường sắt"},
display = "[[vận tải]] [[đường sắt]]",
topical_categories = {"Vận tải đường sắt"},
}
labels["Rastafari"] = {
display = "[[Rastafari]]",
topical_categories = {"Rastafari"},
}
labels["Rasta"] = "Rastafari"
labels["rasta"] = "Rastafari"
labels["Rastafarian"] = "Rastafari"
labels["rastafarian"] = "Rastafari"
labels["Rastafarianism"] = "Rastafari"
labels["bất động sản"] = {
aliases = {"real estate"},
display = "[[bất động sản]]",
topical_categories = "Bất động sản",
}
labels["real tennis"] = {
display = "[[real tennis]]",
topical_categories = {"Tennis"},
}
labels["recreational mathematics"] = {
display = "[[recreational mathematics]]",
topical_categories = {"Mathematics"},
}
labels["reference works"] = {
display = "[[tài liệu]] [[tham khảo]]",
topical_categories = {"Tài liệu tham khảo"},
}
labels["refworks"] = "reference works"
labels["regular expressions"] = {
display = "[[regular expression]]s",
topical_categories = {"Regular expressions"},
}
labels["regex"] = "regular expressions"
labels["relativity"] = {
display = "[[relativity]]",
topical_categories = {"Relativity"},
}
labels["religion"] = {
aliases = {"tôn giáo"},
display = "[[tôn giáo]]",
topical_categories = {"Tôn giáo"},
}
labels["rhetoric"] = {
aliases = {"tu từ học"},
display = "[[tu từ học]]",
topical_categories = "Tu từ học",
}
labels["road transport"] = {
display = "[[w:road transport|road transport]]",
topical_categories = {"Road transport"},
}
labels["robotics"] = {
display = "[[robotics]]",
topical_categories = {"Robotics"},
}
labels["rock paper scissors"] = {
topical_categories = {"Rock paper scissors"},
}
labels["role-playing games"] = {
display = "[[role-playing game]]s",
topical_categories = {"Role-playing games"},
}
labels["role playing games"] = "role-playing games"
labels["RPG"] = "role-playing games"
labels["RPGs"] = "role-playing games"
labels["roller derby"] = {
display = "[[roller derby]]",
topical_categories = {"Roller derby"},
}
labels["Roman Catholicism"] = {
display = "[[giáo hội]] [[công giáo]]",
topical_categories = {"Giáo hội Công giáo"},
}
labels["Roman Catholic"] = "Roman Catholicism"
labels["Roman Catholic Church"] = "Roman Catholicism"
labels["Roman mythology"] = {
display = "[[thần thoại]] [[La Mã]]",
topical_categories = {"Thần thoại La Mã"},
}
labels["Roman numerals"] = {
display = "[[Roman numeral]]s",
topical_categories = {"Roman numerals"},
}
labels["roofing"] = {
display = "[[roofing#Noun|roofing]]",
topical_categories = {"Roofing"},
}
labels["rosiculture"] = {
display = "[[rosiculture]]",
topical_categories = {"Rosiculture"},
}
labels["rotation"] = {
display = "[[xoay tròn]]",
topical_categories = {"Xoay tròn"},
}
labels["rowing"] = {
display = "[[rowing#Noun|rowing]]",
topical_categories = {"Rowing"},
}
labels["Rubik's Cube"] = {
display = "[[Rubik's Cube]]",
topical_categories = {"Rubik's Cube"},
}
labels["Rubik's cubes"] = "Rubik's Cube"
labels["rugby"] = {
display = "[[rugby]]",
topical_categories = {"Rugby"},
}
labels["rugby league"] = {
display = "[[rugby league]]",
topical_categories = {"Rugby league"},
}
labels["rugby union"] = {
display = "[[rugby union]]",
topical_categories = {"Rugby union"},
}
labels["sailing"] = {
display = "[[sailing#Noun|sailing]]",
topical_categories = {"Sailing"},
}
labels["science fiction"] = {
aliases = {"scifi", "sci fi", "sci-fi", "khoa học viễn tưởng", "khoa học giả tưởng"},
display = "[[khoa học viễn tưởng]]",
topical_categories = "Khoa học viễn tưởng",
}
labels["sciences"] = {
aliases = {"science", "scientific", "khoa học"},
display = "[[khoa học]]",
topical_categories = "Khoa học",
}
labels["Scientology"] = {
display = "[[Scientology]]",
topical_categories = {"Scientology"},
}
labels["Scouting"] = {
display = "[[Scouting]]",
topical_categories = {"Scouting"},
}
labels["scouting"] = "Scouting"
labels["scrapbooks"] = {
display = "[[scrapbook]]s",
topical_categories = {"Scrapbooks"},
}
labels["sculpture"] = {
display = "[[sculpture]]",
topical_categories = {"Sculpture"},
}
labels["securities"] = {
aliases = {"securities finance","chứng khoán"},
display = "[[chứng khoán]]",
topical_categories = {"Chứng khoán"},
}
labels["seduction community"] = {
display = "[[w:Seduction community|seduction community]]",
topical_categories = {"Seduction community"},
}
labels["seismology"] = {
aliases = {"địa chấn học"},
display = "[[địa chấn học]]",
topical_categories = "Địa chấn học",
}
labels["semantics"] = {
aliases = {"ngữ nghĩa học"},
display = "[[ngữ nghĩa học]]",
topical_categories = {"Ngữ nghĩa học"},
}
labels["semiotics"] = {
display = "[[semiotics]]",
topical_categories = {"Semiotics"},
}
labels["semiconductors"] = {
display = "[[semiconductor]]s",
topical_categories = {"Semiconductors"},
}
labels["set theory"] = {
aliases = {"lí thuyết tập hợp", "lý thuyết tập hợp"},
display = "[[lí thuyết tập hợp]]",
topical_categories = "Lí thuyết tập hợp",
}
labels["may vá"] = {
aliases = {"sewing"},
display = "[[may vá]]",
topical_categories = "May vá",
}
labels["sex"] = {
aliases = {"tình dục"},
display = "[[tình dục]]",
topical_categories = "Tình dục",
}
labels["sex position"] = {
aliases = {"tư thế quan hệ tình dục", "tư thế tình dục"},
display = "[[tình dục]]",
topical_categories = "Tư thế quan hệ tình dục",
}
labels["sexology"] = {
display = "[[tình dục học]]",
topical_categories = {"Tình dục học"},
}
labels["sexuality"] = {
aliases = {"tính dục"},
display = "[[tính dục]]",
topical_categories = {"Tính dục"},
}
labels["Shaivism"] = {
display = "[[Shaivism]]",
topical_categories = {"Shaivism"},
}
labels["shamanism"] = {
display = "[[shamanism]]",
topical_categories = {"Shamanism"},
}
labels["Shamanism"] = "shamanism"
labels["Shinto"] = {
display = "[[Shinto]]",
topical_categories = {"Shinto"},
}
labels["shipping"] = {
display = "[[shipping#Noun|shipping]]",
topical_categories = {"Shipping"},
}
labels["shogi"] = {
display = "[[shogi]]",
topical_categories = {"Shogi"},
}
labels["signal processing"] = {
display = "[[xử lý]] [[tín hiệu]]",
topical_categories = {"Xử lý tín hiệu"},
}
labels["Sikhism"] = {
display = "[[Sikhism]]",
topical_categories = {"Sikhism"},
}
labels["singing"] = {
display = "[[ca hát]]",
topical_categories = {"Ca hát"},
}
labels["skateboarding"] = {
display = "[[skateboarding#Noun|skateboarding]]",
topical_categories = {"Skateboarding"},
}
labels["skating"] = {
display = "[[skating#Noun|skating]]",
topical_categories = {"Skating"},
}
labels["skiing"] = {
aliases = {"trượt tuyết"},
display = "[[trượt tuyết#Danh từ|trượt tuyết]]",
topical_categories = "Trượt tuyết",
}
labels["Slavic god"] = {
display = "[[Slavic]] [[mythology]]",
topical_categories = {"Slavic deities"},
}
labels["Slavic mythology"] = {
display = "[[Slavic]] [[mythology]]",
topical_categories = {"Slavic mythology"},
}
labels["smoking"] = {
display = "[[smoking#Noun|smoking]]",
topical_categories = {"Smoking"},
}
labels["snooker"] = {
display = "[[snooker#Noun|snooker]]",
topical_categories = {"Snooker"},
}
labels["snowboarding"] = {
display = "[[snowboarding#Noun|snowboarding]]",
topical_categories = {"Snowboarding"},
}
labels["soccer"] = {
aliases = {"football", "association football", "bóng đá"},
display = "[[bóng đá]]",
topical_categories = {"Bóng đá"},
}
labels["social sciences"] = {
display = "[[khoa học]] [[xã hội]]",
topical_categories = {"Khoa học xã hội"},
}
labels["social science"] = "social sciences"
labels["socialism"] = {
display = "[[chủ nghĩa xã hội]]",
topical_categories = {"Chủ nghĩa xã hội"},
}
labels["social media"] = {
aliases = {"phương tiện truyền thông mạng xã hội", "truyền thông xã hội"},
display = "[[w:Phương tiện truyền thông mạng xã hội|phương tiện truyền thông mạng xã hội]]",
topical_categories = "Truyền thông xã hội",
}
labels["sociolinguistics"] = {
display = "[[ngôn ngữ học]] [[xã hội]]",
topical_categories = {"Ngôn ngữ học xã hội"},
}
labels["sociology"] = {
aliases = {"xã hội học"},
display = "[[xã hội học]]",
topical_categories = "Xã hội học",
}
labels["softball"] = {
display = "[[softball]]",
topical_categories = {"Softball"},
}
labels["software"] = {
display = "[[phần mềm]]",
topical_categories = {"Phần mềm"},
}
labels["software architecture"] = {
display = "[[software architecture]]",
topical_categories = {"Software engineering", "Programming"},
}
labels["software engineering"] = {
display = "[[software engineering]]",
topical_categories = {"Software engineering"},
}
labels["software development"] = "software engineering"
labels["soil science"] = {
display = "[[soil science]]",
topical_categories = {"Soil science"},
}
labels["sound"] = {
display = "[[sound#Noun|sound]]",
topical_categories = {"Sound"},
}
labels["sound engineering"] = {
display = "[[sound engineering]]",
topical_categories = {"Sound engineering"},
}
labels["South Korean idol fandom"] = {
display = "[[South Korean]] [[idol]] [[fandom]]",
topical_categories = {"South Korean idol fandom"},
}
labels["South Park"] = {
display = "[[w:South Park|South Park]]",
topical_categories = {"South Park"},
}
labels["Soviet Union"] = {
display = "[[Soviet Union]]",
topical_categories = {"Soviet Union"},
}
labels["USSR"] = "Soviet Union"
labels["space flight"] = {
display = "[[space flight]]",
topical_categories = {"Space"},
}
labels["spaceflight"] = "space flight"
labels["space science"] = {
display = "[[space science]]",
topical_categories = {"Space"},
}
labels["space"] = "space science"
labels["spectroscopy"] = {
aliases = {"phổ học"},
display = "[[phổ học]]",
topical_categories = {"Phổ học"},
}
labels["speedrunning"] = {
display = "[[speedrunning]]",
topical_categories = {"Speedrunning"},
}
labels["speedrun"] = "speedrunning"
labels["speedruns"] = "speedrunning"
labels["spiritualism"] = {
display = "[[spiritualism]]",
topical_categories = {"Spiritualism"},
}
labels["sports"] = {
display = "[[thể thao]]",
topical_categories = {"Thể thao"},
}
labels["sport"] = "sports"
labels["thể thao"] = "sports"
labels["squash"] = {
display = "[[w:squash (sport)|squash]]",
topical_categories = {"Squash"},
}
labels["statistics"] = {
display = "[[statistics]]",
topical_categories = {"Statistics"},
}
labels["Star Wars"] = {
display = "[[Star Wars]]",
topical_categories = {"Star Wars"},
}
labels["stock market"] = {
display = "[[stock market]]",
topical_categories = {"Stock market"},
}
labels["stock ticker symbol"] = {
display = "[[stock ticker symbol]]",
topical_categories = {"Stock symbols for companies"},
}
labels["stock symbol"] = "stock ticker symbol"
labels["subculture"] = {
display = "[[subculture]]",
topical_categories = {"Culture"},
}
labels["Sufism"] = {
display = "[[w:Sufism|Sufism]]",
topical_categories = {"Sufism"},
}
labels["Sufi Islam"] = "Sufism"
labels["sumo"] = {
display = "[[sumo]]",
topical_categories = {"Sumo"},
}
labels["surfing"] = {
display = "[[surfing#Noun|surfing]]",
topical_categories = {"Surfing"},
}
labels["surgery"] = {
display = "[[surgery]]",
topical_categories = {"Surgery"},
}
labels["surveying"] = {
display = "[[surveying#Noun|surveying]]",
topical_categories = {"Surveying"},
}
labels["sushi"] = {
display = "[[sushi]]",
topical_categories = {"Sushi"},
}
labels["swimming"] = {
display = "[[bơi lội]]",
topical_categories = {"Bơi lội"},
}
labels["swords"] = {
display = "[[sword]]s",
topical_categories = {"Swords"},
}
labels["systems"] = {
display = "[[hệ thống]]",
topical_categories = {"Hệ thống"},
}
labels["systematics"] = {
display = "[[systematics]]",
topical_categories = {"Systematics"},
}
labels["systems engineering"] = {
display = "[[systems engineering]]",
topical_categories = {"Systems engineering"},
}
labels["systems theory"] = {
display = "[[lý thuyết]] [[hệ thống]]",
topical_categories = {"Lý thuyết hệ thống"},
}
labels["table tennis"] = {
display = "[[table tennis]]",
topical_categories = {"Table tennis"},
}
labels["Taoism"] = {
display = "[[w:Đạo giáo|Đạo giáo]]",
topical_categories = {"Đạo giáo"},
}
labels["Daoism"] = "Taoism"
labels["tarot"] = {
display = "[[tarot]]",
topical_categories = {"Cartomancy"},
}
labels["taxation"] = {
display = "[[taxation]]",
topical_categories = {"Taxation"},
}
labels["tax"] = "taxation"
labels["taxes"] = "taxation"
labels["taxonomy"] = {
display = "[[phân loại học]]",
topical_categories = {"Phân loại học"},
}
labels["phân loại học"] = "taxonomy"
labels["technology"] = {
display = "[[công nghệ]]",
topical_categories = {"Công nghệ"},
}
labels["telecommunications"] = {
display = "[[telecommunications]]",
topical_categories = {"Telecommunications"},
}
labels["telecommunication"] = "telecommunications"
labels["telecom"] = "telecommunications"
labels["telegraphy"] = {
display = "[[telegraphy]]",
topical_categories = {"Telegraphy"},
}
labels["telephony"] = {
display = "[[telephony]]",
topical_categories = {"Telephony"},
}
labels["telephone"] = "telephony"
labels["telephones"] = "telephony"
labels["television"] = {
display = "[[truyền hình]]",
topical_categories = {"Truyền hình"},
}
labels["TV"] = "television"
labels["tennis"] = {
display = "[[tennis]]",
topical_categories = {"Tennis"},
}
labels["teratology"] = {
display = "[[quái thai học]]",
topical_categories = {"Quái thai học"},
}
labels["quái thai học"] = "teratology"
labels["Tetris"] = {
display = "[[Tetris]]",
topical_categories = {"Tetris"},
}
labels["textiles"] = {
aliases = {"dệt may"},
display = "[[dệt may]]",
topical_categories = {"Dệt may"},
}
labels["theater"] = {
aliases = {"sân khấu","theatre"},
display = "[[sân khấu]]",
topical_categories = {"Sân khấu"},
}
labels["theology"] = {
aliases = {"thần học"},
display = "[[thần học]]",
topical_categories = {"Thần học"},
}
labels["thermodynamics"] = {
display = "[[nhiệt động học]]",
topical_categories = {"Nhiệt động học"},
}
labels["Tibetan Buddhism"] = {
display = "[[Tibetan Buddhism]]",
topical_categories = {"Buddhism"},
}
labels["tiddlywinks"] = {
display = "[[tiddlywinks]]",
topical_categories = {"Tiddlywinks"},
}
labels["time"] = {
display = "[[time]]",
topical_categories = {"Time"},
}
labels["topology"] = {
display = "[[topology]]",
topical_categories = {"Topology"},
}
labels["tourism"] = {
display = "[[du lịch]]",
topical_categories = {"Du lịch"},
}
labels["toxicology"] = {
display = "[[toxicology]]",
topical_categories = {"Toxicology"},
}
labels["trading"] = {
display = "[[trading#Noun|trading]]",
topical_categories = {"Trading"},
}
labels["trading cards"] = {
display = "[[trading card]]s",
topical_categories = {"Trading cards"},
}
labels["traditional Chinese medicine"] = {
display = "[[đông y]]",
topical_categories = {"Đông y"},
}
labels["TCM"] = "traditional Chinese medicine"
labels["Chinese medicine"] = "traditional Chinese medicine"
labels["transgender"] = {
display = "[[người]] [[chuyển]] [[giới]]",
topical_categories = {"Người chuyển giới"},
}
labels["nghiên cứu dịch thuật"] = {
aliases = {"translation studies"},
display = "[[translation studies|nghiên cứu dịch thuật]]",
topical_categories = {"Nghiên cứu dịch thuật"},
}
labels["transport"] = {
display = "[[giao thông]]",
topical_categories = {"Giao thông"},
}
labels["transportation"] = "transport"
labels["traumatology"] = {
display = "[[traumatology]]",
topical_categories = {"Emergency medicine"},
}
labels["travel"] = {
display = "[[lữ hành]]",
topical_categories = {"Lữ hành"},
}
labels["trigonometry"] = {
display = "[[lượng giác]]",
topical_categories = {"Lượng giác"},
}
labels["trigonometric function"] = {
display = "[[hàm]] [[lượng giác]]",
topical_categories = {"Hàm lượng giác"},
}
labels["two-up"] = {
display = "[[two-up]]",
topical_categories = {"Two-up"},
}
labels["typography"] = {
display = "[[typography]]",
topical_categories = {"Typography"},
}
labels["typesetting"] = "typography"
labels["ufology"] = {
display = "[[ufology]]",
topical_categories = {"Ufology"},
}
labels["underwater diving"] = {
display = "[[underwater]] [[diving#Noun|diving]]",
topical_categories = {"Underwater diving"},
}
labels["units of measure"] = {
display = "[[đơn vị]] [[đo]]",
topical_categories = {"Đơn vị đo"},
}
labels["unit of measurement"] = "units of measure"
labels["scuba"] = "underwater diving"
labels["scuba diving"] = "underwater diving"
labels["urban studies"] = {
display = "[[urban studies]]",
topical_categories = {"Urban studies"},
}
labels["urbanism"] = "urban studies"
labels["Vaishnavism"] = {
display = "[[Vaishnavism]]",
topical_categories = {"Vaishnavism"},
}
labels["Valentinianism"] = {
display = "[[w:Valentinianism|Valentinianism]]",
topical_categories = {"Valentinianism"},
}
labels["valentinianism"] = "Valentinianism"
labels["Vedic religion"] = {
display = "[[w:Historical Vedic religion|Vedic religion]]",
topical_categories = {"Vedic religion"},
}
labels["Vedic Hinduism"] = "Vedic religion"
labels["Ancient Hinduism"] = "Vedic religion"
labels["ancient Hinduism"] = "Vedic religion"
labels["Vedism"] = "Vedic religion"
labels["Vedicism"] = "Vedic religion"
labels["vegetable"] = {
display = "[[rau]]",
topical_categories = {"Rau"},
}
labels["vegetables"] = "vegetable"
labels["vehicles"] = {
display = "[[phương tiện]] [[giao thông]]",
topical_categories = {"Phương tiện giao thông"},
}
labels["vehicle"] = "vehicles"
labels["veterinary medicine"] = {
display = "[[thú y]]",
topical_categories = {"Thú y"},
}
labels["video compression"] = {
display = "[[nén]] [[video]]",
topical_categories = {"Nén video"},
}
labels["video games"] = {
display = "[[video game]]",
topical_categories = {"Video game"},
}
labels["trò chơi video"] = "video games"
labels["video game"] = "video games"
labels["video gaming"] = "video games"
labels["virology"] = {
display = "[[virus học]]",
topical_categories = {"Virus học"},
}
labels["virus học"] = "virology"
labels["vi rút học"] = "virology"
labels["vi-rút học"] = "virology"
labels["virus"] = {
display = "[[virology]]",
topical_categories = {"Viruses"},
}
labels["viticulture"] = {
display = "[[viticulture]]",
topical_categories = {"Horticulture", "Wine"},
}
labels["volcanology"] = {
display = "[[núi lửa]] [[học]]",
topical_categories = {"Núi lửa học"},
}
labels["vulcanology"] = "volcanology"
labels["volleyball"] = {
display = "[[volleyball]]",
topical_categories = {"Volleyball"},
}
labels["voodoo"] = {
display = "[[voodoo]]",
topical_categories = {"Voodoo"},
}
labels["weather"] = {
display = "[[thời tiết]]",
topical_categories = {"Thời tiết"},
}
labels["dệt"] = {
aliases = {"weaving"},
display = "[[dệt]]",
topical_categories = {"Dệt"},
}
labels["web design"] = {
display = "[[web design]]",
topical_categories = {"Web design"},
}
labels["web development"] = {
display = "[[web development]]",
topical_categories = {"Programming", "Web design"},
}
labels["cử tạ"] = {
aliases = {"weightlifting"},
display = "[[cử tạ]]",
topical_categories = {"Cử tạ"},
}
labels["white supremacy"] = { -- but also this is often used to indicate white-supremacist-used jargon; cf "Nazism"
Wikipedia = "White supremacy",
topical_categories = {"White supremacist ideology"},
}
alias("white supremacy", {"white nationalism", "white nationalist", "white power", "white racism", "white supremacist ideology", "white supremacism", "white supremacist" })
labels["wine"] = {
display = "[[wine]]",
topical_categories = {"Rượu vang"},
}
labels["winemaking"] = {
display = "[[winemaking]]",
topical_categories = {"Wine"},
}
labels["woodworking"] = {
display = "[[woodworking]]",
topical_categories = {"Woodworking"},
}
labels["winter sports"] = {
aliases = {"môn thể thao mùa đông"},
display = "[[môn]] [[thể thao]] [[mùa đông]]",
topical_categories = {"Môn thể thao mùa đông"},
}
labels["wrestling"] = {
display = "[[wrestling#Noun|wrestling]]",
topical_categories = {"Wrestling"},
}
labels["writing"] = {
display = "[[writing#Noun|writing]]",
topical_categories = {"Writing"},
}
labels["Yazidism"] = {
display = "[[Yazidism]]",
topical_categories = {"Yazidism"},
}
labels["Yezidism"] = "Yazidism"
labels["yoga"] = {
display = "[[yoga]]",
topical_categories = {"Yoga"},
}
labels["zoology"] = {
display = "[[động vật học]]",
topical_categories = {"Động vật học"},
}
labels["động vật học"] = "zoology"
labels["zootomy"] = {
display = "[[zootomy]]",
topical_categories = {"Animal body parts"},
}
labels["Zoroastrianism"] = {
display = "[[Zoroastrianism]]",
topical_categories = {"Zoroastrianism"},
}
-- Labels with set-type categories
-- TODO: These are probably misuses of the label template, and should be deprecated
labels["amino acid"] = {
display = "[[biochemistry]]",
topical_categories = {"Amino acids"},
}
labels["thành phần kiến trúc"] = {
aliases = {"architectural element", "architectural elements"},
display = "[[thành phần]] [[kiến trúc]]",
topical_categories = {"Thành phần kiến trúc"},
}
labels["asterism"] = {
display = "[[uranography]]",
topical_categories = {"Asterisms"},
}
labels["biblical character"] = {
display = "[[nhân vật]] [[Kinh thánh]]",
topical_categories = {"Nhân vật Kinh Thánh"},
}
labels["Biblical character"] = "biblical character"
labels["biblical figure"] = "biblical character"
labels["Biblical figure"] = "biblical character"
labels["bibliography"] = {
display = "[[bibliography]]",
topical_categories = {"Bibliography"},
}
labels["bicycle parts"] = {
display = "[[w:List of bicycle parts|cycling]]",
topical_categories = {"Bicycle parts"},
}
labels["book of the bible"] = {
display = "[[Bible|biblical]]",
topical_categories = {"Books of the Bible"},
}
labels["brass instruments"] = {
display = "[[music]]",
topical_categories = {"Brass instruments"},
}
labels["brass instrument"] = "brass instruments"
labels["canid"] = {
display = "[[zoology]]",
topical_categories = {"Canids"},
}
labels["carbohydrate"] = {
display = "[[biochemistry]]",
topical_categories = {"Carbohydrates"},
}
labels["carboxylic acid"] = {
display = "[[:w:vi:Acid carboxylic|Acid carboxylic]]",
topical_categories = {"Acid carboxylic"},
}
labels["coenzyme"] = {
display = "[[biochemistry]]",
topical_categories = {"Coenzymes"},
}
labels["constellation"] = {
display = "[[chòm sao]]",
topical_categories = {"Chòm sao"},
}
labels["cookware"] = {
display = "[[cooking#Danh từ|cooking]]",
topical_categories = {"Cookware and bakeware"},
}
labels["demonym"] = {
display = "[[demonym]]",
topical_categories = {"Demonyms"},
}
labels["disease"] = {
aliases = {"diseases", "bệnh"},
display = "[[bệnh]]",
topical_categories = {"Bệnh"},
}
labels["E number"] = {
display = "[[food]] [[manufacture]]",
plain_categories = {"E numbers"},
}
labels["Egyptian god"] = {
display = "[[Egyptian]] [[mythology]]",
topical_categories = {"Egyptian deities"},
}
labels["element symbol"] = {
display = "[[hóa học]]",
aliases = {"ký hiệu hóa học", "kí hiệu hóa học", "ký hiệu hoá học", "kí hiệu hoá học"},
plain_categories = {"Ký hiệu nguyên tố hóa học"},
}
labels["enzyme"] = {
display = "[[biochemistry]]",
topical_categories = {"Enzymes"},
}
labels["fatty acid"] = {
display = "[[:w:vi:Acid béo|Acid béo]]",
topical_categories = {"Acid béo"},
}
labels["felid"] = {
display = "[[zoology]]",
topical_categories = {"Felids"},
}
labels["cat"] = "felid"
labels["fictional character"] = {
display = "[[fiction]]",
topical_categories = {"Fictional characters"},
}
labels["figure of speech"] = {
aliases = {"Hình thái tu từ"},
display = "[[tu từ học]]",
topical_categories = "Hình thái tu từ",
}
labels["fish"] = {
display = "[[zoology]]",
topical_categories = {"Fish"},
}
labels["footwear"] = {
display = "[[footwear]]",
topical_categories = {"Footwear"},
}
labels["functional group prefix"] = {
display = "[[organic chemistry]]",
topical_categories = {"Functional group prefixes"},
}
labels["functional group suffix"] = {
display = "[[organic chemistry]]",
topical_categories = {"Functional group suffixes"},
}
labels["galaxy"] = {
display = "[[astronomy]]",
topical_categories = {"Galaxies"},
}
labels["genetic disorder"] = {
display = "[[medical]] [[genetics]]",
topical_categories = {"Genetic disorders"},
}
labels["Greek god"] = {
display = "[[vị thần]] [[Hy Lạp]]",
topical_categories = {"Các vị thần Hy Lạp"},
}
alias("Greek god", {"Greek goddess"})
labels["heraldic charge"] = {
aliases = {"heraldiccharge"},
display = "[[huy hiệu học]]",
topical_categories = "Heraldic charges",
}
labels["Hindu god"] = {
display = "[[thần thánh]] [[Ấn Độ]]",
topical_categories = {"Thần thánh Ấn Độ"},
}
labels["hormone"] = {
display = "[[biochemistry]]",
topical_categories = {"Nội tiết tố"},
}
labels["hydrocarbon chain prefix"] = {
display = "[[organic chemistry]]",
topical_categories = {"Hydrocarbon chain prefixes"},
}
labels["hydrocarbon chain suffix"] = {
display = "[[organic chemistry]]",
topical_categories = {"Hydrocarbon chain suffixes"},
}
labels["incoterm"] = {
display = "[[Incoterm]]",
topical_categories = {"Incoterms"},
}
labels["inorganic compound"] = {
aliases = {"hợp chất vô cơ"},
display = "[[hóa học vô cơ]]",
topical_categories = {"Hợp chất vô cơ"},
}
labels["isotope"] = {
display = "[[physics]]",
topical_categories = {"Isotopes"},
}
labels["landforms"] = {
aliases = {"địa mạo"},
display = "[[địa mạo]]",
topical_categories = "Địa mạo",
}
labels["logical fallacy"] = {
display = "[[rhetoric]]",
topical_categories = {"Logical fallacies"},
}
labels["lutherie"] = {
display = "[[lutherie]]",
topical_categories = {"Lutherie"},
}
labels["Mesopotamian god"] = {
display = "[[Mesopotamian]] [[mythology]]",
topical_categories = {"Mesopotamian deities"},
}
labels["metamaterial"] = {
display = "[[physics]]",
topical_categories = {"Metamaterials"},
}
labels["military ranks"] = {
display = "[[military]]",
topical_categories = {"Military ranks"},
}
labels["military rank"] = "military ranks"
labels["military unit"] = {
display = "[[đơn vị]] [[quân đội]]",
topical_categories = {"Đơn vị quân đội"},
}
labels["mineral"] = {
display = "[[khoáng vật]]",
topical_categories = {"Khoáng vật"},
}
labels["mobile phones"] = {
display = "[[điện thoại]] [[di động]]",
topical_categories = {"Điện thoại di động"},
}
labels["cell phone"] = "mobile phones"
labels["cell phones"] = "mobile phones"
labels["mobile phone"] = "mobile phones"
labels["mobile telephony"] = "mobile phones"
labels["muscle"] = {
display = "[[anatomy]]",
topical_categories = {"Muscles"},
}
labels["mushroom"] = {
display = "[[mycology]]",
topical_categories = {"Mushrooms"},
}
labels["mushrooms"] = "mushroom"
labels["musical instruments"] = {
display = "[[nhạc cụ]]",
topical_categories = {"Nhạc cụ"},
}
labels["musical instrument"] = "musical instruments"
labels["music genre"] = {
aliases = {"thể loại âm nhạc", "thể loại nhạc"},
display = "[[âm nhạc]]",
topical_categories = {"Thể loại nhạc"},
}
labels["musician"] = {
display = "[[music]]",
topical_categories = {"Musicians"},
}
labels["mythological creature"] = {
aliases = {"mythological creatures", "sinh vật huyền thoại", "sinh vật thần thoại"},
display = "[[thần thoại]]",
topical_categories = "Sinh vật thần thoại",
}
labels["neurotoxin"] = {
display = "[[neurotoxicology]]",
topical_categories = {"Neurotoxins"},
}
labels["neurotransmitter"] = {
display = "[[biochemistry]]",
topical_categories = {"Neurotransmitters"},
}
labels["organic compound"] = {
aliases = {"hợp chất hữu cơ"},
display = "[[hóa học hữu cơ]]",
topical_categories = {"Hợp chất hữu cơ"},
}
labels["part of speech"] = {
aliases = {"từ loại"},
display = "[[ngữ pháp]]",
topical_categories = "Từ loại",
}
labels["particle"] = {
display = "[[physics]]",
topical_categories = {"Subatomic particles"},
}
labels["percussion instruments"] = {
display = "[[music]]",
topical_categories = {"Percussion instruments"},
}
labels["percussion instrument"] = "percussion instruments"
labels["thuốc"] = {
aliases = {"pharmaceutical drug","pharmaceutical drugs"},
display = "[[thuốc]]",
topical_categories = {"Thuốc"},
}
labels["pharmaceutical effect"] = {
display = "[[pharmacology]]",
topical_categories = {"Pharmaceutical effects"},
}
labels["plant"] = {
display = "[[thực vật]]",
topical_categories = {"Thực vật"},
}
labels["plant disease"] = {
display = "[[phytopathology]]",
topical_categories = {"Plant diseases"},
}
labels["poison"] = {
display = "[[toxicology]]",
topical_categories = {"Poisons"},
}
labels["political subdivision"] = {
display = "[[government]]",
topical_categories = {"Political subdivisions"},
}
labels["protein"] = {
display = "[[protein]]",
topical_categories = {"Protein"},
}
labels["proteins"] = "protein"
labels["rock"] = {
alias = {"đá"},
display = "[[thạch luận]]",
topical_categories = "Đá",
}
labels["Roman god"] = {
display = "[[Roman]] [[mythology]]",
topical_categories = {"Roman deities"},
}
alias("Roman god", {"Roman goddess"})
labels["schools"] = {
display = "[[education]]",
topical_categories = {"Schools"},
}
labels["SEO"] = {
display = "[[search engine optimization|SEO]]",
topical_categories = {"Internet", "Marketing"},
}
labels["skeleton"] = {
display = "[[giải phẫu học]]",
topical_categories = "Bộ xương",
}
labels["standard of identity"] = {
display = "[[standard of identity|standards of identity]]",
topical_categories = {"Standards of identity"},
}
labels["star"] = {
display = "[[astronomy]]",
topical_categories = {"Stars"},
}
labels["steroid"] = {
display = "[[biochemistry]]",
topical_categories = {"Steroids"},
}
labels["steroid hormone"] = {
display = "[[biochemistry]], [[steroids]]",
topical_categories = {"Hormones"},
}
labels["steroid drug"] = "steroid hormone"
labels["string instruments"] = {
display = "[[music]]",
topical_categories = {"String instruments"},
}
labels["string instrument"] = "string instruments"
labels["surface feature"] = {
display = "[[planetology]]",
topical_categories = {"Planetary nomenclature"},
}
labels["sugar acid"] = {
display = "[[organic chemistry]]",
topical_categories = {"Sugar acids"},
}
labels["symptom"] = {
display = "[[medicine]]",
topical_categories = {"Medical signs and symptoms"},
}
labels["taxonomic name"] = {
display = "[[taxonomy]]",
topical_categories = {"Taxonomic names"},
}
labels["tincture"] = {
display = "[[heraldry]]",
topical_categories = {"Heraldic tinctures"},
}
labels["video game genre"] = {
display = "[[video game]]s",
topical_categories = {"Video game genres"},
}
labels["vitamin"] = {
display = "[[biochemistry]]",
topical_categories = {"Vitamins"},
}
labels["warships"] = {
display = "[[tàu chiến]]",
topical_categories = {"Tàu chiến"},
}
labels["water"] = {
display = "[[nước]]",
topical_categories = {"Nước"},
}
labels["watercraft"] = {
display = "[[nautical]]",
topical_categories = {"Watercraft"},
}
labels["weaponry"] = {
display = "[[weaponry]]",
topical_categories = {"Weapons"},
}
labels["weapons"] = "weaponry"
labels["Wicca"] = {
display = "[[Wicca]]",
topical_categories = {"Wicca"},
}
labels["Wikimedia jargon"] = {
display = "[[w:Wikimedia Foundation|Wikimedia]] [[jargon]]",
topical_categories = {"Wikimedia"},
}
labels["WMF"] = "Wikimedia jargon"
labels["WMF jargon"] = "Wikimedia jargon"
labels["Wiktionary"] = "Wikimedia jargon"
labels["Wiktionary jargon"] = "Wikimedia jargon"
labels["wind instruments"] = {
display = "[[music]]",
topical_categories = {"Wind instruments"},
}
labels["wind instrument"] = "wind instruments"
labels["woodwind instruments"] = {
display = "[[music]]",
topical_categories = {"Woodwind instruments"},
}
labels["woodwind instrument"] = "woodwind instruments"
labels["xiangqi"] = {
display = "[[xiangqi]]",
topical_categories = {"Xiangqi"},
}
labels["Chinese chess"] = "xiangqi"
labels["yoga pose"] = {
display = "[[yoga]]",
topical_categories = {"Yoga poses"},
}
labels["asana"] = "yoga pose"
labels["zodiac constellations"] = {
display = "[[astronomy]]",
topical_categories = {"Constellations in the zodiac"},
}
-- Deprecated/do not use warning (ambiguous, unsuitable etc)
labels["deprecated label"] = {
display = "<span style=\"color:red;\"><b>deprecated label</b></span>",
deprecated = true
}
alias("deprecated label", {"currency", "emergency", "greekmyth", "industry", "morphology", "musici", "quantum", "vector"})
return require("Module:labels").finalize_data(labels)
jwzgfd2xcdpv2voq9ula7aprspjb2uy
Mô đun:languages/data/3/o
828
272281
2573699
2573221
2026-10-26T15:36:25Z
Lcsnes
40261
2573699
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["oaa"] = {
"tiếng Orok",
33928,
"tuw-nan",
"Cyrl, Latn",
"Tiếng Orok",
"Orok",
}
m["oac"] = {
"tiếng Oroch",
33650,
"tuw-udg",
"Latn, Cyrl",
"Tiếng Oroch",
"Oroch",
}
m["oav"] = {
"Old Avar",
nil,
"cau-ava",
"Geor",
}
m["obi"] = {
"Obispeño",
1288385,
"nai-chu",
"Latn",
}
m["obk"] = {
"Southern Bontoc",
nil,
"phi",
"Latn",
}
m["obl"] = {
"Oblo",
36309,
}
m["obm"] = {
"Moabite",
36385,
"sem-can",
"Phnx",
translit = "Phnx-translit",
}
m["obo"] = {
"Obo Manobo",
12953699,
"mno",
"Latn",
}
m["obr"] = {
"tiếng Miến Điện cổ",
17006600,
"tbq-brm",
"Mymr, Latn", --and also Pallava
"Tiếng Miến Điện cổ",
"Miến Điện cổ",
}
m["obt"] = {
"tiếng Breton cổ",
3558112,
"cel-brs",
"Latn",
"Tiếng Breton cổ",
"Breton cổ",
}
m["obu"] = {
"Obulom",
3813403,
"nic-cde",
"Latn",
}
m["oca"] = {
"tiếng Ocaina",
3182577,
"sai-wit",
"Latn",
"Tiếng Ocaina",
"Ocaina",
}
m["och"] = {
"tiếng Hán thượng cổ",
35137,
"zhx",
"Hant",
"Tiếng Hán thượng cổ",
"Hán thượng cổ",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["ocm"] = {
"tiếng Chăm cổ",
105197086,
"cmc",
"Latn, Brah",
"Tiếng Chăm cổ",
"Chăm cổ",
}
m["oco"] = {
"tiếng Cornwall cổ",
48304520,
"cel-brs",
"Latn",
"Tiếng Cornwall cổ",
"Cornwall cổ",
}
m["ocu"] = {
"Tlahuica",
10751739,
"omq",
"Latn",
}
m["oda"] = {
"Odut",
3915388,
"nic-uce",
"Latn",
ancestors = "mfn",
}
m["odk"] = {
"Od",
7077191,
"inc-wes",
"Arab",
}
m["odt"] = {
"tiếng Hà Lan cổ",
443089,
"gmw-frk",
"Latn, Runr",
"Tiếng Hà Lan cổ",
"Hà Lan cổ",
ancestors = "frk",
entry_name = {remove_diacritics = c.circ .. c.macron},
}
m["odu"] = {
"Odual",
3813392,
"nic-cde",
"Latn",
}
m["ofo"] = {
"Ofo",
3349758,
"sio-ohv",
}
m["ofs"] = {
"tiếng Frisia cổ",
35133,
"gmw-fri",
"Latn",
"Tiếng Frisia cổ",
"Frisia cổ",
entry_name = {remove_diacritics = c.circ .. c.macron},
sort_key = {
from = {"æ", "ð", "þ"},
to = {"ae", "t" .. p[1], "t" .. p[2]}
},
}
m["ofu"] = {
"Efutop",
35297,
"nic-eko",
"Latn",
}
m["ogb"] = {
"Ogbia",
3813400,
"nic-cde",
"Latn",
}
m["ogc"] = {
"Ogbah",
36291,
"alv-igb",
"Latn",
}
m["oge"] = {
"tiếng Gruzia cổ",
34834,
"ccs-gzn",
"Geor, Geok",
"Tiếng Gruzia cổ",
"Gruzia cổ",
translit = {
Geor = "Geor-translit",
Geok = "Geok-translit",
},
override_translit = true,
entry_name = {remove_diacritics = c.circ},
}
m["ogg"] = {
"Ogbogolo",
3813405,
"nic-cde",
"Latn",
}
m["ogo"] = {
"Khana",
3914409,
"nic-ogo",
"Latn",
}
m["ogu"] = {
"tiếng Ogbronuagum",
3914485,
"nic-cde",
"Latn",
"Tiếng Ogbronuagum",
"Ogbronuagum",
}
m["ohu"] = {
"Old Hungarian",
nil,
"urj-ugr",
"Latn",
}
m["oia"] = {
"tiếng Oirata",
56738,
"paa-eti",
"Latn",
}
m["oin"] = {
"Inebu One",
12953782,
"qfa-tor",
}
m["ojb"] = {
"tiếng Ojibwe Tây Bắc",
7060356,
"alg",
"Latn, Cans",
"Tiếng Ojibwe Tây Bắc",
"Ojibwe Tây Bắc",
ancestors = "oj",
}
m["ojc"] = {
"Central Ojibwa",
5061548,
"alg",
"Latn",
ancestors = "oj",
}
m["ojg"] = {
"tiếng Ojibwe Đông",
5330342,
"alg",
"Latn, Cans",
"Tiếng Ojibwe Đông",
"Ojibwe Đông",
ancestors = "oj",
}
m["ojp"] = {
"tiếng Nhật thượng cổ",
5736700,
"jpx",
"Jpan",
sort_key = s["Jpan-sortkey"],
}
m["ojs"] = {
"tiếng Ojibwe Severn",
56494,
"alg",
"Latn, Cans",
"Tiếng Ojibwe Severn",
"Ojibwe Severn",
ancestors = "oj",
}
m["ojv"] = {
"Ontong Java",
7095071,
"poz-pnp",
"Latn",
}
m["ojw"] = {
"tiếng Ojibwe Tây",
3474222,
"alg",
"Latn, Cans",
"Tiếng Ojibwe Tây",
"Ojibwe Tây",
ancestors = "oj",
}
m["oka"] = {
"tiếng Okanagan",
2984602,
"sal",
"Latn",
"Tiếng Okanagan",
"Okanagan",
}
m["okb"] = {
"Okobo",
3813398,
"nic-lcr",
"Latn",
}
m["okd"] = {
"Okodia",
36300,
"ijo",
}
m["oke"] = {
"Okpe (Southwestern Edo)",
268924,
"alv-swd",
"Latn",
}
m["okg"] = {
"Kok-Paponk",
nil,
"aus-pmn",
"Latn",
}
m["okh"] = {
"Koresh-e Rostam",
6432160,
"xme-ttc",
ancestors = "xme-ttc-cen",
}
m["oki"] = {
"Okiek",
56367,
"sdv-kln",
"Latn",
}
m["okj"] = {
"Oko-Juwoi",
3436832,
"qfa-adc",
}
m["okk"] = {
"Kwamtim One",
19830649,
"qfa-tor",
"Latn",
}
m["okl"] = {
"Old Kentish Sign Language",
7084319,
"sgn",
}
m["okm"] = {
"tiếng Triều Tiên trung đại",
715339,
"qfa-kor",
"Kore",
"Tiếng Triều Tiên trung đại",
"Triều Tiên trung đại",
ancestors = "oko",
translit = "okm-translit",
entry_name = s["Kore-entryname"],
}
m["okn"] = {
"tiếng Okinoerabu",
3350036,
"jpx-nry",
"Jpan",
"Tiếng Okinoerabu",
"Okinoerabu",
translit = s["Jpan-translit"],
sort_key = s["Jpan-sortkey"],
}
m["oko"] = {
"tiếng Triều Tiên cổ",
715364,
"qfa-kor",
"Kore",
"Tiếng Triều Tiên cổ",
"Triều Tiên cổ",
entry_name = s["Kore-entryname"],
}
m["okr"] = {
"tiếng Kirike",
11006763,
"ijo",
"Latn",
"Tiếng Kirike",
"Kirike",
}
m["oks"] = {
"Oko-Eni-Osayen",
36302,
"alv-von",
"Latn",
}
m["oku"] = {
"Oku",
36289,
"nic-rnc",
"Latn",
}
m["okv"] = {
"Orokaiva",
7103752,
"ngf",
"Latn",
}
m["okx"] = {
"Okpe (Northwestern Edo)",
7082547,
"alv-nwd",
"Latn",
}
m["okz"] = {
"tiếng Khmer cổ",
9205,
"mkh-kmr",
"Latn, Khmr", --and also Pallava
"Tiếng Khmer cổ",
"Khmer cổ",
}
m["old"] = {
"Mochi",
12952852,
"bnt-chg",
"Latn",
}
m["ole"] = {
"tiếng Ole",
3695204,
"sit-bdi",
"Tibt, Latn",
"Tiếng Ole",
"Ole",
translit = {Tibt = "Tibt-translit"},
override_translit = true,
display_text = {Tibt = s["Tibt-displaytext"]},
entry_name = {Tibt = s["Tibt-entryname"]},
sort_key = {Tibt = "Tibt-sortkey"},
}
m["olm"] = {
"Oloma",
3441166,
"alv-nwd",
"Latn",
}
m["olo"] = {
"tiếng Livvi",
36584,
"urj-fin",
"Latn",
"Tiếng Livvi",
"Livvi",
}
m["olr"] = {
"Olrat",
3351562,
"poz-vnc",
}
m["olt"] = {
"tiếng Litva cổ",
17417801,
"bat-eas",
"Latn",
"Tiếng Litva cổ",
"Litva cổ",
entry_name = {remove_diacritics = c.grave .. c.acute .. c.tilde},
}
m["olu"] = {
"Kuvale",
6448765,
"bnt-swb",
"Latn",
}
m["oma"] = {
"tiếng Omaha-Ponca",
2917968,
"sio-dhe",
"Latn",
"Tiếng Omaha-Ponca",
"Omaha-Ponca",
}
m["omb"] = {
"Omba",
2841471,
"poz-vnc",
"Latn",
}
m["omc"] = {
"Mochica",
1951641,
}
m["omg"] = {
"Omagua",
33663,
"tup-gua",
"Latn",
}
m["omi"] = {
"Omi",
56795,
"csu-mma",
}
m["omk"] = {
"tiếng Omok",
4334657,
"qfa-yuk",
"Cyrl",
"Tiếng Omok",
"Omok",
translit = "omk-translit",
}
m["oml"] = {
"Ombo",
7089928,
"bnt-tet",
"Latn",
}
m["omn"] = {
"Minoan",
1669994,
nil,
"Lina",
}
m["omo"] = {
"Utarmbung",
7902577,
"ngf",
"Latn",
}
m["omp"] = {
"Old Manipuri",
nil,
"sit",
"Mtei",
translit = "Mtei-translit",
}
m["omr"] = {
"tiếng Marathi cổ",
65455881,
"inc-sou",
"Deva, Modi",
"Tiếng Marathi cổ",
"Marathi cổ",
translit = {
Deva = "sa-translit",
Modi = "Modi-translit",
},
}
m["omt"] = {
"Omotik",
36313,
"sdv-nis",
}
m["omu"] = {
"Omurano",
1957612,
}
m["omw"] = {
"South Tairora",
20210553,
"paa-kag",
"Latn",
}
m["omx"] = {
"tiếng Môn cổ",
111364697,
"mkh-mnc",
"Mymr, Latn", --and also Pallava
"Tiếng Môn cổ",
"Môn cổ",
}
m["omy"] = {
"tiếng Mã Lai cổ",
31775823,
"poz",
"Kawi", --and also Pallava
"Tiếng Mã Lai cổ",
"Mã Lai cổ",
}
m["ona"] = {
"Selk'nam",
2721227,
"sai-cho",
"Latn",
}
m["onb"] = {
"tiếng Lâm Cao",
7093790,
"qfa-onb",
"Latn",
"Tiếng Lâm Cao",
"Lâm Cao",
}
m["one"] = {
"tiếng Oneida",
857858,
"iro-nor",
"Latn",
"Tiếng Oneida",
"Oneida",
}
m["ong"] = {
"Olo",
592162,
"qfa-tor",
"Latn",
}
m["oni"] = {
"Onin",
7093910,
"poz-cet",
"Latn",
}
m["onj"] = {
"Onjob",
7093968,
"ngf",
"Latn",
}
m["onk"] = {
"Kabore One",
12953783,
"qfa-tor",
"Latn",
}
m["onn"] = {
"Onobasulu",
7094437,
"ngf",
"Latn",
}
m["ono"] = {
"Onondaga",
1077450,
"iro-nor",
"Latn",
ancestors = "iro-oon",
}
m["onp"] = {
"Sartang",
7424639,
"sit-khb",
}
m["onr"] = {
"Northern One",
19830648,
"qfa-tor",
"Latn",
}
m["ons"] = {
"Ono",
11732548,
"ngf",
"Latn",
}
m["ont"] = {
"Ontenu",
3352827,
}
m["onu"] = {
"Unua",
3552042,
"poz-vnc",
"Latn",
}
m["onw"] = {
"tiếng Nubia cổ",
2268,
"nub",
"Copt",
"Tiếng Nubia cổ",
"Nubia cổ",
translit = "Copt-translit",
sort_key = "cop-sortkey",
}
m["onx"] = {
"Pidgin Onin",
12953788,
"crp",
"Latn",
ancestors = "oni",
}
m["ood"] = {
"tiếng O'odham",
2393095,
"azc-pim",
"Latn",
"Tiếng O'odham",
"O'odham",
}
m["oog"] = {
"Ong",
12953787,
"mkh-kat",
}
m["oon"] = {
"tiếng Önge",
2475551,
"qfa-ong",
"Latn",
"Tiếng Önge",
"Önge",
}
m["oor"] = {
"Oorlams",
2484337,
}
m["oos"] = {
"tiếng Ossetia cổ",
65455882,
"xsc",
"Polyt, Latn",
"Tiếng Ossetia cổ",
"Ossetia cổ",
ancestors = "os-pro",
translit = {Polyt = "grc-translit"},
entry_name = {
Polyt = s["Polyt-entryname"],
},
sort_key = {
Polyt = s["Grek-sortkey"],
},
}
m["opa"] = {
"Okpamheri",
3913331,
"alv-nwd",
"Latn",
}
m["opk"] = {
"Kopkaka",
6431129,
"ngf-okk",
"Latn",
}
m["opm"] = {
"Oksapmin",
1068097,
"ngf",
"Latn",
}
m["opo"] = {
"Opao",
7095585,
"ngf",
"Latn",
}
m["opt"] = {
"Opata",
2304583,
"azc-trc",
"Latn",
}
m["opy"] = {
"Ofayé",
3446691,
"sai-mje",
"Latn",
}
m["ora"] = {
"Oroha",
36298,
"poz-sls",
}
m["orc"] = {
"tiếng Orma",
2919128,
"cus-eas",
"Latn",
"Tiếng Orma",
"Orma",
}
m["ore"] = {
"Orejón",
3355834,
"sai-tuc",
"Latn",
}
m["org"] = {
"Oring",
3915308,
"nic-ucn",
"Latn",
}
m["orh"] = {
"tiếng Oroqen",
1367309,
"tuw-ewe",
"Latn",
"Tiếng Oroqen",
"Oroqen",
}
m["oro"] = {
"Orokolo",
7103758,
"ngf",
"Latn",
}
m["orr"] = {
"Oruma",
36299,
"ijo",
"Latn",
}
m["ort"] = {
"tiếng Oriya Adiwasi",
12953791,
"inc-eas",
"Orya",
"Tiếng Oriya Adiwasi",
"Oriya Adiwasi",
ancestors = "or",
}
m["oru"] = {
"tiếng Ormur",
33740,
"ira-orp",
"fa-Arab",
"Tiếng Ormur",
"Ormur",
}
m["orv"] = {
"tiếng Slav Đông cổ",
35228,
"zle",
"Cyrs",
"Tiếng Slav Đông cổ",
"Slav Đông cổ",
translit = {Cyrs = "Cyrs-translit"},
entry_name = s["Cyrs-entryname"],
sort_key = { from = {"Ꙑ", "ꙑ"} , to = { "ы" .. p[1], "ы" .. p[1],} },
}
m["orw"] = {
"Oro Win",
3450423,
"sai-cpc",
"Latn",
}
m["orx"] = {
"Oro",
3813396,
"nic-lcr",
"Latn",
}
m["orz"] = {
"tiếng Ormu",
7103494,
"poz-ocw",
"Latn",
"Tiếng Ormu",
"Ormu"
}
m["osa"] = {
"tiếng Osage",
2600085,
"sio-dhe",
"Latn, Osge",
"Tiếng Osage",
"Osage",
}
m["osc"] = {
"tiếng Osci",
36653,
"itc-sbl",
"Ital, Latn, Polyt",
"Tiếng Osci",
"Osci",
translit = {
Ital = "Ital-translit",
Polyt = "grc-translit",
},
entry_name = {
Polyt = s["Polyt-entryname"],
},
sort_key = {
Polyt = s["Grek-sortkey"],
},
}
m["osi"] = {
"tiếng Osing",
2701322,
"poz-sus",
"Latn",
"Tiếng Osing",
"Osing",
}
m["osn"] = {
"tiếng Sunda cổ",
56197074,
"poz-msa",
"Latn, Sund, Kawi",
"Tiếng Sunda cổ",
"Sunda cổ",
}
m["oso"] = {
"Ososo",
3913398,
"alv-yek",
"Latn",
}
m["osp"] = {
"tiếng Tây Ban Nha cổ",
1088025,
"roa-ibe",
"Latn",
"Tiếng Tây Ban Nha cổ",
"Tây Ban Nha cổ",
}
m["ost"] = {
"tiếng Osatu",
36243,
"nic-grs",
"Latn",
"Tiếng Osatu",
"Osatu",
}
m["osu"] = {
"Southern One",
12953785,
"qfa-tor",
"Latn",
}
m["osx"] = {
"tiếng Saxon cổ",
35219,
"gmw-lgm",
"Latn",
"Tiếng Saxon cổ",
"Saxon cổ",
entry_name = {remove_diacritics = c.circ .. c.macron},
}
m["ota"] = {
"tiếng Thổ Nhĩ Kỳ Ottoman",
36730,
"trk-ogz",
"ota-Arab, Armn",
"Tiếng Thổ Nhĩ Kỳ Ottoman",
"Thổ Nhĩ Kỳ Ottoman",
ancestors = "trk-oat",
entry_name = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef},
translit = {Armn = "ota-Armn-translit"},
}
m["otb"] = {
"Old Tibetan",
7085214,
"sit-tib",
"Tibt",
translit = "Tibt-translit",
override_translit = true,
display_text = s["Tibt-displaytext"],
entry_name = s["Tibt-entryname"],
sort_key = "Tibt-sortkey",
}
m["otd"] = {
"Ot Danum",
3033781,
"poz-brw",
"Latn",
}
m["ote"] = {
"tiếng Otomi Mezquital",
23755711,
"oto-otm",
"Latn",
"Tiếng Otomi Mezquital",
"Otomi Mezquital",
}
m["oti"] = {
"Oti",
3357881,
}
m["otk"] = {
"tiếng Turk cổ",
34988,
"trk",
"Orkh",
"Tiếng Turk cổ",
"Turk cổ",
translit = "Orkh-translit",
}
m["otl"] = {
"Tilapa Otomi",
7802050,
"oto-otm",
"Latn",
}
m["otm"] = {
"tiếng Otomi cao nguyên Đông",
13581718,
"oto-otm",
"Latn",
"Tiếng Otomi cao nguyên Đông",
"Otomi cao nguyên Đông",
}
m["otn"] = {
"Tenango Otomi",
25559589,
"oto-otm",
"Latn",
}
m["otq"] = {
"tiếng Otomi Querétaro",
23755688,
"oto-otm",
"Latn",
"Tiếng Otomi Querétaro",
"Otomi Querétaro",
}
m["otr"] = {
"tiếng Otoro",
36328,
"alv-hei",
"Latn",
"Tiếng Otoro",
"Otoro",
}
m["ots"] = {
"Estado de México Otomi",
7413841,
"oto-otm",
"Latn",
}
m["ott"] = {
"Temoaya Otomi",
7698191,
"oto-otm",
"Latn",
}
m["otu"] = {
"tiếng Otuke",
7110049,
"sai-mje",
"Latn",
"Tiếng Otuke",
"Otuke",
}
m["otw"] = {
"tiếng Ottawa",
133678,
"alg",
"Latn",
ancestors = "oj",
}
m["otx"] = {
"Texcatepec Otomi",
25559590,
"oto-otm",
"Latn",
}
m["oty"] = {
"tiếng Tamil cổ",
20987452,
"dra-tam",
"Brah",
"Tiếng Tamil cổ",
"Tamil cổ",
translit = "Brah-translit",
}
m["otz"] = {
"Ixtenco Otomi",
6101171,
"oto-otm",
"Latn",
}
m["oub"] = {
"Glio-Oubi",
3914977,
"kro-grb",
}
m["oue"] = {
"Oune",
7110521,
"paa-sbo",
}
m["oui"] = {
"tiếng Duy Ngô Nhĩ cổ",
428299,
"trk-ssb",
"Ougr, Latn, Hani, Phag, Brah, Mani, Syrc, Orkh, Sogd, Arab, mnc-Mong, Sogo, Tibt",
"Tiếng Duy Ngô Nhĩ cổ",
"Duy Ngô Nhĩ cổ",
ancestors = "otk",
translit = {
Ougr = "Ougr-translit",
-- Orkh translit in [[Module:scripts/data]]
-- Mani translit in [[Module:scripts/data]]
-- mnc-Mong translit in [[Module:scripts/data]] (NOTE: Formerly not present; I assume accidentally left out)
-- Brah translit in [[Module:scripts/data]]
},
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- NOTE: Formerly there was only a sort_key for Tibetan. I assume the other three were left out accidentally.
sort_key = {
Hani = "Hani-sortkey",
},
}
m["oum"] = {
"Ouma",
7110494,
"poz-ocw",
"Latn",
}
m["ovd"] = {
"tiếng Övdal",
254950,
"gmq-eas",
"Latn",
"Tiếng Övdal",
"Övdal",
}
m["owi"] = {
"Owiniga",
56454,
"qfa-mal",
"Latn",
"Tiếng Owiniga",
"Owiniga",
}
m["owl"] = {
"tiếng Wales cổ",
2266723,
"cel-brw",
"Latn",
}
m["oyb"] = {
"Oy",
13593748,
"mkh-ban",
}
m["oyd"] = {
"tiếng Oyda",
7116251,
"omv-nom",
"Ethi, Latn",
"Tiếng Oyda",
"Oyda",
}
m["oym"] = {
"tiếng Wayampi",
7975842,
"tup-gua",
"Latn",
"Tiếng Wayampi",
"Wayampi",
}
m["oyy"] = {
"Oya'oya",
7116243,
"poz-ocw",
"Latn",
}
m["ozm"] = {
"tiếng Koonzime",
35566,
"bnt-ndb",
"Latn",
"Tiếng Koonzime",
"Koonzime",
}
return require("Module:languages").finalizeData(m, "language")
mmibjototlwdmj0qt35dwqh1kl54mt3
ndaundeiqhaemh
0
272693
2573821
2078862
2026-10-27T07:23:23Z
Hiyuune
50834
2573821
wikitext
text/x-wiki
=={{langname|za}}==
==={{section|n}}===
{{head|za|Danh từ}}
# [[Sao Kim]].
ovk8s6jn0baxip9c9cgpcx5bhkj7lpl
ứ ừ
0
279022
2573645
2094931
2026-10-26T15:00:08Z
Gratus sanctus
62131
/* */
2573645
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron}}
{{-interj-}}
{{pn}}
# {{context|Khẩu ngữ}} [[tiếng|Tiếng]] [[thốt]] ra ở đầu [[câu nói]] [[tỏ ý]] không [[bằng lòng]] với [[vẻ]] [[nũng nịu]] (thường là của [[trẻ con]])
#:{{ux|vi|'''ứ ừ''', con không ăn đâu}}
#:{{ux|vi|(- con ra đây đi với bố!) - '''ứ ừ''', con đi với mẹ cơ!}}
Còn có dạng là ứ ư(phương ngữ miền tây) gốc từ hán việt là chữ ứ (淤) mang nghĩa là giải quyết vấn đề, khó khăn
{{-ref-}}
{{R:Tratu|vi|vi}}
{{catname|Thán từ|tiếng Việt}}
ku28e9kyg1gygp2yv9culeu6bz7yafn
2573701
2573645
2026-10-26T15:48:00Z
TheHighFighter2
42988
Đã lùi lại sửa đổi của [[Special:Contributions/Gratus sanctus|Gratus sanctus]] ([[User talk:Gratus sanctus|thảo luận]]) quay về phiên bản cuối của [[User:Kateru Zakuro|Kateru Zakuro]]
2094931
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron}}
{{-interj-}}
{{pn}}
# {{context|Khẩu ngữ}} [[tiếng|Tiếng]] [[thốt]] ra ở đầu [[câu nói]] [[tỏ ý]] không [[bằng lòng]] với [[vẻ]] [[nũng nịu]] (thường là của [[trẻ con]])
#:{{ux|vi|'''ứ ừ''', con không ăn đâu}}
#:{{ux|vi|(- con ra đây đi với bố!) - '''ứ ừ''', con đi với mẹ cơ!}}
{{-ref-}}
{{R:Tratu|vi|vi}}
{{catname|Thán từ|tiếng Việt}}
8xktnh0vkqwpfgpz7kswu8xtx9kxn33
Mô đun:place/locations
828
282249
2573621
2573452
2026-10-26T13:02:08Z
TheHighFighter2
42988
2573621
Scribunto
text/plain
local export = {}
export.force_cat = false -- set to true to force category generation even on non-mainspace pages
local m_table = require("Module:table")
local string_utilities_module = "Module:string utilities"
local en_utilities_module = "Module:en-utilities"
local insert = table.insert
local concat = table.concat
local dump = mw.dumpObject
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
--[==[ intro:
This module contains data on all known locations, along with some lower-level code to process them (higher-level
known-location code is in [[Module:place/placetypes]]). You must load this module using require(), not using
mw.loadData().
===Location data===
'''NOTE: In order to understand the following better, first read the introductory documentation in [[Module:place]],
especially the section `More about known locations`.'''
The bulk of the code in this module (after some helper functions and placetype tables) describes the known locations
and their relationships. Locations are grouped into ''location groups'' that share some common properties (examples are
states of the United States and cities in Brazil). Each location group is associated with two tables, a ''data table''
that lists the locations and their individual properties, and a ''metadata table'' that lists group-level properties and
defaults for the location properties. Each metadata table points to the associated data table (i.e. contains the data
table as its `data` field), and the global `locations` variable holds a list of all group metadata tables. A given
location is generally described by three values: (a) the group metadata table for the group the location is part of; (b)
the location's canonical ''key'', which is the actual key in the group's data table and is globally unique across all
locations; and (c) the location's ''spec'', which is the initialized object describing the properties of the location
and comes from the value in the data table corresponding to the canonical key, transformed by the `initialize_spec()`
function. These are typically named `group`, `key` and `spec`, respectively and in that order, and are found in the
arguments to many functions.
In a per-group data table, the keys are either ''canonical keys'' describing locations (which, as mentioned above, must
be globally unique) or ''alias keys'' specifying an allowed alias for a given location. There may be multiple aliases
for a given location and the alias keys only need to be unique within a particular group data table, not across all
groups. It is also possible for the same string to serve as an alias key in one group and a canonical key in another
group. (For example, `Newcastle` appears as an alias key in two different groups, referring to two different locations,
canonically known as `Newcastle upon Tyne`, for the city in England, and `Newcastle, New South Wales`, for the city in
New South Wales, Úc; and `Birmingham` appears both as a canonical key in the group of English cities and an alias
key for canonical `Birmingham, Alabama` in the group of US cities.) The corresponding value objects are different for
canonical and alias keys. Corresponding to canonical keys are ''location specs'', describing the properies of the
location that cannot be derived from default properties of the group or global defaults. Corresponding to alias keys
are ''alias specs'', which are highly restricted in the properties they can contain, and whose properties do not have
per-group defaults, but only global defaults.
The canonical key is always the same as the bare category corresponding to the location, which is one of the reasons it
must be globally unique. For example, the country of Georgia uses the canonical key `Georgia` and corresponding bare
category [[:Category:Georgia]], while the US state of Georgia uses the canonical key `Georgia, USA` and corresponding
bare category [[:Category:Georgia, USA]]. The following conventions are followed in naming keys:
* Countries, ''country-like entities'' (which are a mixture of unrecognized de-facto states and dependent territories)
and ''former countries'' (which also includes other types of polities, such as the Roman Empire) use their unqualified
placename as the canonical key. (See the documentation for [[Module:place]] for the distinction between keys and
placenames, which is critical to understand when working with location data.) This also applies to constituent
countries (such as England, Aruba and the Faroe Islands) and constituent parts of grouped dependent territories (such
as the island of Saint Helena, which is administratively part of the British overseas territory of Saint Helena,
Ascension and Tristan da Cunha).
* Cities (including prefecture-level cities in China, which behave in most respects more like non-city administrative
divisions) also normally use their unqualified placename as the canonical key, but if this causes name conflicts or
ambiguities, they use a ''qualified key'' containing either the country name or immediate containing division (if
different) following a comma, such as the case of `Newcastle, New South Wales` and `Birmingham, Alabama` above.
Examples of name conflicts are the two cities just given; examples of ambiguities are the major cities of León and
Mérida in Mexico and city of Cartagena, Colombia, which are given the respective canonical keys of `León, Guanajuato`,
`Mérida, Yucatán` and `Cartagena, Colombia` to avoid ambiguity with the well-known respective cities of the same name
in Spain, even though none of those cities are large enough to be included as known locations in this module. (The
cutoff is generally having a metro area of at least 1,000,000 inhabitants, although there are exceptions.)
* Administrative divisions of countries, other than the exceptions noted above for constituent countries and dependent
territories, use a qualified key that contains the name of the country or constituent country in it, e.g.
`Normandy, France` (a region), `Calvados, France` (a department in the region of Normandy), `Herefordshire, England`
(a ceremonial county), `Northwest Territories, Canada` (a territory), `Central Finland, Finland` (a region),
`Antalya Province, Turkey` (a province), `Cluj County, Romania` (a county), `County Cork, Ireland` (a county) and
`New York, USA` (a state). As shown in these various examples, (a) first and second-level divisions are sometimes both
included (as in France, the United Kingdom and China); (b) the qualifier after the comma is sometimes a constituent
country (England) instead of a country (United Kingdom), and is sometimes abbreviated (USA rather than United States
or Unites States of America); (c) the word `the` is not normally included in the key even if the location is normally
preceded by `the` when following a preposition (there is a property in the location and alias specs to indicate this),
except in a very few cases (most notably `The Hague`); (d) the country is included as a qualifier even if it creates
an apparent redundancy, as with `Central Finland, Finland`; and (e) sometimes the placetype is included in the key, as
with provinces in Turkey and several other countries; states in Nigeria; and counties in Ireland, Romania and several
other countries. Whether the placetype is included, and whether it follows or precedes the placename, depends on
per-country conventions. For example, provinces in Turkey, Iran and several other countries (likewise for states in
Nigeria, oblasts in Russia, etc.) conventionally include the word "Province", "State", "Oblast" etc. in their name
because they are normally named after the largest city in the division, which would otherwise lead to ambiguity; and
counties in Ireland and Northern Ireland (and likewise County Durham, England) normally have the word "County"
preceding rather than following them in their conventional name, so we follow this practice. The Wikipedia article
naming scheme for a given administrative division is a strong clue as to how the division is normally referred to,
and we usually follow this practice. (A minor exception is that the Wikipedia articles for provinces in Iran, Laos and
Thailand include the word `province` with an initial lowercase letter while provinces elsewhere, e.g. North and South
Korea, Saudi Arabia and Turkey, use uppercase `Province`; we normalize to uppercase `Province` in all cases.)
As mentioned above, associated with canonical keys in the group data table are location specs, which are objects
containing properties. It is important here to distinguish ''initialized specs'' from ''uninitialized specs''.
Unininitialized specs are as directly specified in [[Module:place/locations]], containing only those properties that
differ from the per-group or global defaults. Initialized specs result from calling `initialize_spec()` on an
uninitialized spec (it is idempotent in that it will do nothing if encountering an already-initialized spec). This
copies all group-level defaults that are not overridden in the location spec itself from the group-level metadata table
into the location spec, so that in general, no more reference need be made to the group to fetch the correct value of a
given location property. (The initialization process also does more transformations in a few cases, noted below.) Note
that the default value of a given property is stored under a key in the group metadata table that is preceded by the
string `default_`; for example, the default value corresponding to the `placetype` property of a given location is
specified in the `default_placetype` key in the group metadata table.
The following are the properties of the location spec.
* `placetype`: String specifying the placetype of the location (e.g. "quốc gia", "state", province"). This can also be a
table of such types; in this case, the first listed type is the canonical type that will be used in descriptions, but
the location will be recognized (e.g. in a holonym, or for categorizing into the bare category) when tagged with any
of the specified types. The placetype '''must''' be either specified on an individual location or defaulted at the
group level, or an error occurs.
* `container`: Either a string, a ''canonicalized container'' structure or a list of either type, specifying the
immediate ''container'' (or containers) of the given location. A container is another location which this location is
considered to be directly part of, either politically or (above the country level) geographically. Some locations
belong to multiple immediate containers; this applies especially to transcontinental countries such as Russia and
Turkey. Containers can themselves have containers, forming a tree (or more correctly, a [[w:directed acyclic graph]])
of locations. The list of immediate container(s), followed by the container(s) of the container(s), etc., is termed
the ''container trail'', and some functions compute and return this trail as part of their operation. When a location
spec is initialized, the given container spec is canonicalized into ''canonical container form'', which consists of a
list of canonicalized container structures, each of which is of the form
`{key = "``container_key``", placetype = "``container_placetype``"}`, where ``container_key`` is a canonical location
key and ``container_placetype`` should be the listed placetype for the location, or the first listed placetype if
there are multiple. (FIXME: Since the key uniquely identifies the container location, we should eliminate the
placetype from the container structure.) The list of canonicalized container structures is stored into the
`.containers` field of the location spec (this happens even if the container value is unset in its uninitialized spec
form, causing it to default to the corresponding group-level value), and the `.container` field is set to {nil}. The
canonicalization process is described in more detail below under [[#Container spec canonicalization]].
* `divs`: List of recognized political divisions; e.g. for the Netherlands, a specification of the form
`divs = {"provinces", "municipalities"}` will allow categories such as [[:Category:de:Provinces of the Netherlands]]
and [[:Category:pt:Municipalities of the Netherlands]] to be created. Any division that appears here must also be
found in `placetype_data`, or an error occurs. The entities appearing in the `divs` list can be structures as well as
just strings; this is explained more below under [[#Location divisions]]. Additional political divisions that apply to
all locations in a group can be specified at the group level using the group-only property `addl_divs`, which has the
same format as `divs`. This is intended to be used in the situation where some division types are shared among all
locations in the group and others differ from location to location. An example where this is used is the United
States, where `census-designated places` is specified in the group-level `addl_divs` so that all 50 states have
census-designated places categorized as e.g. [[:Category:Census-designated places in Arizona, USA]], but `counties`
and `county seats` are specified in the group-level `default_divs` because not all states have counties and county
seats (Alaska has boroughs and borough seats and Louisiana has parishes and parish seats), and some states have
additional divisions (New Jersey and Pennsylvania also have boroughs, while Colorado and Connecticut have
municipalities). Note that under most circumstances (particularly, if `container_parent_type` is not set as a property
associated with the division type), any division type specified on a sub-country-level location must also be specified
on all containers up through the country. For example, since French departments specify `communes` and
`municipalities` in `default_divs`, the same division types must be (and are) specified on French regions and for
France itself.
* `keydesc`: String directly specifying a description of the location, for use in generating the contents of category
pages related to the location. In place of a string, a function of three arguments (`group`, `key`, `spec`, as is
normal for locations) that computes the location description can also be given. This is used, for example, for
Russian federal subjects; see `construct_russia_federal_subject_keydesc`. The special string `+++` contained in the
keydesc is replaced with the default value of the location description, which specifies the location's placename,
placetype, and the corresponding values for each container in the container trail, generally up through (but not
beyond) the country level; see `no_include_container_in_desc` below. The location description is used to construct
the full description of various categories, such as bare location categories, whose description generally reads
`"{{(((}}langname}}} terms related to the people, culture, or territory of ``keydesc``."` where ``keydesc`` is the
specified or auto-constructed location description.
* `fulldesc`: String overriding the full description for the bare location category (but not for any other category).
This is currently used only for the location `Earth`, at the very top of the tree (because the standard
`people, culture or territory of ...` text doesn't make sense here), and for `Antarctica` (because it has no permanent
inhabitants). FIXME: This should be renamed `bare_category_fulldesc`.
* `addl_parents`: Specify additional parents for the bare location category, in addition to the category or categories
generated based on the immediate container(s). For example, `Hawaii, USA` specifies `Polynesia` as an additional
parent category; both `North Korea` and `South Korea` specify `Korea` (which is a specially handled location category)
as an additional parent; and `Earth` specifies `nature` (not a location category, but still a topic category) as an
additional parent (which in this case becomes the first parent, as `Earth` has no container). The only restriction on
the categories in `addl_parents` is that they must be topic categories, because each language-specific version of the
bare location category gets the corresponding language-specific versions of the categories in `addl_parents`. FIXME:
This shoudl be renamed `bare_category_addl_parents`.
* `wp`: Spec describing how to construct the Wikipedia article for the location. Each spec is either `true` (equivalent
to `"%l"`, i.e. use the full location placename directly) or a string containing formatting directives, indicating how
to construct the article name. The allowed formatting directives are `%l` (the full location placename), `%e` (the
elliptical location placename) and `%c` (the full placename of the first immediate container). For example, the
default value of `wp` for the group of United States cities is `"%l, %c"` since the city articles tend to be named
e.g. `Austin, Texas` (but with many exceptions, specified using `wp` fields at the city level). Another example is
Thai provinces, which specify a group-level default of `"%e province"` as the Wikipedia articles have lowercase
`province` in their name but the Thai province keys specified in this module have uppercase `Province`. Here we have
to use `%e` to get the placename without the word `Province` in it. The default is `true`, which simply uses the full
location placename as the article name. Note that the Wikipedia article, along with the Wikipedia and Commons category
pages, are shown in the upper right of bare category pages.
* `wpcat`: Spec describing how to construct the Wikipedia category page for the location (i.e. the page listing articles
and categories relevant to the location). The format is the same as with `wp`, and it defaults to the value of `wp`.
It rarely needs to be specified because the category page and the article page almost always follow the same format.
* `commonscat`: Spec describing how to construct the Commons category page for the location (i.e. the page on the
MediaWiki Commons site listing articles and categories relevant to the location). It has the same format as `wp` and
`wpcat` and defaults to `wpcat`, which is usually (but not always) correct.
* `the`: Boolean specifying whether a location should be preceded by `the` when following a preposition, e.g. in
category names such as [[:Category:Cities in the Northern Territory, Úc]] and in old-style place descriptions
when the location occurs as the first holonym, such as the city [[Darwin]] described using
{{tl|place|city|terr/Northern Territory|c/Australia}}. Note that the global default for this and all Boolean
properties is {nil}, which amounts to the same as {false}.
* `british_spelling`: Boolean indicating whether the location in question uses British spelling. Currently this only
affects whether the spelling `neighborhoods` or `neighbourhoods` is used in categories such as
[[:Category:Neighborhoods of New York City]] and [[:Category:Neighbourhoods of Sydney]]. This usually needs to be set
only at the top level (i.e. country or country-like entity), because lower-level entities look up the container trail
for any container that has `british_spelling = true` set, and if found, assume that British spelling applies. The
general principle used in setting this is that all countries in Europe, all dependent territories of any such country,
all former British colonies, and any dependent territories of these former colonies, are assumed to use British
spelling, while all other countries and associated dependent territories are assumed to use American spelling. This
can potentially be modified on a case-by-case basis.
* `is_city`: Boolean indicating whether the location in question is a city. This is explicitly set to `true` for
city-states (e.g. Monaco and Vatican City), dependent territories that are cities (e.g. Hong Kong, Macau, Bonaire,
Gibraltar, etc.), certain city-level administrative divisions (such as `City of Belfast, Northern Ireland`) and
(through a group-levell setting) New York boroughs. In addition, it is set to `true` in initialize_spec() whenever
the group-level `default_placetype == "thành phố"`, so that all cities get it set without explicitly needing to add a
group-level setting for this. Note that the condition `default_placetype == "thành phố"` intentionally excludes Chinese
prefecture-level cities, which aren't really cities in that (for example) they don't directly contain neighborhoods,
but do contain cities within them. This setting is used in various places: (a) to add cities, rivers, etc. to
categories like [[:Category:Rivers in Osaka, Nhật Bản]] and [[:Category:Cities in Wuhan]] for holonyms that
are ''not'' cities; (b) to add districts, neighborhoods, and the like to categories like
[[:Category:Neighborhoods of Brooklyn]] and [[:Category:Neighborhoods of Monaco]] for holoynms that ''are'' cities;
(c) generally, to determine which "generic" placetypes (cities, rivers, neighborhoods, etc.) apply to the location.
(Those that can occur with cities have a `generic_before_cities` setting in [[Module:place/placetypes]], and those
that can occur with non-cities have a `generic_before_non_cities` setting.)
* `is_former_place`: Boolean that should be set on former places such as the Soviet Union and the Roman Empire. For such
places, categories such as [[:Category:fr:Rivers in the Soviet Union]] are neither generated nor recognized (more
generally, no "generic" placetypes apply except for `places`), and category descriptions include the word `former`.
* `overriding_bare_label_parents`: Document me!
* `bare_category_parent_type`: Document me!
* `no_container_cat`: Document me!
* `no_container_parent`: Document me!
* `no_generic_place_cat`: Document me!
* `no_check_holonym_mismatch`: Document me!
* `no_auto_augment_container`: Document me!
* `no_include_container_in_desc`: Document me!
====Location divisions====
The `divs` field of a location describes the recognized political division types of that location. Specifying a given
division type will cause places defined as being of the specified division type and with the location as a holonym will
cause the place to be categorized as ` ``placetypes`` in/of ``location`` `; for example, specifying that the United
States has `"states"` as a division will cause anything defined as {{tl|place|fr|state|c/US}} to be categorized under
[[:Category:fr:States of the United States]]. Note that you do not have to explicitly specify division types for
"generic" placetypes (those that have a `generic_before_non_cities` field if the location is not a city, or that have a
`generic_before_cities` field if the location is a city); this includes things like cities, towns, villages,
neighbo(u)rhoods and rivers. A given element in the `divs` list is usually a string naming a plural placetype; the
placetype is automatically converted to the singular for recognizing the placetype in a {{tl|place}} spec, and irregular
plurals such as `kibbutzim` are handled correctly as long as the placetype specifies an appropriate `plural` field
(if the `plural` isn't explicitly given, the default singularization algorithm in [[Module:en-utilities]] is run, which
gets most things correctly but has problems with `passes` and `fortresses`, which are singularized to `passe` and
`fortresse`; for this reason, an explicit plural entry is added to terms in ''-ss''). In place of a string, an object
can be given with the plural placetype in the `type` field; this allows additional properties to be specified along with
the placetype. An example of this is the `divs` list for Canada:
{
["Canada"] = {divs = {
{type = "tỉnh", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
"counties", "districts", "municipalities", "regional municipalities",
"rural municipalities", "parishes",
"Indian reserves",
"census divisions",
{type = "townships", prep = "in"},
}, ...},
}
Here, both provinces and territories are set to categorize as `provinces and territories`, meaning that there is a
single category [[:Category:Provinces and territories of Canada]] rather than separate categories for provinces and
territories. Similar things are done for other countries that have more than one type of first-level administrative
division (e.g. Australia, China, India and Pakistan). Note that any placetype listed under `cat_as` must exist in the
table of placetypes in [[Module:place/placetypes]], and in fact there is a category-only entry there for `provinces and
territories!` (the use of exclamation point following a plural placetype means that the placetype is present only for
use in categories and won't be recognized as the placetype field in a {{tl|place}} description). In addition, townships
are declared to use `in` rather than `of` as the preposition in the category; hence the category name will be
[[:Category:Townships in Canada]] rather than [[:Category:Townships of Canada]]. (The use of `in` vs. `of` is somewhat
related to whether a given placetype is an official administrative or statistical division of the location in question
and comes in a defined list, in which case `of` should be used, or is more ill-defined, in which case `in` should be
used; the default is `of`, and the use of `in` with `townships` is probably by analogy with the use of `in` with cities
and towns.)
Another more complex example is the divisions given for Quebec:
{
["Quebec, Canada"] = {divs = {
"counties",
{type = "regional county municipalities", container_parent_type = "regional municipalities"},
{type = "regions", container_parent_type = false},
{type = "townships", prep = "in"},
{type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}},
{type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}},
{type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}},
}, ...},
}
Here, `container_parent_type` controls the second parent category of the placetype/location category associated with the
entry. In this case, for example, [[:Category:Counties of Quebec, Canada]] will have [[:Category:Counties of Canada]] as
its second or ''container-level'' parent. However, this doesn't make sense for `regional county municipalities`, which
exist only in Quebec (so the parent category [[:Category:Regional county municipalities of Canada]] would have only one
subcategory); but they are similar to regional municipalities in British Columbia, Nova Scotia and Ontario, so the
`container_parent_type = "regional municipalities"` spec causes the container-level parent of this category to be
[[:Category:Regional municipalities of Canada]]. Likewise, `regions` as administrative divisions (as opposed to mere
geographic regions) exist only in Quebec; they have no equivalent elsewhere, so we disable the container-level parent
using `container_parent_type = false`. The specs for `parish municipalities`, `township municipalities` and
`village municipalities` show both that multiple types can be specified under `cat_as` (here, for example, we categorize
`parish municipalities` as both `parishes` and `municipalities`) and that these types can themselves have properties,
just as for entries directly under `divs`. Specifically, `{type = "parishes", container_parent_type = "counties"}`
means that any place defined as a parish municipality in Quebec will be categorized under both [[:Category:Parishes of
Quebec, Canada]] and [[:Category:Municipalities of Quebec, Canada]], and that the former will have a container-level
parent of [[:Category:Counties of Canada]] (rather than the default of [[:Category:Parishes of Canada]]). Similarly,
`township municipalities` will be categorized under both [[:Category:Townships in Quebec, Canada]] (''not''
[[:Category:Townships of Quebec, Canada]]) and [[:Category:Municipalities of Quebec, Canada]].
====Container spec canonicalization====
A fully canonicalized container spec for a given location consists of a list of ''canonicalized container objects'',
each with a `key` and `placetype` field. The `key` field should name the canonical key of some other location at a
higher level (e.g. French cities are contained in French departments, which are contained in French regions, which are
contained in France, which is contained in Europe, which is contained in Eurasia, which is contained in the Earth). The
`placetype` field should correspond to the first (canonical) placetype listed for the key in question. The process of
initializing a locaion spec converts the container spec in `.container` into a canonicalized spec in `.containers` and
removes the spec from `.container`. It works as follows:
# If the `container` field is missing, and there is a group-level `default_container` field, it is used in its place.
For example, none of the Brazilian states listed in `brazil_states` specifies a container, but the group specifies
`default_container = "Brazil"`.
# A single string or canonicalized container object is allowed and made into a one-element list.
# If a list element is a string that did ''not'' come from `default_container`, and there is a group-level
`canonicalize_key_container` field, it is assumed to be a one-argument function and is called on the string to get
a canonicalized container object.
# Any remaining strings are assumed to be countries and are used directly as the `key`, with `placetype` set to
`"quốc gia"`.
====Alias keys====
Aliases can be provided for canonical keys using ''alias keys''. Alias keys have a very different location spec
structure from canonical keys. This structure does not, in general, have defaults at the group level and is not
initialized using `initialize_spec()`, but is used as-is. The following properties are recognized in an alias location
spec:
* `alias_of`: The canonical key of which this key is an alias. Required.
* `the`: If true, this alias key is preceded by `the` following a preposition. Defaults to the group-level `default_the`
but does not pay attention to the value of `the` for the corresponding canonical key.
* `display`: This is a display alias, meaning that holonyms using the placename corresponding to this alias will be
converted to the placename corresponding to the canonical key when formatting the holonym for display. (Otherwise,
the aliasing applies only to categorization.) If the value is true, the display canonicalization is to the placename
of the canonical key; otherwise, the value should be a key whose corresponding placename is used when display
canonicalizing.
* `placetype`: The placetype of the alias. Rarely needs to be specified as it defaults to the canonical key's placetype,
and if that is unspecified, to the group-level default placetype.
====Location group metadata tables====
As mentioned above, associated with each location group is a ''metadata table'' listing group-level properties. The
metadata table contains two types of keys: group-level defaults (named like the corresponding location-level keys but
preceded by `default_`, e.g. `default_placetype` corresponding to the location-level `placetype` key) and group-only
keys, which are mostly functions. The following are the possible group-only keys:
* `data`: This points to the group data table for the group, as described above.
* `key_to_placename`: This is a function of one argument to transform the location's key (whether canonical or alias)
into the full and elliptical placenames. The difference between full and elliptical placenames is described in the
documentation for [[Module:place]], but in essence, it applies for keys that include the placetype in them (e.g.
`Phuket Province, Thailand` or `County Mayo, Ireland`), in which case the full placename includes the placetype and
the elliptical placename does not. For keys that do not include the placetype in them (e.g. `Arizona, USA` or
`Gloucestershire, England`), the full and elliptical placenames are identical. Note that neither the full nor the
elliptical placename includes the container in it; hence, for `Phuket Province, Thailand`, the full placename is
`Phuket Province` and the elliptical placename is just `Phuket`. (Note that the full vs. elliptical placename
distinction is intended only for handling cases where the placetype follows or precedes the raw placename and there
is no difference between the two in whether they are normally preceded by `the`. More complex situations, such as
`State of Mexico` (which normally takes `the`) vs. just `Mexico` (which doesn't), or `Islamabad Capital Territory` vs.
just `Islamabad`, should be handled instead by aliases.) The `key_to_placename` function takes one argument, the key,
and returns two arguments, the full and elliptical placenames, respectively. If left undefined, the default is to
chop off anything starting with a comma and return the result as both full and elliptical placename, and if
specifically set to `false`, the key is used directly as both full and elliptical placename. If it needs to be
defined, it is best to use the helper function `make_key_to_placename`, if possible (or
`make_irish_type_key_to_placename` in the case of Ireland and Northern Ireland, where `County` precedes), rather than
rolling your own. In addition, you should use the global `key_to_placename` function (which takes care of the default
implementation and such) rather than directly calling the function in the `key_to_placename` field.
* `placename_to_key`: This is approximately the inverse of `key_to_placename`, transforming a placename (which can be
either in full or elliptical form) into the corresponding key. As with `key_to_placename`, if you need to define this
(generally, when the full and elliptical placenames are different), prefer using `make_placename_to_key` (or
`make_irish_type_placename_to_key` for Ireland and Northern Ireland) to rolling your own. In addition, similarly to
`key_to_placename`, use the global `placename_to_key` function to convert placenames to keys rather than directly
invoking the function in the `placename_to_key` field. If the field is set to `false`, the placename is used unchanged
as the key. Otherwise, the default algorithm works as follows:
*# If the group-level `default_placetype == "thành phố"`, use the placename unchanged as the key.
*# Otherwise, if the group-level `default_container` exists and is a string, append it to the placename after a comma +
space and use the result as the key.
*# Otherwise, if the group-level `default_container` is a canonical container object (an object with `key` and
`placetype` fields), and the `placetype` field is either `country` or `constituent country`, append the `key` field
to the placename after a comma + space and use the result as the key.
*# Otherwise, use the placename unchanged as the key.
* `canonicalize_key_container`: A function of one argument to convert the specified `container` field, when a string,
to canonical form. Described in more detail above under [[#Container spec canonicalization]]. It is preferable to
construct the function using `make_canonicalize_key_container`, if possible, rather than rolling your own.
* `addl_divs`: Additional political divisions appended, for all locations in the group, to the list of divisions derived
from the location-level `divs` or group-level `default_divs` fields to get the final list of divisions for the
location. See [[#Location divisions]] for more details.
]==]
-----------------------------------------------------------------------------------
-- Helper functions --
-----------------------------------------------------------------------------------
--[==[
Throw an error. `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to
format the format string as if `fmt:format(...)` were called. In general, callers should use `internal_error` unless the
error was due to bad user input rather than a logic error (which usually isn't the case in deep back-end code like
this).
]==]
function export.process_error(fmt, ...)
local args = {...}
for i = 1, select("#", ...) do
args[i] = dump(args[i])
end
return error(string.format(fmt, unpack(args)))
end
--[==[
Throw an internal error (a logic error that should never happen unless there is a bug in the code, as opposed to a user
error triggered by bad input or a system error due to something like running out of memory or hitting a time limit).
`fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the
format string as if `fmt:format(...)` were called.
]==]
function export.internal_error(fmt, ...)
export.process_error("Internal error: " .. fmt, ...)
end
local internal_error = export.internal_error
-- Return whether `list_or_element` (a list of strings, or a single string) "contains" `item` (a string). If
-- `list_or_element` is a list, this returns true if `item` is in the list; otherwise it returns true if `item`
-- equals `list_or_element`.
local function list_or_element_contains(list_or_element, item)
if type(list_or_element) == "table" then
return m_table.contains(list_or_element, item) and true or false
end
return list_or_element == item
end
--[==[
Call the location group's `key_to_placename` function if it exists (see the comment at the top of [[Module:place]] for
the distinction between keys and placenames). Two values are returned, the full and elliptical placenames (e.g. full
`"County Durham"` vs. elliptical `"Durham"`). If the group does not define `key_to_placename`, both full and elliptical
placenames are computed by chopping off anything starting with a comma.
]==]
function export.key_to_placename(group, key)
if group.key_to_placename == false then
return key, key
end
if group.key_to_placename then
local full_placename, elliptical_placename = group.key_to_placename(key)
if type(full_placename) ~= "string" then
internal_error("Key %s returned a non-string full placename: %s", key, full_placename)
end
if type(elliptical_placename) ~= "string" then
internal_error("Key %s returned a non-string elliptical placename: %s", key, elliptical_placename)
end
return full_placename, elliptical_placename
end
key = key:gsub(",.*", "")
return key, key
end
--[==[
Call the location group's `placename_to_key` function if it exists (see the comment at the top of [[Module:place]] for
the distinction between keys and placenames) and return the result. If `placename_to_key` exists with the value `false`,
return the placename unchanged. If the group does not define `placename_to_key`, and it defines a `default_container`
whose placetype is either `country` or `constituent country`, the container name is appended to the placename after a
comma and a space. Otherwise the placename is returned unchanged.
]==]
function export.placename_to_key(group, placename)
if group.placename_to_key == false then
return placename
elseif group.placename_to_key then
local key = group.placename_to_key(placename)
if type(key) ~= "string" then
internal_error("Placename %s returned a non-string key: %s", placename, key)
end
return key
elseif group.default_placetype == "thành phố" then
return placename
else
local defcon = group.default_container
if not defcon then
return placename
elseif type(defcon) == "string" then
return placename .. ", " .. defcon
elseif type(defcon) == "table" and (defcon.placetype == "quốc gia" or
defcon.placetype == "constituent country") then
return placename .. ", " .. defcon.key
else
return placename
end
end
end
--[==[
Initialize the location spec `spec`, augmenting it with default values taken from `group` if the spec itself doesn't
specify values for the properties. This sets `containers` to a canonicalized list of objects, each with `key` and
`placetype` keys, describing the immediate containers of the location, and erases (sets to nil) the original
non-canonicalized `container` field. (Most locations have only one immediate container but some, e.g. Russia, have more
than one. Containers should be carefully distinguished from category parents. Generally the container is the first
category parent, or the first ``n`` parents if there are ``n`` containers, but there may be additional category parents,
which indicate some sort of relation between the category parent and the location but not necessarily one of
containment.)
This function is idempotent in that nothing happens if called more than once on the same spec.
FIXME: Consider reimplementing this in a more standardly object-oriented way using metatables.
]==]
function export.initialize_spec(group, key, spec)
if spec.initialized then
return
end
local container = spec.container
local containers
local container_from_default
if not container then
container = group.default_container
container_from_default = true
end
if container then
if type(container) == "string" or container.key then
container = {container}
end
containers = {}
for _, cont in ipairs(container) do
if type(cont) == "string" then
if group.canonicalize_key_container and not container_from_default then
cont = group.canonicalize_key_container(cont)
else
cont = {key = cont, placetype = "quốc gia"}
end
end
insert(containers, cont)
end
end
spec.containers = containers
spec.container = nil
local function value_with_default(val, default_val)
if val == nil then
return default_val
else
return val
end
end
local function set_or_default(prop)
spec[prop] = value_with_default(spec[prop], group["default_" .. prop])
end
set_or_default("placetype")
if not spec.placetype then
internal_error("No placetype found in key %s for spec %s or in group `default_placetype`", key, spec)
end
set_or_default("divs")
spec.addl_divs = group.addl_divs
for _, prop in ipairs {
"keydesc",
"fulldesc",
"addl_parents",
"overriding_bare_label_parents",
"bare_category_parent_type",
"wp",
"wpcat",
"commonscat",
"british_spelling",
"the",
"no_container_cat",
"no_container_parent",
"no_generic_place_cat",
"no_check_holonym_mismatch",
"no_auto_augment_container",
"no_include_container_in_desc",
"is_city",
"is_former_place",
} do
set_or_default(prop)
end
-- `default_placetype == "thành phố"` is correct; if `default_placetype` has something else like `prefecture-level city`
-- as the canonical placetype but also lists `city` (as Chinese prefecture-level cities do), don't mark as
-- is_city.
spec.is_city = value_with_default(spec.is_city, group.default_placetype == "thành phố")
spec.initialized = true
end
--[=[
Given a location group, key and possible placetypes that the placename must match, check if the key exists in the group
with at least one of the group's key's placetypes matching one of the passed-in placetypes. If so, return two values:
the group key (which potentially could differ from the passed-in key due to aliases) and the corresponding spec object,
which (as with all functions that return spec objects) has been initialized using `initialize_spec()` (i.e. default
property values have been copied from the group into the spec, if the spec doesn't itself specify a value for the
property in question).
`alias_resolution` controls how aliases are resolved. Normally, both display and category aliases are followed, and
the returned key will reflect the canonical location key. However, if `alias_resolution` is {"none"}, no alias following
happens. In that case, if the key specifies an alias, the spec for the alias rather than the spec for the canonical
location is returned, and importantly, it is returned uninitialized, meaning that properties from the group are not
copied into the spec. (If the key specifies a canonical location, its spec is returned initialized, as in the normal
case where `alias_resolution` is unspecified.) The caller needs to check whether the returned spec is an alias by
looking for an `alias_of` property. If `alias_resolution` is {"display"}, the behavior is the same as for {"none"}
except that if the alias contains a setting `display = true`, the returned key will reflect the canonical location key,
and if the alias contains a setting `display = ``string`` `, the returned key will reflect that string.
This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for
internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or
`find_canonical_key` (for known-canonical locations where the placetype isn't known).
]=]
local function find_matching_key_in_group(group, placetypes, key, alias_resolution)
if alias_resolution ~= nil and alias_resolution ~= "none" and alias_resolution ~= "display" and
alias_resolution ~= "all" then
internal_error("Bad value for 'alias_resolution': %s", alias_resolution)
end
local spec = group.data[key]
if not spec then
return nil
end
local function check_correct_placetype(placetype)
if type(placetype) == "table" then
for _, pt in ipairs(placetype) do
if list_or_element_contains(placetypes, pt) then
return true
end
end
return false
else
return list_or_element_contains(placetypes, placetype)
end
end
if spec.alias_of then
local resolved_key = spec.alias_of
local resolved_spec = group.data[resolved_key]
if not resolved_spec then
internal_error("Key %s is an alias of %s, which doesn't exist", key, resolved_key)
elseif resolved_spec.alias_of then
internal_error("Key %s is an alias of %s, which is itself an alias; indirect aliasing not allowed",
key, resolved_key)
end
if alias_resolution == "none" or alias_resolution == "display" then
-- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group.
local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype
if not placetype then
internal_error("No placetype found for key %s in any of spec %s, alias-resolved spec %s or in group " ..
"`default_placetype`", key, spec, resolved_spec)
end
if not check_correct_placetype(placetype) then
return nil
end
if alias_resolution == "display" then
if spec.display == true then
key = resolved_key
elseif spec.display then
key = spec.display
end
end
return key, spec
end
key = resolved_key
spec = resolved_spec
end
-- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group.
local placetype = spec.placetype or group.default_placetype
if not placetype then
internal_error("No placetype found for key %s in spec %s or group `default_placetype`", key, spec)
end
if not check_correct_placetype(placetype) then
return nil
end
export.initialize_spec(group, key, spec)
return key, spec
end
--[=[
Given a location group, placename and possible placetypes that the placename must match, check if the placename exists
in the group with at least one of the placetypes of the key in the group that corresponds to the placename matching one
of the passed-in placetypes. If so, return two values: the key corrsponding to the passed-in placename and the
corresponding spec object. This is similar to `find_matching_key_in_group()` but works with placenames rather than keys.
`alias_resolution` is as in `find_matching_key_in_group()`.
This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for
internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or
`find_canonical_key` (for known-canonical locations where the placetype isn't known).
]=]
local function find_matching_placename_in_group(group, placetypes, placename, alias_resolution)
local key = export.placename_to_key(group, placename)
return find_matching_key_in_group(group, placetypes, key, alias_resolution)
end
--[==[
If `key` is a canonical known location key (i.e. not an alias), return the corresponding group and initialized spec.
If no such key exists, return {nil}. This throws an internal error if two locations with the same key are found.
]==]
function export.find_canonical_key(key)
local found_locations = {}
for _, group in ipairs(export.locations) do
local spec = group.data[key]
if not spec then
-- do nothing
elseif spec.alias_of then
mw.log(("Skipping alias '%s' of canonical '%s'"):format(key, spec.alias_of))
else
insert(found_locations, {group, spec})
end
end
if not found_locations[1] then
return nil
elseif found_locations[2] then
internal_error("Found multiple matching locations for canonical key %s: %s", key, found_locations)
else
local group, spec = unpack(found_locations[1])
export.initialize_spec(group, key, spec)
return group, spec
end
end
--[==[
Iterator that returns all locations matching a given description, where the description consists of either a placename
or a key along with a list of possible placetypes. Usually there will be at most one such location. The iterator
returns three values at each iteration: the location group, canonical key by which the location is known and the spec
object describing the location. `data` contains the following possible fields:
* `placetypes`: A list of possible placetypes, one of which must match one of the location's placetypes; or a string
specifying a placetype, which must match one of the location's placetypes. This must be specified.
* `placename`: The placename of the location. Either this or `key` must be specified.
* `key`: The key of the location. Either this or `placename` must be specified.
* `alias_resolution`: If specified, it behaves the same as for `find_matching_key_in_group`.
The spec is normally initialized using `initialize_spec()` prior to it being returned (but may not be if
`alias_resolution` is given and the specified key or placename is an alias; see the documentation for
`find_matching_key_in_group`).
]==]
function export.iterate_matching_location(data)
local i = 0
local n = #export.locations
return function()
while true do
i = i + 1
if i > n then
break
end
local group = export.locations[i]
local key, spec
if data.placename then
key, spec = find_matching_placename_in_group(group, data.placetypes, data.placename,
data.alias_resolution)
else
if not data.key then
internal_error("'.placename' or '.key' must be defined: %s", data)
end
key, spec = find_matching_key_in_group(group, data.placetypes, data.key, data.alias_resolution)
end
if key then
return group, key, spec
end
end
end
end
--[==[
Return the location matching a given description, where the description consists of either a placename or a key along
with a list of possible placetypes. This is similar to `iterate_matching_location()` but throws an internal error if
there is not exactly one location found; as such, it is for use with internally specified locations (such as the
containers of known locations) rather than externally specified locations, which may not match a known location and in
some cases may match multiple known locations. For finding an externally specified location, consider using
`find_matching_holonym_location`, which returns {nil} rather than throwing an error if the location isn't found, but
also (more importantly) checks to make sure there are no conflicting holonyms among the user-specified holonyms (e.g.
{{tl|place|city|s/Delaware|c/USA|t=Newark}} will not match the known location `Newark` (in New Jersey, not Delaware).
]==]
function export.get_matching_location(data)
local all_found = {}
for group, key, spec in export.iterate_matching_location(data) do
insert(all_found, {group, key, spec})
end
if not all_found[1] then
internal_error("Couldn't find matching location for data %s", data)
elseif all_found[2] then
internal_error("Found multiple matching locations for data %s: %s", data, all_found)
else
return unpack(all_found[1])
end
end
--[==[
Successively iterate over a location's containers, and then the containers of those containers, etc. Keep in mind that
locations may have multiple containers (e.g. Russia has both Europe and Asia as containers, and both Europe and Asia
have Eurasia as their container). A given container will never be returned twice (e.g. in the case where a specific
location A has locations B and C as containers, and B has C as its container, C will not be returned twice). An
internal error happens if a container loop is detected. The return value is a list of location objects, each of which
contains `group`, `key` and `spec` fields.
]==]
function export.iterate_containers(group, key, spec)
local keys_seen = {}
keys_seen[key] = true
local iterations = 0
local last_iteration_containers = {{group = group, key = key, spec = spec}}
return function()
iterations = iterations + 1
if iterations > 10 then
internal_error("Probable loop in containers when processing key %s", key)
end
local next_iteration_containers = {}
for _, location in ipairs(last_iteration_containers) do
local containers = location.spec.containers
if containers then
for _, container in ipairs(containers) do
local container_group, container_key, container_spec = export.get_matching_location {
placetypes = container.placetype,
key = container.key,
}
if not keys_seen[container_key] then
insert(next_iteration_containers, {
group = container_group, key = container_key, spec = container_spec
})
keys_seen[container_key] = true
end
end
end
end
if not next_iteration_containers[1] then
return nil
end
last_iteration_containers = next_iteration_containers
return next_iteration_containers
end
end
--[==[
Given a placename, convert it into a link (two-part if `display_form` is given and differs from `placename`) and add
`"the "` to the beginning if called for in `spec`.
]==]
function export.construct_linked_placename(spec, placename, display_form)
local linked_placename = display_form and placename ~= display_form and ("[[%s|%s]]"):format(placename,
display_form) or ("[[%s]]"):format(placename)
if spec.the then
linked_placename = "the " .. linked_placename
end
return linked_placename
end
--[=[
This is typically used to define `key_to_placename`. It generates a function that chops off parts of a string (a
location key), typically at the end, in order to get the full and elliptical versions of a placename. (See the
documentation above for `key_to_placename` under "Location group tables" for the difference between full and elliptical
placenames.) `container_patterns` is a Lua pattern or a list of possible patterns matching the container at the end of
the key, which will be used to remove that container. If multiple patterns are specified, each one is tried until one
matches. If `container_patterns` is omitted, this part of the process is skipped. The reulting string becomes the full
placename. If `divtype_patterns` is specified, it is likewise either a Lua pattern or list of possible patterns to match
and remove the political division affixed onto the end (or possibly the beginning) of the key in the keys of certain
countries (such as South Korean and North Korean counties, which include the word "County" in the key). The resulting
chopped string becomes the elliptical placename. If `divtype_patterns` is omitted, this part of the process is skipped
and the full and elliptical placenames are the same.
Typical usage is as follows:
```
key_to_placename = make_key_to_placename(", Anh$"),
```
or (when the political division is part of the key)
```
key_to_placename = make_key_to_placename(", Hàn Quốc$", "$")
```
]=]
local function make_key_to_placename(container_patterns, divtype_patterns)
if type(container_patterns) == "string" then
container_patterns = {container_patterns}
end
if type(divtype_patterns) == "string" then
divtype_patterns = {divtype_patterns}
end
return function(key)
local full_placename = key
if container_patterns then
for _, container_pattern in ipairs(container_patterns) do
local nsubs
full_placename, nsubs = full_placename:gsub(container_pattern, "")
if nsubs > 0 then
break
end
end
end
local elliptical_placename = full_placename
if divtype_patterns then
for _, divtype_pattern in ipairs(divtype_patterns) do
local nsubs
elliptical_placename, nsubs = elliptical_placename:gsub(divtype_pattern, "")
if nsubs > 0 then
break
end
end
end
return full_placename, elliptical_placename
end
end
--[=[
This is typically used to define `placename_to_key`. It generates a function that appends a string to the end of a given
placename to get the key (see the definition of `placename_to_key` above in the documentation under "Location group
tables"). Optional `divtype_suffix` is a raw string (which should not contain hyphens or other characters that have
special meaning in Lua patterns) to be appended first to the placename; if already present at the end, it is not
appended. `container_suffix` is then added in the same fashion if given. Typical usage is like this:
```
placename_to_key = make_placename_to_key(", Anh")
```
(which will convert e.g. `"Hampshire"` into `"Hampshire, Anh"`)
or
```
placename_to_key = make_placename_to_key(", Hàn Quốc", " County")
```
(which will convert e.g. `"Gangwon"` or `"Gangwon County"` into `"Gangwon, Hàn Quốc"`).
]=]
local function make_placename_to_key(container_suffix, divtype_suffix)
return function(placename)
local key = placename
if divtype_suffix then
if not key:find(divtype_suffix .. "$") then
key = key .. divtype_suffix
end
end
if container_suffix then
key = key .. container_suffix
end
return key
end
end
--[=[
This is typically used to define `canonicalize_key_container`, which converts a container as specified in the location
data into the canonical form containing both the full container key and its placetype. It generates a function to do
the canonicalization of a given container. If the container is a string, `suffix` is appended onto the string (use {nil}
or {""} if there is no suffix to append), and the placetype is set to `placetype`. Otherwise the container is left
as-is. Typical usage is like this:
```
canonicalize_key_container = make_canonicalize_key_container(", Canada", "province")
```
which will convert e.g. `"Ontario"` into `{key = "Ontario, Canada", placetype = "province"}`.
]=]
local function make_canonicalize_key_container(suffix, placetype)
return function(container)
if type(container) == "string" then
return {key = container .. (suffix or ""), placetype = placetype}
else
return container
end
end
end
-----------------------------------------------------------------------------------
-- Top-level tables --
-----------------------------------------------------------------------------------
export.continents = {
["Trái Đất"] = {placetype = "planet", addl_parents = {"tự nhiên"},
fulldesc = "=là hành tinh thứ ba tính từ Mặt Trời", commonscat = "Earth"},
["châu Phi"] = {placetype = "continent", commonscat = "Africa", container = {key = "Trái Đất", placetype = "planet"}},
["châu Mỹ"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"},
keydesc = "[[America]], in the sense of [[North America]] and [[South America]] combined",
wp = "Châu Mỹ"},
["Americas"] = {alias_of = "châu Mỹ"},
["America"] = {alias_of = "châu Mỹ"},
["Bắc Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}},
["Caribe"] = {placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}},
["Trung Mỹ"] = {placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}},
["Nam Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}},
["châu Nam Cực"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"},
fulldesc = "=lục địa nằm xa về phía nam và tây nhất trên Trái Đất, chứa Cực Nam địa lý và nằm trong Vùng Nam Cực của Nam Bán cầu"},
["Đại lục Á Âu"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"},
keydesc = "một khu vực đất đai rộng lớn, bao gồm châu Âu và châu Á"},
["châu Á"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}},
["châu Âu"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}},
["châu Đại Dương"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}},
["Melanesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}},
["Micronesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}},
["Polynesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}},
}
export.continents_group = {
default_overriding_bare_label_parents = {}, -- container parents should be used
default_divs = {{type = "quốc gia", prep = "của"}},
-- It's enough to mention the first-level continent or continent group. It seems excessive to write e.g.
-- "El Salvador, a country in Central America, a continental region in North America, a continent in America, ...".
default_no_include_container_in_desc = true,
default_no_container_cat = true,
default_no_container_parent = true,
default_no_auto_augment_container = true,
default_no_generic_place_cat = true,
-- French Guyana is in France but not in Europe, which should not be an issue, so don't check holonym mismatches at
-- this level. We also run into problems with supercontinents, which have "continent" as the fallback and cause
-- mismatches.
default_no_check_holonym_mismatch = true,
data = export.continents,
}
-- Countries: including those with partial recognition that are normally considered countries (e.g. Kosovo, Taiwan).
export.countries = {
["Afghanistan"] = {container = "châu Á", divs = {"tỉnh", "districts"}},
["Albania"] = {container = "châu Âu", divs = {"counties", "municipalities", "communes",
{type = "administrative units", cat_as = "communes"},
}, british_spelling = true},
["Algeria"] = {container = "châu Phi", divs = {"tỉnh", "communes", "districts", "municipalities"}},
["Andorra"] = {container = "châu Âu", divs = {"parishes"}, british_spelling = true},
["Angola"] = {container = "châu Phi", divs = {"provinces", "municipalities"}},
["Antigua and Barbuda"] = {container = "Caribe", divs = {"provinces"}, british_spelling = true},
["Argentina"] = {container = "Nam Mỹ", divs = {"provinces", "departments", "municipalities"}},
["Armenia"] = {container = {"châu Âu", "châu Á"}, divs = {"tỉnh", "districts", "municipalities"},
british_spelling = true},
["Republic of Armenia"] = {alias_of = "Armenia"}, -- differs in "the"
-- Both a country and continent
["Úc"] = {container = "châu Đại Dương", divs = {
{type = "states", cat_as = "states and territories"},
{type = "territories", cat_as = "states and territories"},
{type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and territories"},
{type = "ABBREVIATION_OF territories", cat_as = "abbreviations of states and territories"},
"local government areas", "dependent territories",
}, british_spelling = true},
["Australia"] = {alias_of = "Úc"},
["Áo"] = {container = "châu Âu", divs = {"states", "districts", "municipalities"}, british_spelling = true},
["Azerbaijan"] = {container = {"châu Âu", "châu Á"}, divs = {"districts", "municipalities"}, british_spelling = true},
["Bahamas"] = {the = true, container = "Caribe", divs = {"districts"}, british_spelling = true, wp = "The %l"},
["Bahrain"] = {container = "châu Á", divs = {"governorates"}},
["Bangladesh"] = {container = "châu Á", divs = {"divisions", "districts", "municipalities"}, british_spelling = true},
["Barbados"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true},
["Belarus"] = {container = "châu Âu", divs = {"regions", "districts"}, british_spelling = true},
["Bỉ"] = {container = "châu Âu", divs = {"regions", "tỉnh", "municipalities"}, british_spelling = true},
["Belize"] = {container = "Trung Mỹ", divs = {"districts"}, british_spelling = true},
["Benin"] = {container = "châu Phi", divs = {"departments", "communes"}},
["Bhutan"] = {container = "châu Á", divs = {"districts", "gewogs"}},
["Bolivia"] = {container = "Nam Mỹ", divs = {"tỉnh", "departments", "municipalities"}},
["Bosna và Hercegovina"] = {container = "châu Âu", divs = {"entities", "cantons", "municipalities"}, british_spelling = true},
["Bosnia and Hercegovina"] = {alias_of = "Bosna và Hercegovina", display = true},
["Bosnia và Hercegovina"] = {alias_of = "Bosna và Hercegovina", display = true},
["Bosnia-Herzegovina"] = {alias_of = "Bosna và Hercegovina", display = true},
["Bosnia-Hercegovina"] = {alias_of = "Bosna và Hercegovina", display = true},
["Bosnia"] = {alias_of = "Bosna và Hercegovina", display = true},
["Botswana"] = {container = "châu Phi", divs = {"districts", "subdistricts"}, british_spelling = true},
["Brasil"] = {container = "Nam Mỹ", divs = {
"states", "municipalities", "macroregions",
{type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"},
}},
["Brazil"] = {alias_of = "Brasil", display = true},
["Brunei"] = {container = "châu Á", divs = {"districts", "mukims"}, british_spelling = true},
["Bulgaria"] = {container = "châu Âu", divs = {"tỉnh", "municipalities"}, british_spelling = true},
["Burkina Faso"] = {container = "châu Phi", divs = {"regions", "departments", "provinces"}},
["Burundi"] = {container = "châu Phi", divs = {"provinces", "communes"}},
["Campuchia"] = {container = "châu Á", divs = {"tỉnh", "districts"}},
["Cameroon"] = {container = "châu Phi", divs = {"regions", "departments"}},
["Canada"] = {container = "Bắc Mỹ", divs = {
{type = "tỉnh", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
{type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces and territories"},
{type = "ABBREVIATION_OF territories", cat_as = "abbreviations of provinces and territories"},
"counties", "districts", "municipalities", "regional municipalities",
"rural municipalities", "parishes",
-- Don't change the following to something more politically correct (e.g. "First Nations reserves") until/unless
-- the Canadian government makes a similar switch (and note that as of Apr 18 2025, the Wikipedia article is
-- still at [[w:Indian reserves]]).
"Indian reserves",
"census divisions",
{type = "townships", prep = "in"},
},
british_spelling = true},
["Cape Verde"] = {container = "châu Phi", divs = {"municipalities", "parishes"}},
["Cabo Verde"] = {alias_of = "Cape Verde", display = true},
["Cộng hòa Trung Phi"] = {container = "châu Phi", divs = {"prefectures", "subprefectures"}},
["CAR"] = {alias_of = "Cộng hòa Trung Phi", display = true},
["C.A.R"] = {alias_of = "Cộng hòa Trung Phi", display = true},
["Tchad"] = {container = "châu Phi", divs = {"regions", "departments"}},
["Chad"] = {alias_of = "Tchad", display = true},
["Chile"] = {container = "Nam Mỹ", divs = {"regions", "tỉnh", "communes"}},
["Trung Quốc"] = {container = "châu Á", divs = {
{type = "tỉnh", cat_as = "provinces and autonomous regions"},
{type = "autonomous regions", cat_as = "provinces and autonomous regions"},
{type = "FORMER provinces", cat_as = "former provinces"},
"special administrative regions",
"prefectures",
{type = "FORMER prefectures", cat_as = "former prefectures"},
"prefecture-level cities",
{type = "counties", cat_as = "counties and county-level cities"},
{type = "county-level cities", cat_as = "counties and county-level cities"},
{type = "FORMER counties", cat_as = "former counties and county-level cities"},
{type = "FORMER county-level cities", cat_as = "former counties and county-level cities"},
-- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities.
"districts",
{type = "FORMER districts", cat_as = "former districts"},
"subdistricts",
"townships",
"municipalities",
{type = "direct-administered municipalities", cat_as = "municipalities"},
}},
["People's Republic of China"] = {alias_of = "Trung Quốc"}, -- differs in "the"
["Colombia"] = {container = "Nam Mỹ", divs = {"departments", "municipalities"}},
["Comoros"] = {the = true, container = "châu Phi", divs = {"autonomous islands"}},
["Costa Rica"] = {container = "Trung Mỹ", divs = {"provinces", "cantons"}},
["Croatia"] = {container = "châu Âu", divs = {"counties", "municipalities"}, british_spelling = true},
["Cuba"] = {container = "Caribe", divs = {"tỉnh", "municipalities"}},
["Cyprus"] = {container = {"châu Âu", "châu Á"}, divs = {"districts"}, british_spelling = true},
["Czech Republic"] = {the = true, container = "châu Âu", divs = {"regions", "districts", "municipalities"}, british_spelling = true},
["Czechia"] = {alias_of = "Czech Republic"}, -- differs in "the"
["Democratic Republic of the Congo"] = {the = true, container = "châu Phi", divs = {"provinces", "territories"}},
["Congo"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true},
["DRC"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true},
["D.R.C"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true},
["Đan Mạch"] = {container = "châu Âu", divs = {"regions", "municipalities", "dependent territories"},
british_spelling = true,
-- Wikipedia separates [[w:Denmark]] (constituent country) from [[w:Danish Realm]] (country)
},
["Djibouti"] = {container = "châu Phi", divs = {"regions", "districts"}},
["Dominica"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true},
["Dominican Republic"] = {the = true, container = "Caribe", divs = {"provinces", "municipalities"},
keydesc = "the [[Dominican Republic]], the country that shares the [[Caribbean]] island of [[Hispaniola]] with [[Haiti]]"},
["Đông Timor"] = {container = "châu Á", divs = {"municipalities"}, wp = "Timor-Leste"},
["Timor-Leste"] = {alias_of = "Đông Timor", display = true},
["Ecuador"] = {container = "Nam Mỹ", divs = {"provinces", "cantons"}},
["Ai Cập"] = {container = "châu Phi", divs = {"governorates", "regions"}, british_spelling = true},
["El Salvador"] = {container = "Trung Mỹ", divs = {"departments", "municipalities"}},
["Guinea Xích Đạo"] = {container = "châu Phi", divs = {"tỉnh"}},
["Eritrea"] = {container = "châu Phi", divs = {"regions", "subregions"}},
["Estonia"] = {container = "châu Âu", divs = {"counties", "municipalities"}, british_spelling = true},
["Eswatini"] = {container = "châu Phi", british_spelling = true},
["Swaziland"] = {alias_of = "Eswatini", display = true},
["Ethiopia"] = {container = "châu Phi", divs = {"regions", "zones"}},
["Federated States of Micronesia"] = {the = true, container = "Micronesia", divs = {"states"}},
["Micronesia"] = {alias_of = "Federated States of Micronesia"},
["Fiji"] = {container = "Melanesia", divs = {"divisions", "provinces"}, british_spelling = true},
["Phần Lan"] = {container = "châu Âu", divs = {"regions", "municipalities"}, british_spelling = true},
["Pháp"] = {container = "châu Âu", divs = {"regions", "cantons", "collectivities",
"communes",
{type = "municipalities", cat_as = "communes"},
"departments",
{type = "prefectures", cat_as = {"prefectures", "departmental capitals"}},
{type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}},
"dependent territories", "territories", "tỉnh",
}, british_spelling = true},
["Gabon"] = {container = "châu Phi", divs = {"provinces", "departments"}},
["Gambia"] = {the = true, container = "châu Phi", divs = {"divisions", "districts"}, british_spelling = true, wp = "The %l"},
["Gruzia"] = {container = {"châu Âu", "châu Á"}, divs = {"regions", "districts"},
keydesc = "the country of [[Georgia]], in [[Eurasia]]", british_spelling = true, wp = "%l"},
["Georgia"] = {alias_of = "Gruzia"},
["Đức"] = {container = "châu Âu", divs = {
"states",
-- Bavaria, Baden-Württemberg, Hesse and North Rhine-Westphalia have administrative regions as divisions, but
-- there aren't really enough of them to categorize per state.
"regions",
"municipalities", "districts"}, british_spelling = true},
["Ghana"] = {container = "châu Phi", divs = {"regions", "districts"}, british_spelling = true},
["Hy Lạp"] = {container = "châu Âu", divs = {"regions", "regional units", "municipalities",
{type = "peripheries", cat_as = {"regions"}},
}, british_spelling = true},
["Grenada"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true},
["Guatemala"] = {container = "Trung Mỹ", divs = {"departments", "municipalities"}},
["Guinea"] = {container = "châu Phi", divs = {"regions", "prefectures"}},
["Guinea-Bissau"] = {container = "châu Phi", divs = {"regions"}},
["Guyana"] = {container = "Nam Mỹ", divs = {"regions"}, british_spelling = true},
["Haiti"] = {container = "Caribe", divs = {"departments", "arrondissements"}},
["Honduras"] = {container = "Trung Mỹ", divs = {"departments", "municipalities"}},
["Hungary"] = {container = "châu Âu", divs = {"counties", "districts"}, british_spelling = true},
["Iceland"] = {container = "châu Âu", divs = {"regions", "municipalities", "counties"}, british_spelling = true},
["Ấn Độ"] = {container = "châu Á", divs = {
{type = "states", cat_as = "states and union territories"},
{type = "union territories", cat_as = "states and union territories"},
{type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and union territories"},
{type = "ABBREVIATION_OF union territories", cat_as = "abbreviations of states and union territories"},
"divisions", "districts", "municipalities",
}, british_spelling = true},
["Indonesia"] = {container = "châu Á", divs = {"regencies", "tỉnh",
{type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces"},
}},
["Iran"] = {container = "châu Á", divs = {"tỉnh", "counties"}},
["Iraq"] = {container = "châu Á", divs = {"governorates", "districts"}},
["Ireland"] = {container = "châu Âu", addl_parents = {"British Isles"},
divs = {"counties", "districts", "provinces"}, british_spelling = true, wp = "Republic of %l"},
["Republic of Ireland"] = {alias_of = "Ireland"}, -- differs in "the"
["Israel"] = {container = "châu Á", divs = {"districts"}},
["Ý"] = {container = "châu Âu", divs = {
"regions", "provinces", "metropolitan cities", "municipalities",
{type = "autonomous regions", cat_as = "regions"},
}, british_spelling = true},
["Bờ Biển Ngà"] = {container = "châu Phi", divs = {"districts", "regions"}},
-- We should really be using Ivory Coast (common name) but there are political ramifications to the use of
-- Côte d'Ivoire so don't make it a display alias.
["Côte d'Ivoire"] = {alias_of = "Bờ Biển Ngà"},
["Jamaica"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true},
["Nhật Bản"] = {container = "châu Á", divs = {"prefectures", "subprefectures", "municipalities"}},
["Jordan"] = {container = "châu Á", divs = {"governorates"}},
["Kazakhstan"] = {container = {"châu Á", "châu Âu"}, divs = {"regions", "districts"}},
["Kenya"] = {container = "châu Phi", divs = {"counties"}, british_spelling = true},
["Kiribati"] = {container = "Micronesia", british_spelling = true},
["Kosovo"] = {container = "châu Âu", divs = {"districts", "municipalities"}, british_spelling = true},
["Kuwait"] = {container = "châu Á", divs = {"governorates", "areas"}},
["Kyrgyzstan"] = {container = "châu Á", divs = {"regions", "districts"}},
["Lào"] = {container = "châu Á", divs = {"tỉnh", "districts"}},
["Latvia"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true},
["Lebanon"] = {container = "châu Á", divs = {"governorates", "districts"}},
["Lesotho"] = {container = "châu Phi", divs = {"districts"}, british_spelling = true},
["Liberia"] = {container = "châu Phi", divs = {"counties", "districts"}},
["Libya"] = {container = "châu Phi", divs = {"districts", "municipalities"}},
["Liechtenstein"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true},
["Litva"] = {container = "châu Âu", divs = {"counties", "municipalities"}, british_spelling = true},
["Luxembourg"] = {container = "châu Âu", divs = {"cantons", "districts"}, british_spelling = true},
["Madagascar"] = {container = "châu Phi", divs = {"regions", "districts"}},
["Malawi"] = {container = "châu Phi", divs = {"regions", "districts"}, british_spelling = true},
["Malaysia"] = {container = "châu Á", divs = {"states", "federal territories", "districts"}, british_spelling = true},
["Maldives"] = {container = "châu Á", divs = {"tỉnh", "administrative atolls"}, british_spelling = true},
["Mali"] = {container = "châu Phi", divs = {"regions", "cercles"}},
["Malta"] = {container = "châu Âu", divs = {"regions", "local councils"}, british_spelling = true},
["Marshall Islands"] = {the = true, container = "Micronesia", divs = {"municipalities"}},
["Mauritania"] = {container = "châu Phi", divs = {"regions", "departments"}},
["Mauritius"] = {container = "châu Phi", divs = {"districts"}, british_spelling = true},
["Mexico"] = {container = "Bắc Mỹ", addl_parents = {"Trung Mỹ"}, divs = {
"states", "municipalities",
{type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"},
}},
["Moldova"] = {container = "châu Âu", divs = {
{type = "districts", cat_as = "districts and autonomous territorial units"},
{type = "autonomous territorial units", cat_as = "districts and autonomous territorial units"},
"communes", "municipalities",
}, british_spelling = true},
["Monaco"] = {placetype = {"city-state", "quốc gia"}, container = "châu Âu",
-- We want the first placetype to be 'city-state' so the description of Monaco says it's a city-state, but we
-- want its parent to be "countries in Europe".
bare_category_parent_type = {type = "quốc gia", prep = "của"},
is_city = true, british_spelling = true},
["Mông Cổ"] = {container = "châu Á", divs = {"tỉnh", "districts"}},
["Montenegro"] = {container = "châu Âu", divs = {"municipalities"}},
["Maroc"] = {container = "châu Phi", divs = {"regions", "prefectures", "tỉnh"}},
["Mozambique"] = {container = "châu Phi", divs = {"provinces", "districts"}},
["Myanmar"] = {container = "châu Á",
divs = {"regions", "states", "union territories",
{type = "self-administered zones", cat_as = "self-administered areas"},
{type = "self-administered divisions", cat_as = "self-administered areas"},
"districts"}},
["Burma"] = {alias_of = "Myanmar"}, -- not display-canonicalizing; has political connotations
["Namibia"] = {container = "châu Phi", divs = {"regions", "constituencies"}, british_spelling = true},
["Nauru"] = {container = "Micronesia", divs = {"districts"}, british_spelling = true},
["Nepal"] = {container = "châu Á", divs = {"tỉnh", "districts"}},
["Hà Lan"] = {placetype = {"quốc gia", "constituent country"}, container = "châu Âu",
divs = {"tỉnh", "municipalities",
{type = "FORMER municipalities", cat_as = "former municipalities"},
"dependent territories", "constituent countries"}, british_spelling = true,
-- Wikipedia separates [[w:Netherlands]] (constituent country) from [[w:Kingdom of the Netherlands]]
-- (country)
},
["New Zealand"] = {container = "Polynesia", divs = {
"regions", "dependent territories", "territorial authorities",
{type = "districts", cat_as = "territorial authorities"},
},
british_spelling = true},
["Nicaragua"] = {container = "Trung Mỹ", divs = {"departments", "municipalities"}},
["Niger"] = {container = "châu Phi", divs = {"regions", "departments"}},
["Nigeria"] = {container = "châu Phi", divs = {
"states",
-- Categorize the Federal Capital Territory as a state because there's only one of it; we could categorize
-- everything under 'states and territories' but that seems a bit pointless.
{type = "federal territories", cat_as = "states"},
"local government areas",
}, british_spelling = true},
["Cộng hòa Dân chủ Nhân dân Triều Tiên"] = {container = "châu Á", addl_parents = {"Korea"}, divs = {"tỉnh", "counties"}},
["North Macedonia"] = {container = "châu Âu", divs = {"regions", "municipalities"}, british_spelling = true},
["Macedonia"] = {alias_of = "North Macedonia", display = true},
["Republic of North Macedonia"] = {alias_of = "North Macedonia"}, -- differs in "the"
["Republic of Macedonia"] = {alias_of = "North Macedonia"}, -- differs in "the"
["Na Uy"] = {container = "châu Âu",
divs = {"counties", "municipalities", "dependent territories", "districts", "unincorporated areas"},
british_spelling = true},
["Oman"] = {container = "châu Á", divs = {"governorates", "tỉnh"}},
["Pakistan"] = {container = "châu Á", divs = {
{type = "tỉnh", cat_as = "provinces and territories"},
{type = "administrative territories", cat_as = "provinces and territories"},
{type = "federal territories", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
"divisions", "districts",
}, british_spelling = true},
["Palau"] = {container = "Micronesia", divs = {"states"}},
["Palestine"] = {container = "châu Á", divs = {"governorates"}},
["State of Palestine"] = {alias_of = "Palestine"}, -- differs in "the"
["Panama"] = {container = "Trung Mỹ", divs = {"provinces", "districts"}},
["Papua New Guinea"] = {container = "Melanesia", divs = {"provinces", "districts"}, british_spelling = true},
["Paraguay"] = {container = "Nam Mỹ", divs = {"departments", "districts"}},
["Peru"] = {container = "Nam Mỹ", divs = {"regions", "provinces", "districts"}},
["Philippines"] = {the = true, container = "châu Á", divs = {"regions", "tỉnh", "districts", "municipalities", "barangays"}},
["Ba Lan"] = {divs = {"voivodeships", "counties",
{type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}},
}, container = "châu Âu", british_spelling = true},
["Bồ Đào Nha"] = {container = "châu Âu", divs = {
{type = "autonomous regions", cat_as = "districts and autonomous regions"},
{type = "districts", cat_as = "districts and autonomous regions"},
"tỉnh", "municipalities"}, british_spelling = true},
["Qatar"] = {container = "châu Á", divs = {"municipalities", "zones"}},
["Republic of the Congo"] = {the = true, container = "châu Phi", divs = {"departments", "districts"}},
["Congo Republic"] = {alias_of = "Republic of the Congo", display = true, the = true},
["Romania"] = {container = "châu Âu", divs = {
"regions", "counties", "communes",
{type = "ABBREVIATION_OF counties", cat_as = "abbreviations of counties"},
}, british_spelling = true},
["Nga"] = {container = {"châu Âu", "châu Á"}, divs = {
"federal subjects", "republics", "autonomous oblasts", "autonomous okrugs", "oblasts", "krais", "federal cities",
"districts", "federal districts"},
british_spelling = true},
["Rwanda"] = {container = "châu Phi", divs = {"provinces", "districts"}},
["Saint Kitts and Nevis"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true},
["Saint Kitts"] = {alias_of = "Saint Kitts and Nevis", display = true},
["Saint Lucia"] = {container = "Caribe", divs = {"districts"}, british_spelling = true},
["Saint Vincent and the Grenadines"] = {container = "Caribe", divs = {"parishes"}, british_spelling = true},
["Saint Vincent"] = {alias_of = "Saint Vincent and the Grenadines", display = true},
["SVG"] = {alias_of = "Saint Vincent and the Grenadines", display = true},
["S.V.G"] = {alias_of = "Saint Vincent and the Grenadines", display = true},
["Samoa"] = {container = "Polynesia", divs = {"districts"}, british_spelling = true},
["San Marino"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true},
["São Tomé and Príncipe"] = {container = "châu Phi", divs = {"districts"}},
["São Tome and Principe"] = {alias_of = "São Tomé and Príncipe", display = true},
["São Tomé"] = {alias_of = "São Tomé and Príncipe", display = true},
["São Tome"] = {alias_of = "São Tomé and Príncipe", display = true},
["Ả Rập Xê Út"] = {container = "châu Á", divs = {"provinces", "governorates"}},
["Senegal"] = {container = "châu Phi", divs = {"regions", "departments"}},
["Serbia"] = {container = "châu Âu", divs = {"districts", "municipalities", "autonomous provinces"}},
["Seychelles"] = {container = "châu Phi", divs = {"districts"}, british_spelling = true},
["Sierra Leone"] = {container = "châu Phi", divs = {"provinces", "districts"}, british_spelling = true},
["Singapore"] = {container = "châu Á", divs = {"districts", "regions"}, british_spelling = true},
["Slovakia"] = {container = "châu Âu", divs = {"regions", "districts"}, british_spelling = true},
["Slovenia"] = {container = "châu Âu", divs = {"statistical regions", "municipalities"}, british_spelling = true},
-- Note: While the official name does not include "the" at the beginning,
-- it sounds strange in English to leave it out and it's commonly included.
["Solomon Islands"] = {the = true, container = "Melanesia", divs = {"provinces"}, british_spelling = true},
["Somalia"] = {container = "châu Phi", divs = {"regions", "districts"}},
["South Africa"] = {container = "châu Phi", divs = {
"provinces",
"districts",
{type = "district municipalities", cat_as = "districts"},
{type = "metropolitan municipalities", cat_as = "districts"},
"municipalities",
}, british_spelling = true},
["Hàn Quốc"] = {container = "châu Á", addl_parents = {"Korea"}, divs = {"tỉnh", "counties", "districts"}},
["Nam Sudan"] = {container = "châu Phi", divs = {"regions", "states", "counties"}, british_spelling = true},
["Tây Ban Nha"] = {container = "châu Âu", divs = {"autonomous communities", "tỉnh", "municipalities",
"comarcas", "autonomous cities"},
british_spelling = true},
["Sri Lanka"] = {container = "châu Á", divs = {"tỉnh", "districts"}, british_spelling = true},
["Sudan"] = {container = "châu Phi", divs = {"states", "districts"}, british_spelling = true},
["Suriname"] = {container = "Nam Mỹ", divs = {"districts"}},
["Thụy Điển"] = {container = "châu Âu", divs = {"tỉnh", "counties", "municipalities"}, british_spelling = true},
["Switzerland"] = {container = "châu Âu", divs = {"cantons", "municipalities", "districts"}, british_spelling = true},
["Syria"] = {container = "châu Á", divs = {"governorates", "districts"}},
["Đài Loan"] = {container = "châu Á", divs = {"counties", "districts", "townships", "special municipalities"}},
["Republic of China"] = {alias_of = "Đài Loan"}, -- differs in "the", different political connotations
["Tajikistan"] = {container = "châu Á", divs = {"regions", "districts"}},
["Tanzania"] = {container = "châu Phi", divs = {"regions", "districts"}, british_spelling = true},
["Thái Lan"] = {container = "châu Á", divs = {"tỉnh", "districts", "subdistricts"}},
["Togo"] = {container = "châu Phi", divs = {"provinces", "prefectures"}},
["Tonga"] = {container = "Polynesia", divs = {"divisions"}, british_spelling = true},
["Trinidad and Tobago"] = {container = "Caribe", divs = {"regions", "municipalities"}, british_spelling = true},
["Tunisia"] = {container = "châu Phi", divs = {"governorates", "delegations"}},
["Thổ Nhĩ Kỳ"] = {container = {"châu Âu", "châu Á"}, divs = {"tỉnh", "districts"}},
-- Foreign names generally get display-canonicalized.
["Türkiye"] = {alias_of = "Thổ Nhĩ Kỳ", display = true},
["Turkmenistan"] = {container = "châu Á", divs = {
-- The 5 regions are often also called provinces
"regions", {type = "tỉnh", cat_as = "regions"}, "districts"},
},
["Tuvalu"] = {container = "Polynesia", divs = {"atolls"}, british_spelling = true},
["Uganda"] = {container = "châu Phi", divs = {"districts", "counties"}, british_spelling = true},
["Ukraina"] = {container = "châu Âu", divs = {
{type = "oblasts", cat_as = "oblasts and autonomous republics"},
{type = "autonomous republics", cat_as = "oblasts and autonomous republics"},
"raions", "hromadas",
}, british_spelling = true},
["United Arab Emirates"] = {the = true, container = "châu Á", divs = {"emirates"}},
-- Abbreviations get display-canonicalized.
["UAE"] = {alias_of = "United Arab Emirates", display = true, the = true},
["U.A.E."] = {alias_of = "United Arab Emirates", display = true, the = true},
["United Kingdom"] = {the = true, container = "châu Âu", addl_parents = {"British Isles"},
divs = {"constituent countries", "counties", "districts", "boroughs", "territories", "dependent territories",
"traditional counties"},
keydesc = "the [[United Kingdom]] of Great Britain and Northern Ireland", british_spelling = true},
-- Abbreviations get display-canonicalized.
["UK"] = {alias_of = "United Kingdom", display = true, the = true},
["U.K."] = {alias_of = "United Kingdom", display = true, the = true},
["Hoa Kỳ"] = {container = "Bắc Mỹ",
divs = {"counties", "county seats", "states", "territories", "dependent territories",
{type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"},
{type = "DEROGATORY_NAME_FOR states", cat_as = "derogatory names for states"},
{type = "NICKNAME_FOR states", cat_as = "nicknames for states"},
{type = "OFFICIAL_NICKNAME_FOR states", cat_as = "official nicknames for states"},
{type = "boroughs", prep = "in"}, -- exist in Pennsylvania and New Jersey
"municipalities", -- these exist politically at least in Colorado and Connecticut
{type = "census-designated places", prep = "in"},
{type = "unincorporated communities", prep = "in"},
-- Don't change the following to something more politically correct until/unless the US government makes a
-- similar switch (and note that as of Apr 18 2025, the Wikipedia article is still at
-- [[w:Indian reservations]]).
"Indian reservations",
}},
-- Abbreviations and long forms (when possible) get display-canonicalized.
["US"] = {alias_of = "Hoa Kỳ", display = true, the = true},
["U.S."] = {alias_of = "Hoa Kỳ", display = true, the = true},
["USA"] = {alias_of = "Hoa Kỳ", display = true, the = true},
["U.S.A."] = {alias_of = "Hoa Kỳ", display = true, the = true},
["United States of America"] = {alias_of = "Hoa Kỳ", display = true, the = true},
["Uruguay"] = {container = "Nam Mỹ", divs = {"departments", "municipalities"}},
["Uzbekistan"] = {container = "châu Á", divs = {"regions", "districts"}},
["Vanuatu"] = {container = "Melanesia", divs = {"provinces"}, british_spelling = true},
["Vatican City"] = {placetype = {"city-state", "quốc gia"}, container = "châu Âu",
-- First placetype should be 'city-state' for to shown up in its description,
-- Its parent should still be "countries in Europe".
bare_category_parent_type = {type = "quốc gia", prep = "của"},
addl_parents = {"Rome"}, is_city = true, british_spelling = true},
["Vatican"] = {alias_of = "Vatican City"}, -- differs in "the"
["Venezuela"] = {container = "Nam Mỹ", divs = {"states", "municipalities"}},
["Việt Nam"] = {container = "châu Á", divs = {"tỉnh", "districts", "municipalities"}},
["Western Sahara"] = {placetype = {"territory", "quốc gia"}, container = "châu Phi",
bare_category_parent_type = {type = "quốc gia", prep = "của"},
},
-- Not display-canonicalizable both due to differences in 'the' and the sovereignty dispute over Western Sahara
["Sahrawi Arab Democratic Republic"] = {alias_of = "Western Sahara"},
["SADR"] = {alias_of = "Sahrawi Arab Democratic Republic", display = true, the = true},
["Yemen"] = {container = "châu Á", divs = {"governorates", "districts"}},
["Zambia"] = {container = "châu Phi", divs = {"provinces", "districts"}, british_spelling = true},
["Zimbabwe"] = {container = "châu Phi", divs = {"provinces", "districts"}, british_spelling = true},
}
local function canonicalize_continent_container(key)
if type(key) ~= "string" then
return key
end
if export.continents[key] then
return {key = key, placetype = export.continents[key].placetype}
end
internal_error("Unrecognized key %s in `canonicalize_continent_like`", key)
end
export.countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_overriding_bare_label_parents = {"+++", "quốc gia"},
default_placetype = "quốc gia",
default_no_container_cat = true,
default_no_container_parent = true,
-- No need to augment country holonyms with continents; not needed for disambiguation.
default_no_auto_augment_container = true,
data = export.countries,
}
-- Country-like entities: typically overseas territories or de-facto independent countries, which in both cases
-- are not internationally recognized as sovereign nations but which we treat similarly to countries.
export.country_like_entities = {
-- British Overseas Territory
["Akrotiri and Dhekelia"] = {
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Cyprus", "châu Âu", "châu Á"},
british_spelling = true,
},
-- Åland: Listed as a region of Finland. Wikipedia lists this under "dependent territories" in
-- [[w:List of sovereign states and dependent territories by continent]].
-- unincorporated territory of the United States
["American Samoa"] = {
placetype = {"unincorporated territory", "overseas territory", "territory"},
container = "Hoa Kỳ",
addl_parents = {"Polynesia"},
},
-- British Overseas Territory
["Anguilla"] = {
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- de-facto independent state, internationally recognized as part of Georgia
["Abkhazia"] = {
placetype = {"unrecognized country", "quốc gia"},
addl_parents = {"Georgia", "châu Âu", "châu Á"},
divs = {"districts"},
keydesc = "the de-facto independent state of [[Abkhazia]], internationally recognized as part of the country of [[Georgia]]",
british_spelling = true,
},
-- Australian external territory
["Ashmore and Cartier Islands"] = {
the = true,
placetype = {"external territory", "territory"},
container = "Úc",
addl_parents = {"châu Á"},
},
-- constituent country of the Netherlands
["Aruba"] = {
placetype = {"constituent country", "quốc gia"},
container = "Hà Lan",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- British Overseas Territory
["Bermuda"] = {
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Bắc Mỹ"},
british_spelling = true,
},
-- special municipality of the Netherlands
["Bonaire"] = {
placetype = {"special municipality", "municipality", "overseas territory", "territory"},
container = "Hà Lan",
addl_parents = {"Caribe"},
is_city = true,
british_spelling = true,
},
-- British Overseas Territory
["British Indian Ocean Territory"] = {
the = true,
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"châu Á"},
british_spelling = true,
},
-- British Overseas Territory
["British Virgin Islands"] = {
the = true,
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- Norwegian dependent territory
["Bouvet Island"] = {
placetype = {"dependent territory", "territory"},
container = "Na Uy",
addl_parents = {"châu Phi"},
british_spelling = true,
},
-- British Overseas Territory
["Cayman Islands"] = {
the = true,
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- Australian external territory
["Christmas Island"] = {
placetype = {"external territory", "territory"},
container = "Úc",
addl_parents = {"châu Á"},
british_spelling = true,
},
-- Sui generis French "state private property" per Wikipedia; classify as overseas territory like the
-- French Southern and Antarctic Lands.
["Clipperton Island"] = {
placetype = {"overseas territory", "territory"},
container = "Pháp",
addl_parents = {"Bắc Mỹ"},
},
-- Australian external territory; also called the Keeling Islands or (officially) the Cocos (Keeling) Islands
["Cocos Islands"] = {
the = true,
placetype = {"external territory", "territory"},
container = "Úc",
addl_parents = {"châu Á"},
wp = "Cocos (Keeling) Islands",
british_spelling = true,
},
["Cocos (Keeling) Islands"] = {alias_of = "Cocos Islands", display = true, the = true},
["Keeling Islands"] = {alias_of = "Cocos Islands", display = true, the = true},
-- self-governing but in free association with New Zealand
["Cook Islands"] = {
the = true,
placetype = {"quốc gia"},
container = "New Zealand",
addl_parents = {"Polynesia"},
british_spelling = true,
},
-- constituent country of the Netherlands
["Curaçao"] = {
placetype = {"constituent country", "quốc gia"},
container = "Hà Lan",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- special territory of Chile
["Easter Island"] = {
placetype = {"special territory", "territory"},
container = "Chile",
addl_parents = {"Polynesia"},
},
-- British Overseas Territory
["Falkland Islands"] = {
the = true,
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Nam Mỹ"},
british_spelling = true,
},
-- autonomous territory of Denmark
["Faroe Islands"] = {
the = true,
placetype = {"autonomous territory", "territory"},
container = "Đan Mạch",
addl_parents = {"châu Âu"},
british_spelling = true,
},
-- overseas department and region of France
["French Guiana"] = {
placetype = {"overseas department", "department", "administrative region", "region"},
container = "Pháp",
divs = {"communes"},
addl_parents = {"Nam Mỹ"},
british_spelling = true,
},
-- overseas collectivity of France
["French Polynesia"] = {
placetype = {"overseas collectivity", "collectivity"},
container = "Pháp",
addl_parents = {"Polynesia"},
british_spelling = true,
},
-- French overseas territory
["French Southern and Antarctic Lands"] = {
the = true,
placetype = {"overseas territory", "territory"},
container = "Pháp",
addl_parents = {"châu Phi"},
},
-- British Overseas Territory
["Gibraltar"] = {
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"châu Âu"},
is_city = true,
british_spelling = true,
},
-- autonomous territory of Denmark
["Greenland"] = {
placetype = {"autonomous territory", "territory"},
container = "Đan Mạch",
addl_parents = {"Bắc Mỹ"},
divs = {"municipalities"},
british_spelling = true,
},
-- overseas department and region of France
["Guadeloupe"] = {
placetype = {"overseas department", "department", "administrative region", "region"},
container = "Pháp",
addl_parents = {"Caribe"},
divs = {"communes"},
british_spelling = true,
},
-- unincorporated territory of the United States
["Guam"] = {
placetype = {"unincorporated territory", "overseas territory", "territory"},
container = "Hoa Kỳ",
addl_parents = {"Micronesia"},
},
-- self-governing British Crown dependency; technically called the Bailiwick of Guernsey
["Guernsey"] = {
placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"},
container = "United Kingdom",
addl_parents = {"British Isles", "châu Âu"},
british_spelling = true,
wp = "Bailiwick of %l",
},
["Bailiwick of Guernsey"] = {alias_of = "Guernsey"},
-- Australian external territory
["Heard Island and McDonald Islands"] = {
the = true,
placetype = {"external territory", "territory"},
container = "Úc",
addl_parents = {"châu Phi"},
},
-- special administrative region of China
["Hồng Kông"] = {
placetype = {"special administrative region", "thành phố"},
container = "Trung Quốc",
is_city = true,
british_spelling = true,
},
-- self-governing British Crown dependency
["Isle of Man"] = {
the = true,
placetype = {"crown dependency", "dependency", "dependent territory", "territory"},
container = "United Kingdom",
addl_parents = {"British Isles", "châu Âu"},
british_spelling = true,
},
-- Norwegian unincorporated area
["Jan Mayen"] = {
placetype = {"unincorporated area", "dependent territory", "territory", "island"},
container = "Na Uy",
addl_parents = {"châu Âu"},
british_spelling = true,
},
-- self-governing British Crown dependency; technically called the Bailiwick of Jersey
["Jersey"] = {
placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"},
container = "United Kingdom",
addl_parents = {"British Isles", "châu Âu"},
british_spelling = true,
},
["Bailiwick of Jersey"] = {alias_of = "Jersey"},
-- special administrative region of China
["Ma Cao"] = {
placetype = {"special administrative region", "thành phố"},
container = "Trung Quốc",
is_city = true,
british_spelling = true,
},
-- overseas department and region of France
["Martinique"] = {
placetype = {"overseas department", "department", "administrative region", "region"},
container = "Pháp",
divs = {"communes"},
addl_parents = {"Caribe"},
british_spelling = true,
},
-- overseas department and region of France
["Mayotte"] = {
placetype = {"overseas department", "department", "administrative region", "region"},
container = "Pháp",
divs = {"communes"},
addl_parents = {"châu Phi"},
british_spelling = true,
},
-- British Overseas Territory
["Montserrat"] = {
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- special collectivity of France
["New Caledonia"] = {
placetype = {"special collectivity", "collectivity"},
container = "Pháp",
addl_parents = {"Melanesia"},
british_spelling = true,
},
-- dependent territory of New Zealand
["New Zealand Subantarctic Islands"] = {
the = true,
placetype = {"dependent territory", "territory"},
container = "New Zealand",
addl_parents = {"Antarctica"},
british_spelling = true,
},
-- self-governing but in free association with New Zealand
["Niue"] = {
placetype = {"quốc gia"},
container = "New Zealand",
addl_parents = {"Polynesia"},
british_spelling = true,
},
-- Australian external territory
["Norfolk Island"] = {
placetype = {"external territory", "territory"},
container = "Úc",
addl_parents = {"Polynesia"},
british_spelling = true,
},
-- de-facto independent state, internationally recognized as part of Cyprus
["Northern Cyprus"] = {
placetype = {"unrecognized country", "quốc gia"},
addl_parents = {"Cyprus", "Thổ Nhĩ Kỳ", "châu Âu", "châu Á"},
divs = {"districts"},
keydesc = "the de-facto independent state of [[Northern Cyprus]], internationally recognized as part of the country of [[Cyprus]]",
british_spelling = true,
},
-- commonwealth, unincorporated territory of the United States
["Northern Mariana Islands"] = {
the = true,
placetype = {"commonwealth", "unincorporated territory", "overseas territory", "territory"},
container = "Hoa Kỳ",
addl_parents = {"Micronesia"},
},
-- British Overseas Territory
["Pitcairn Islands"] = {
the = true,
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Polynesia"},
british_spelling = true,
},
-- commonwealth of the United States
["Puerto Rico"] = {
placetype = {"commonwealth", "overseas territory", "territory"},
container = "Hoa Kỳ",
addl_parents = {"Caribe"},
divs = {"municipalities"},
},
-- overseas department and region of France
["Réunion"] = {
placetype = {"overseas department", "department", "administrative region", "region"},
container = "Pháp",
divs = {"communes"},
addl_parents = {"châu Phi"},
british_spelling = true,
},
-- special municipality of the Netherlands
["Saba"] = {
placetype = {"special municipality", "municipality", "overseas territory", "territory"},
container = "Hà Lan",
addl_parents = {"Caribe"},
is_city = true,
british_spelling = true,
},
-- overseas collectivity of France
["Saint Barthélemy"] = {
placetype = {"overseas collectivity", "collectivity"},
container = "Pháp",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- British Overseas Territory
["Saint Helena, Ascension and Tristan da Cunha"] = {
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
divs = {{type = "constituent parts", container_parent_type = false}},
addl_parents = {"Atlantic Ocean", "châu Phi"},
british_spelling = true,
},
-- constituent parts of the combined oveseas territory
["Ascension Island"] = {
placetype = {"constituent part", "territory", "island"},
container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"},
addl_parents = {"Atlantic Ocean"},
overriding_bare_label_parents = {},
no_container_cat = false,
no_container_parent = false,
no_auto_augment_container = false,
},
["Saint Helena"] = {
placetype = {"constituent part", "territory", "island"},
container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"},
addl_parents = {"Atlantic Ocean"},
overriding_bare_label_parents = {},
no_container_cat = false,
no_container_parent = false,
no_auto_augment_container = false,
},
["Tristan da Cunha"] = {
placetype = {"constituent part", "territory", "archipelago"},
container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"},
addl_parents = {"Atlantic Ocean"},
overriding_bare_label_parents = {},
no_container_cat = false,
no_container_parent = false,
no_auto_augment_container = false,
},
-- overseas collectivity of France
["Saint Martin"] = {
placetype = {"overseas collectivity", "collectivity"},
container = "Pháp",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- overseas collectivity of France
["Saint Pierre and Miquelon"] = {
placetype = {"overseas collectivity", "collectivity"},
container = "Pháp",
divs = {"communes"},
addl_parents = {"Bắc Mỹ"},
british_spelling = true,
},
-- special municipality of the Netherlands
["Sint Eustatius"] = {
placetype = {"special municipality", "municipality", "overseas territory", "territory"},
container = "Hà Lan",
addl_parents = {"Caribe"},
is_city = true,
british_spelling = true,
},
-- constituent country of the Netherlands
["Sint Maarten"] = {
placetype = {"constituent country", "quốc gia"},
container = "Hà Lan",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- de-facto independent state, internationally recognized as part of Somalia
["Somaliland"] = {
placetype = {"unrecognized country", "quốc gia"},
addl_parents = {"Somalia", "châu Phi"},
keydesc = "the de-facto independent state of [[Somaliland]], internationally recognized as part of the country of [[Somalia]]",
british_spelling = true,
},
-- British Overseas Territory
-- FIXME: We should form the group "South Georgia and the South Sandwich Islands" like we did for
-- "Saint Helena, Ascension and Tristan da Cunha".
["South Georgia"] = {
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Atlantic Ocean"},
british_spelling = true,
},
-- de-facto independent state, internationally recognized as part of Georgia
["South Ossetia"] = {
placetype = {"unrecognized country", "quốc gia"},
addl_parents = {"Georgia", "châu Âu", "châu Á"},
keydesc = "the de-facto independent state of [[South Ossetia]], internationally recognized as part of the country of [[Georgia]]",
british_spelling = true,
},
-- British Overseas Territory
["South Sandwich Islands"] = {
the = true,
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Atlantic Ocean"},
wp = true,
wpcat = "South Georgia and the South Sandwich Islands",
british_spelling = true,
},
-- Norwegian unincorporated area
["Svalbard"] = {
placetype = {"unincorporated area", "dependent territory", "territory", "archipelago"},
container = "Na Uy",
addl_parents = {"châu Âu"},
british_spelling = true,
},
-- dependent territory of New Zealand
["Tokelau"] = {
placetype = {"dependent territory", "territory"},
container = "New Zealand",
addl_parents = {"Polynesia"},
british_spelling = true,
},
-- de-facto independent state, internationally recognized as part of Moldova
["Transnistria"] = {
placetype = {"unrecognized country", "quốc gia"},
addl_parents = {"Moldova", "châu Âu"},
keydesc = "the de-facto independent state of [[Transnistria]], internationally recognized as part of [[Moldova]]",
british_spelling = true,
},
-- British Overseas Territory
["Turks and Caicos Islands"] = {
the = true,
placetype = {"overseas territory", "territory"},
container = "United Kingdom",
addl_parents = {"Caribe"},
british_spelling = true,
},
-- unincorporated territory of the United States
["United States Minor Outlying Islands"] = {
the = true,
placetype = {"unincorporated territory", "overseas territory", "territory"},
container = "Hoa Kỳ",
addl_parents = {"Islands", "Micronesia", "Polynesia", "Caribe"},
},
-- FIXME: We should add entries for the other minor outlying islands.
-- Baker Island (Oceania)
-- Howland Island (Oceania)
-- Jarvis Island (Oceania)
-- Johnston Atoll (Oceania)
-- Kingman Reef (Oceania)
-- Midway Atoll (Oceania)
-- Navassa Island (Caribbean)
-- Palmyra Atoll (Oceania)
-- Wake Island (Oceania)
["Wake Island"] = {
placetype = {"unincorporated territory", "overseas territory", "territory"},
container = "Hoa Kỳ",
addl_parents = {"Micronesia"},
},
-- unincorporated territory of the United States
["United States Virgin Islands"] = {
the = true,
placetype = {"unincorporated territory", "overseas territory", "territory"},
container = "Hoa Kỳ",
addl_parents = {"Caribe"},
},
["U.S. Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true},
["US Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true},
-- overseas collectivity of France
["Wallis and Futuna"] = {
placetype = {"overseas collectivity", "collectivity"},
container = "Pháp",
addl_parents = {"Polynesia"},
british_spelling = true,
},
}
export.country_like_entities_group = {
-- don't do any transformations between key and placename; in particular, don't chop off anything from
-- "Saint Helena, Ascension and Tristan da Cunha".
key_to_placename = false,
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"),
default_overriding_bare_label_parents = {"country-like entities"},
default_no_container_cat = true,
default_no_container_parent = true,
-- These entities often aren't really part of their container; a village in Wallis and Futuna (an overseas
-- collectivity of France in Polynesia), for example, shouldn't be treated as a village in France, nor as a village
-- in Europe.
default_no_auto_augment_container = true,
data = export.country_like_entities,
}
-- Former countries and such; we don't create "Cities in ..." categories because they don't exist anymore
export.former_countries = {
-- de-facto independent state of Armenian ethnicity, internationally recognized as part of Azerbaijan
-- (also known as Nagorno-Karabakh)
-- NOTE: Formerly listed Armenia as a parent; this seems politically non-neutral so I've taken it out.
["Artsakh"] = {
placetype = {"unrecognized country", "quốc gia"},
addl_parents = {"Azerbaijan", "châu Âu", "châu Á"},
keydesc = "the former de-facto independent state of [[Artsakh]], internationally recognized as part of [[Azerbaijan]]",
british_spelling = true,
},
["Nagorno-Karabakh"] = {alias_of = "Artsakh"},
["Czechoslovakia"] = {container = "châu Âu", british_spelling = true},
["East Germany"] = {container = "châu Âu", addl_parents = {"Đức"}, british_spelling = true},
["North Vietnam"] = {container = "châu Á", addl_parents = {"Vietnam"}},
["Persia"] = {placetype = {"empire", "quốc gia"}, container = "châu Á", divs = {"provinces"}},
["Byzantine Empire"] = {
the = true, placetype = {"empire", "quốc gia"}, container = {"châu Âu", "châu Phi", "châu Á"},
addl_parents = {"Ancient Europe", "Ancient Near East"},
divs = {
"provinces", "themes",
}},
["Roman Empire"] = {
the = true, placetype = {"empire", "quốc gia"}, container = {"châu Âu", "châu Phi", "châu Á"}, addl_parents = {"Rome"},
divs = {
"provinces",
{type = "FORMER provinces", cat_as = "provinces"},
}},
["Việt Nam Cộng hòa"] = {container = "châu Á", commonscat = "South Vietnam", addl_parents = {"Việt Nam"}},
["Soviet Union"] = {
the = true, container = {"châu Âu", "châu Á"}, divs = {"republics", "autonomous republics"},
british_spelling = true},
["West Germany"] = {container = "châu Âu", addl_parents = {"Đức"}, british_spelling = true},
["Yugoslavia"] = {container = "châu Âu", divs = {"districts"},
keydesc = "the former [[Kingdom of Yugoslavia]] (1918–1943) or the former [[Socialist Federal Republic of Yugoslavia]] (1943–1992)", british_spelling = true},
}
export.former_countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_overriding_bare_label_parents = {"former countries and country-like entities"},
default_is_former_place = true,
default_placetype = "quốc gia",
default_no_container_cat = true,
default_no_container_parent = true,
-- No need to augment country holonyms with continents; not needed for disambiguation.
default_no_auto_augment_container = true,
data = export.former_countries,
}
-----------------------------------------------------------------------------------
-- Subpolity tables --
-----------------------------------------------------------------------------------
export.australia_states_and_territories = {
["Lãnh thổ Thủ đô Úc, Úc"] = {placetype = "territory"},
["Jervis Bay Territory, Úc"] = {placetype = "territory"},
["New South Wales, Úc"] = {},
["Northern Territory, Úc"] = {placetype = "territory"},
["Queensland, Úc"] = {},
["South Australia, Úc"] = {},
["Tasmania, Úc"] = {},
["Victoria, Úc"] = {},
["Western Australia, Úc"] = {},
}
-- states and territories of Australia
export.australia_group = {
default_container = "Úc",
default_placetype = "state",
default_divs = "local government areas",
data = export.australia_states_and_territories,
}
export.austria_states = {
["Vienna, Austria"] = {},
["Lower Austria, Austria"] = {},
["Upper Austria, Austria"] = {},
["Styria, Austria"] = {},
["Tyrol, Austria"] = {wp = "Tyrol (state)"},
["Carinthia, Austria"] = {},
["Salzburg, Austria"] = {wp = "Salzburg (state)"},
["Vorarlberg, Austria"] = {},
["Burgenland, Austria"] = {},
}
-- states of Austria
export.austria_group = {
default_container = "Áo",
default_placetype = "state",
default_divs = "municipalities",
data = export.austria_states,
}
export.bangladesh_divisions = {
["Barisal Division, Bangladesh"] = {},
["Chittagong Division, Bangladesh"] = {},
["Dhaka Division, Bangladesh"] = {},
["Khulna Division, Bangladesh"] = {},
["Mymensingh Division, Bangladesh"] = {},
["Rajshahi Division, Bangladesh"] = {},
["Rangpur Division, Bangladesh"] = {},
["Sylhet Division, Bangladesh"] = {},
}
-- divisions of Bangladesh
export.bangladesh_group = {
key_to_placename = make_key_to_placename(", Bangladesh$", " Division$"),
placename_to_key = make_placename_to_key(", Bangladesh", " Division"),
default_container = "Bangladesh",
default_placetype = "division",
default_divs = "districts",
data = export.bangladesh_divisions,
}
export.brazil_states = {
["Acre, Brazil"] = {wp = "%l (state)"},
["Alagoas, Brazil"] = {},
["Amapá, Brazil"] = {},
["Amazonas, Brazil"] = {wp = "%l (Brazilian state)"},
["Bahia, Brazil"] = {},
["Ceará, Brazil"] = {},
["Distrito Federal, Brazil"] = {wp = "Federal District (Brazil)"},
["Espírito Santo, Brazil"] = {},
["Goiás, Brazil"] = {},
["Maranhão, Brazil"] = {},
["Mato Grosso, Brazil"] = {},
["Mato Grosso do Sul, Brazil"] = {},
["Minas Gerais, Brazil"] = {},
["Pará, Brazil"] = {},
["Paraíba, Brazil"] = {},
["Paraná, Brazil"] = {wp = "%l (state)"},
["Pernambuco, Brazil"] = {},
["Piauí, Brazil"] = {},
["Rio de Janeiro, Brazil"] = {wp = "%l (state)"},
["Rio Grande do Norte, Brazil"] = {},
["Rio Grande do Sul, Brazil"] = {},
["Rondônia, Brazil"] = {},
["Roraima, Brazil"] = {},
["Santa Catarina, Brazil"] = {wp = "%l (state)"},
["São Paulo, Brazil"] = {wp = "%l (state)"},
["Sergipe, Brazil"] = {},
["Tocantins, Brazil"] = {},
}
-- states of Brazil
export.brazil_group = {
default_container = "Brazil",
default_placetype = "state",
default_divs = "municipalities",
data = export.brazil_states,
}
-- provinces (a.k.a. oblasts) of Bulgaria
export.bulgaria_provinces = {
["Blagoevgrad Province, Bulgaria"] = {},
["Burgas Province, Bulgaria"] = {},
["Dobrich Province, Bulgaria"] = {},
["Gabrovo Province, Bulgaria"] = {},
["Haskovo Province, Bulgaria"] = {},
["Kardzhali Province, Bulgaria"] = {},
["Kyustendil Province, Bulgaria"] = {},
["Lovech Province, Bulgaria"] = {},
["Montana Province, Bulgaria"] = {},
["Pazardzhik Province, Bulgaria"] = {},
["Pernik Province, Bulgaria"] = {},
["Pleven Province, Bulgaria"] = {},
["Plovdiv Province, Bulgaria"] = {},
["Razgrad Province, Bulgaria"] = {},
["Ruse Province, Bulgaria"] = {},
["Shumen Province, Bulgaria"] = {},
["Silistra Province, Bulgaria"] = {},
["Sliven Province, Bulgaria"] = {},
["Smolyan Province, Bulgaria"] = {},
["Sofia City Province, Bulgaria"] = {},
["Sofia Province, Bulgaria"] = {},
["Stara Zagora Province, Bulgaria"] = {},
["Targovishte Province, Bulgaria"] = {},
["Varna Province, Bulgaria"] = {},
["Veliko Tarnovo Province, Bulgaria"] = {},
["Vidin Province, Bulgaria"] = {},
["Vratsa Province, Bulgaria"] = {},
["Yambol Province, Bulgaria"] = {},
}
export.bulgaria_group = {
key_to_placename = make_key_to_placename(", Bulgaria$", " Province$"),
placename_to_key = make_placename_to_key(", Bulgaria", " Province"),
default_container = "Bulgaria",
--== source: https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Bulgaria ==
divs = {"regions", "planning regions", "provinces", "municipalities", "settlements"},
default_placetype = "province",
data = export.bulgaria_provinces,
}
export.canada_provinces_and_territories = {
["Alberta, Canada"] = {divs = {
{type = "municipal districts", container_parent_type = "rural municipalities"},
}},
["British Columbia, Canada"] = {divs =
{type = "regional districts", container_parent_type = false},
"regional municipalities",
},
["Manitoba, Canada"] = {divs = {"rural municipalities"}},
["New Brunswick, Canada"] = {divs = {"counties", "parishes", {type = "civil parishes", cat_as = "parishes"}}},
["Newfoundland and Labrador, Canada"] = {},
["Northwest Territories, Canada"] = {the = true, placetype = "territory"},
["Nova Scotia, Canada"] = {divs = {"counties", "regional municipalities"}},
["Nunavut, Canada"] = {placetype = "territory"},
["Ontario, Canada"] = {divs = {"counties", "regional municipalities", {type = "townships", prep = "in"}}},
["Prince Edward Island, Canada"] = {divs = {"counties", "parishes", "rural municipalities"}},
["Saskatchewan, Canada"] = {divs = {"rural municipalities"}},
["Quebec, Canada"] = {divs = {
"counties",
{type = "regional county municipalities", container_parent_type = "regional municipalities"},
-- administrative regions have an official (but non-governmental) function but there don't appear to be any
-- equivalent regions elsewhere in Canada, so disable the [[Category:Regions of Canada]] grouping
{type = "regions", container_parent_type = false},
{type = "townships", prep = "in"},
{type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}},
{type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}},
{type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}},
}},
["Yukon, Canada"] = {placetype = "territory"},
["Yukon Territory, Canada"] = {alias_of = "Yukon, Canada"},
}
-- provinces and territories of Canada
export.canada_group = {
default_container = "Canada",
default_placetype = "province",
data = export.canada_provinces_and_territories,
}
export.china_provinces_and_autonomous_regions = {
-- direct-administered municipalities are not here but below under prefecture-level cities
["Anhui, China"] = {},
["Fujian, China"] = {},
["Fuchien, China"] = {alias_of = "Fujian, China", display = true},
["Gansu, China"] = {},
["Guangdong, China"] = {},
["Guangxi, China"] = {placetype = "autonomous region"},
["Guizhou, China"] = {},
["Hainan, China"] = {},
["Hebei, China"] = {},
["Heilongjiang, China"] = {},
["Henan, China"] = {},
["Hubei, China"] = {},
["Hunan, China"] = {},
["Inner Mongolia, China"] = {placetype = "autonomous region"},
["Jiangsu, China"] = {},
["Jiangxi, China"] = {},
["Jilin, China"] = {},
["Liaoning, China"] = {},
["Ningxia, China"] = {placetype = "autonomous region"},
["Qinghai, China"] = {},
["Shaanxi, China"] = {},
["Shandong, China"] = {},
["Shanxi, China"] = {},
["Sichuan, China"] = {},
["Tibet, China"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"},
["Xinjiang, China"] = {placetype = "autonomous region"},
["Yunnan, China"] = {},
["Zhejiang, China"] = {},
}
-- provinces and autonomous regions of China
export.china_group = {
default_container = "Trung Quốc",
default_placetype = "province",
default_divs = {
"prefectures", "prefecture-level cities",
"districts", "subdistricts", "townships",
{type = "counties", cat_as = "counties and county-level cities"},
{type = "county-level cities", cat_as = "counties and county-level cities"},
},
data = export.china_provinces_and_autonomous_regions,
}
export.china_prefecture_level_cities = {
-- In China, a "prefecture-level city" is not a city in any real sense. It is rather a prefecture, which is an
-- administrative unit smaller than a province but bigger than a county, which is administratively controlled by
-- the chief city of the prefecture (which bears the same name as the prefecture), in a unified government. Prior
-- to the mid-1980's, in fact, prefecture-level cities *were* prefectures, and a few of them (especially in the
-- western portion of China) have not yet been converted. Generally a given province is entirely tiled by
-- prefecture-level cities, another indication that they should be treated as prefectures and not cities per se.
-- Yet another indication is that prefecture-level cities can contain counties and county-level cities (which, much
-- like prefecture-level cities, are effectively counties surrounding a chief city of the county, again which bears
-- the same name as the county-level city).
--
-- For this reason, we treat prefecture-level cities as non-city political divisions, and separately enumerate the
-- most populous so we can separately categorize districts and counties under them instead of lumping them at the
-- province level.
--
-- Note also that China separately distinguishes "urban area" from "metro area". Sometimes the two figures are
-- identical but sometimes the metro area is larger (and very occasionally smaller, which I assume is an error). I'm
-- guessing that the "urban area" is the contiguous urban area over a certain density while the metro area includes
-- all urban areas above a certain density; when the latter is greater, it's because of satellite cities in the
-- metro area separated by suburban/exurban or rural land.
-- At first I chose all prefecture/province-level cities with a total prefecture/province-level population of at
-- least 6,000,000 per the 2020 census with data taken from https://www.citypopulation.de/en/china/admin/ (a total
-- of 67, including the four direct-administered municipalities), and also chose all prefecture/province-level
-- cities whose "urban population" was at least 2,000,000 per the 2020 census with data taken from Wikipedia
-- [[w:List of cities in China by population#Cities and towns by population]] (a total of 61 cities; if we cut off
-- at 1.5 million we'd have 84 cities, and if we cut off at 1 million we'd have 105 cities). Merging them produces
-- 87 cities. Note that this leaves off a few well-known cities (Guilin, Qiqihar, Kashgar, Lhasa, ...) but includes
-- a lot of obscure cities.
--
-- At a later date I added all cities from citypopulation.de whose "urban" population per the 2020 China census was
-- >= 1 million, and then finally added all urban agglomerations from citypopulation.de whose 2025-01-01 estimate
-- was >= 1 million. These are sorted below by the urban agglomeration value (which is generally of the "adm-urb" =
-- "administrative area (urban population)" type) and sometimes groups nearby cities into a single agglomeration
-- (most notably in the case of the Pearl River Delta, grouped under Guangzhou with an agglomeration population of
-- 72,700,000 but including a large number of nearby large cities in the agglomeration (although for some reason not
-- Hong Kong, maybe due to the administrative issues involved). In addition, citypopulation.de includes divisions
-- under a prefecture-level city if they are city-like and have an agglomeration population of at least 1 million;
-- this includes several county-level cities, one county and one district (Wanzhou, a "district" of Chongqing
-- despite being 142 miles away). None of the county-level cities or counties have districts under them, only
-- subdistricts, towns and townships.
["Guangzhou"] = {container = "Guangdong"}, -- 18.7 prefectural, 18.8 urban; sub-provincial city; 16.097 urban (72.700 adm-urb including Dongguan, Foshan, Huizhou, Jiangmen, Shenzhen, Zhongshan) per citypopulation.de
["Dongguan"] = {container = "Guangdong"}, -- 10.5 prefectural, 10.5 urban; 9.645 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration
["Foshan"] = {container = "Guangdong"}, -- 9.5 prefectural, 9.5 urban; 9.043 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration
["Huizhou"] = {container = "Guangdong"}, -- 6.0 prefectural, 2.5 urban; 2.900 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration
["Jiangmen"] = {container = "Guangdong"}, -- 4.798 prefectural, 2.7 urban; 1.795 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration
["Shenzhen"] = {container = "Guangdong"}, -- 17.5 prefectural, 14.7 urban; sub-provincial city; 17.445 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration
["Zhongshan"] = {container = "Guangdong"}, -- 4.418 prefectural, 4.4 urban; 3.842 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration
["Shanghai"] = {placetype = {"direct-administered municipality", "municipality", "thành phố"}}, -- 24.9 prefectural, 29.9 urban; 21.910 urban (41.600 adm-urb including Changshu, Changzhou, Suzhou, Wuxi) per citypopulation.de
["Changshu"] = {container = "Jiangsu"}, -- 1.231 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration
-- NOTE: Not to be confused with Cangzhou in Hebei
["Changzhou"] = {container = "Jiangsu"}, -- 5.278 prefectural, 3.6 urban; 3.187 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration
-- NOTE: There is also a prefecture-level city Suzhou in Anhui with 5.3 million prefectural inhabitants
["Suzhou"] = {container = "Jiangsu"}, -- 12.8 prefectural, 4.3 urban; 5.893 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration
["Wuxi"] = {container = "Jiangsu"}, -- 7.5 prefectural, 3.3 urban; 3.957 per citypopulation.de; included by citypopulation.de in Shanghai agglomeration
["Bắc Kinh"] = {placetype = {"direct-administered municipality", "municipality", "thành phố"}}, -- 21.9 prefectural, 21.9 urban; 18.961 urban (21.500 adm-urb) per citypopulation.de
["Chengdu"] = {container = "Sichuan"}, -- 20.9 prefectural, 16.9 urban; sub-provincial city; 13.568 urban (18.100 adm-urb) per citypopulation.de
["Xiamen"] = {container = "Fujian"}, -- 5.163 prefectural, 5.2 urban; sub-provincial city; 4.617 urban (15.400 adm-urb including Jinjiang, Quanzhou, Putian) per citypopulation.de
["Jinjiang"] = {container = "Fujian"}, -- 1.416 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration
["Quanzhou"] = {container = "Fujian"}, -- 8.8 prefectural, 1.7 urban (6.7 metro); 1.469 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration
["Putian"] = {container = "Fujian"}, -- 3.210 prefectural, 2.0 urban; 1.539 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration
["Hangzhou"] = {container = "Zhejiang"}, -- 11.9 prefectural, 10.7 urban; sub-provincial city; 9.236 urban (14.600 adm-urb including Shaoxing) per citypopulation.de
["Shaoxing"] = {container = "Zhejiang"}, -- 5.270 prefectural, 2.5 urban; 2.333 urban per citypopulation.de; included by citypopulation.de in Hangzhou agglomeration
["Xi'an"] = {container = "Shaanxi"}, -- 12.1 prefectural, 11.9 urban; sub-provincial city; 9.393 urban (13.400 adm-urb including Xianyang) per citypopulation.de
["Xianyang"] = {container = "Shaanxi"}, -- 1.193 urban per citypopulation.de; included by citypopulation.de in Xi'an agglomeration
["Chongqing"] = {placetype = {"direct-administered municipality", "municipality", "thành phố"}}, -- 32.1 prefectural, 16.9 urban; 9.581 urban (12.900 adm-urb) per citypopulation.de
["Wuhan"] = {container = "Hubei"}, -- 12.4 prefectural, 12.3 urban; sub-provincial city; 10.495 urban (12.600 adm-urb) per citypopulation.de
["Tianjin"] = {placetype = {"direct-administered municipality", "municipality", "thành phố"}}, -- 13.9 prefectural, 13.9 urban; 11.052 urban (11.700 adm-urb) per citypopulation.de
["Changsha"] = {container = "Hunan"}, -- 10.0 prefectural, 6.0 urban; 5.630 urban (11.500 adm-urb including Xiangtan, Zhuzhou) per citypopulation.de
-- Changsha County -- 1.024 urban per citypopulation.de
["Zhuzhou"] = {container = "Hunan"}, -- 1.510 urban per citypopulation.de; included by citypopulation.de in Changsha agglomeration
["Zhengzhou"] = {container = "Henan"}, -- 12.6 prefectural, 6.7 urban; 6.461 urban (10.300 adm-urb) per citypopulation.de
["Nanjing"] = {container = "Jiangsu"}, -- 9.3 prefectural, 9.3 urban; sub-provincial city; 7.520 urban (9.500 adm-urb including Ma'anshan) per citypopulation.de
["Shenyang"] = {container = "Liaoning"}, -- 9.1 prefectural, 7.9 urban; sub-provincial city; 7.026 urban (8.800 adm-urb including Fushun) per citypopulation.de
["Fushun"] = {container = "Liaoning"}, -- 1.229 urban per citypopulation.de; included by citypopulation.de in Shenyang agglomeration
["Hefei"] = {container = "Anhui"}, -- 9.4 prefectural, 4.2 urban; 5.056 urban (8.200 adm-urb) per citypopulation.de
["Shantou"] = {container = "Guangdong"}, -- 5.502 prefectural, 4.3 urban; 3.839 urban (8.050 adm-urb including Chaozhou, Jieyang, Puning) per citypopulation.de
["Chaozhou"] = {container = "Guangdong"}, -- 1.254 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration
["Jieyang"] = {container = "Guangdong"}, -- 1.243 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration
["Qingdao"] = {container = "Shandong"}, -- 10.1 prefectural, 7.1 urban; sub-provincial city; 6.165 urban (7.700 adm-urb) per citypopulation.de
["Ningbo"] = {container = "Zhejiang"}, -- 9.4 prefectural, 5.1 urban; sub-provincial city; 3.731 urban (7.600 adm-urb including Cixi, Yuyao) per citypopulation.de
["Cixi"] = {container = "Zhejiang"}, -- 1.458 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration
["Yuyao"] = {container = "Zhejiang"}, -- 1.014 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration
-- Hong Kong 7.500 agglomeration per citypopulation.de 2025-01-01 estimate including Kowloon, Victoria
["Wenzhou"] = {container = "Zhejiang"}, -- 9.6 prefectural, 3.6 urban; 2.582 urban (7.000 adm-urb including Rui'an, Cangnan, Pingyang) per citypopulation.de
-- Rui'an is a "county-level city" of the "prefecture-level city" of Wenzhou but in fact is 19 miles away from Wenzhou city proper (urban core to urban core).
["Rui'an"] = {placetype = "county-level city", container = {key = "Wenzhou", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 1.013 urban per citypopulation.de; included by citypopulation.de in Wenzhou agglomeration
["Kunming"] = {container = "Yunnan"}, -- 8.5 prefectural, 6.0 urban; 5.273 urban (6.800 adm-urb) per citypopulation.de
-- includes Láiwú city
["Jinan"] = {container = "Shandong", wp = "%l, %c"}, -- 9.2 prefectural, 8.4 urban; sub-provincial city; 5.648 urban (6.750 adm-urb) per citypopulation.de
-- includes Xīnjí city
["Shijiazhuang"] = {container = "Hebei"}, -- 11.2 prefectural, 4.1 urban; 5.090 urban (6.450 adm-urb) per citypopulation.de
["Taiyuan"] = {container = "Shanxi"}, -- 5.304 prefectural, 4.5 urban; 4.304 urban (6.150 adm-urb) per citypopulation.de
["Harbin"] = {container = "Heilongjiang"}, -- 10.0 prefectural, 7.0 urban; sub-provincial city; 5.243 urban (5.550 adm-urb) per citypopulation.de
["Nanning"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 8.7 prefectural, 3.8 urban; 4.583 urban (5.550 adm-urb) per citypopulation.de
["Dalian"] = {container = "Liaoning"}, -- 7.5 prefectural, 5.7 urban; sub-provincial city; 4.914 urban (5.400 adm-urb) per citypopulation.de
["Guiyang"] = {container = "Guizhou"}, -- 5.987 prefectural, 3.5 urban; 4.021 urban (5.300 adm-urb) per citypopulation.de
["Changchun"] = {container = "Jilin"}, -- 9.1 prefectural, 5.7 urban; sub-provincial city; 4.557 urban (5.200 adm-urb) per citypopulation.de
["Nanchang"] = {container = "Jiangxi"}, -- 6.3 prefectural, 3.6 (3.9?) urban, 5.3 metro; 3.519 urban (5.150 adm-urb) per citypopulation.de
["Ürümqi"] = {container = {key = "Xinjiang, China", placetype = "autonomous region"}}, -- 4.054 prefectural, 4.3 urban; 3.843 urban (5.000 adm-urb) per citypopulation.de
["Urumqi"] = {alias_of = "Ürümqi", display = true},
["Fuzhou"] = {container = "Fujian"}, -- 8.3 prefectural, 4.1 urban; 3.723 urban (4.775 adm-urb) per citypopulation.de
["Linyi"] = {container = "Shandong"}, -- 11.0 prefectural, 2.3 urban; 2.744 urban (4.650 adm-urb) per citypopulation.de
["Zibo"] = {container = "Shandong"}, -- 4.704 prefectural, 2.6 urban; 2.750 urban (3.975 adm-urb) per citypopulation.de
["Luoyang"] = {container = "Henan"}, -- 7.1 prefectural, 2.4 urban; 2.231 urban (3.750 adm-urb) per citypopulation.de
["Lanzhou"] = {container = "Gansu"}, -- 4.359 prefectural, 3.1 urban; 3.013 urban (3.575 adm-urb) per citypopulation.de
["Nantong"] = {container = "Jiangsu"}, -- 7.7 prefectural, 2.3 urban; 2.988 urban (3.475 adm-urb) citypopulation.de
["Weifang"] = {container = "Shandong"}, -- 9.4 prefectural, 2.7 urban; 1.998 urban (3.325 adm-urb) per citypopulation.de
["Jiangyin"] = {container = "Jiangsu"}, -- 1.331 urban (3.200 adm-urb including Zhangjiagang) per citypopulation.de
["Zhangjiagang"] = {container = "Jiangsu"}, -- 1.056 urban per citypopulation.de; included in Jiangyin figures
["Xuzhou"] = {container = "Jiangsu"}, -- 9.1 prefectural, 2.6 urban; 2.846 urban (3.150 adm-urb) per citypopulation.de
["Handan"] = {container = "Hebei"}, -- 9.4 prefectural, 2.8 urban; 2.095 urban (2.925 adm-urb) per citypopulation.de
["Hohhot"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 3.446 prefectural, 2.7 urban; 2.373 urban (2.850 adm-urb) per citypopulation.de
["Haikou"] = {container = "Hainan"}, -- 2.873 prefectural, 2.3 urban; 2.349 urban (2.800 adm-urb) per citypopulation.de
["Tangshan"] = {container = "Hebei"}, -- 7.7 prefectural, 3.4 urban; 2.550 urban (2.750 adm-urb) per citypopulation.de
["Xinxiang"] = {container = "Henan"}, -- 6.3 prefectural, 1.2 urban, 2.7 metro; 1.271 urban (2.700 adm-urb) per citypopulation.de
["Yiwu"] = {container = "Zhejiang"}, -- 1.481 urban (2.700 adm-urb) per citypopulation.de
["Zhuhai"] = {container = "Guangdong"}, -- 2.439 prefectural, 2.4 urban; 2.207 urban (2.675 adm-urb) per citypopulation.de
["Taizhou, Zhejiang"] = {container = "Zhejiang"}, -- 6.6 prefectural, 1.6 urban; 1.486 urban (2.625 adm-urb) per citypopulation.de
["Taizhou"] = {alias_of = "Taizhou, Zhejiang"},
["Yantai"] = {container = "Shandong"}, -- 7.1 prefectural, 2.5 urban; 2.312 urban (2.550 adm-urb) per citypopulation.de
["Yinchuan"] = {container = {key = "Ningxia, China", placetype = "autonomous region"}}, -- 1.663 urban (2.525 adm-urb) per citypopulation.de
["Liuzhou"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 4.157 prefectural, 2.2 urban; 2.205 urban (2.500 adm-urb) per citypopulation.de
["Anshan"] = {container = "Liaoning"}, -- 1.480 urban (2.350 adm-urb including Liáoyáng) per citypopulation.de
["Yangzhou"] = {container = "Jiangsu"}, -- 2.067 urban (2.300 adm-urb) per citypopulation.de
["Jiaxing"] = {container = "Zhejiang"}, -- 1.188 urban (2.275 adm-urb) per citypopulation.de
["Xining"] = {container = "Qinghai"}, -- 1.677 urban (2.250 adm-urb) per citypopulation.de
-- includes Dìngzhōu city and Xióngān Xīnqū
["Baoding"] = {container = "Hebei"}, -- 11.5 prefectural, 2.0 urban; 1.940 urban (2.225 adm-urb) per citypopulation.de
["Baotou"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 2.709 prefectural, 2.2 urban; 2.104 urban (2.200 adm-urb) per citypopulation.de
["Ganzhou"] = {container = "Jiangxi"}, -- 9.0 prefectural, 1.6 urban; 1.778 urban (2.150 adm-urb) per citypopulation.de
["Pingdingshan"] = {container = "Henan"}, -- 1.046 urban (2.100 adm-urb) per citypopulation.de
["Zunyi"] = {container = "Guizhou"}, -- 6.6 prefectural, 2.4 urban/metro; 1.675 urban (2.025 adm-urb) per citypopulation.de
["Bengbu"] = {container = "Anhui"}, -- 1.078 urban (2.000 adm-urb) per citypopulation.de
["Datong"] = {container = "Shanxi"}, -- 3.105 prefectural, 2.0 urban; 1.810 urban (2.000 adm-urb) per citypopulation.de
["Anyang"] = {container = "Henan"}, -- 1.188 urban (1.960 adm-urb) per citypopulation.de
["Huai'an"] = {container = "Jiangsu"}, -- 4.556 prefectural, 2.6 urban; 1.805 urban (1.940 adm-urb) per citypopulation.de
["Zaozhuang"] = {container = "Shandong"}, -- 1.350 urban (1.900 adm-urb) per citypopulation.de
["Zhanjiang"] = {container = "Guangdong"}, -- 7.0 prefectural, 1.9 urban; 1.401 urban (1.890 adm-urb) per citypopulation.de
["Huainan"] = {container = "Anhui"}, -- 1.256 urban (1.880 adm-urb) per citypopulation.de
["Jining"] = {container = "Shandong"}, -- 8.4 prefectural, 1.5 urban; 1.700 urban (1.880 adm-urb) per citypopulation.de
["Daqing"] = {container = "Heilongjiang"}, -- 1.604 urban (1.860 adm-urb) per citypopulation.de
["Wuhu"] = {container = "Anhui"}, -- 1.598 urban (1.850 adm-urb) per citypopulation.de
["Guilin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 1.361 urban (1.830 adm-urb) per citypopulation.de
["Mianyang"] = {container = "Sichuan"}, -- 1.549 urban (1.800 adm-urb) per citypopulation.de
["Xiangyang"] = {container = "Hubei"}, -- 1.686 urban (1.800 adm-urb) per citypopulation.de
["Huzhou"] = {container = "Zhejiang"}, -- 1.084 urban (1.750 adm-urb) per citypopulation.de
["Puyang"] = {container = "Henan"}, -- 0.824 urban (1.750 adm-urb) per citypopulation.de
["Shangqiu"] = {container = "Henan"}, -- 7.8 prefectural, 1.9 urban (2.8 metro); 1.031 urban (1.750 adm-urb) per citypopulation.de
["Qinhuangdao"] = {container = "Hebei"}, -- 1.520 urban (1.740 adm-urb) per citypopulation.de
["Xingtai"] = {container = "Hebei"}, -- 7.1 prefectural, 971,000 urban; 1.5 urban (1.700 adm-urb) per citypopulation.de
["Nanyang"] = {container = "Henan", wp = "%l, %c"}, -- 9.7 prefectural, 2.1 urban/metro; 1.481 urban (1.680 adm-urb) per citypopulation.de
["Jiaozuo"] = {container = "Henan"}, -- 0.875 urban (1.640 adm-urb) per citypopulation.de
["Jilin City"] = {container = "Jilin"}, -- 1.509 urban (1.610 adm-urb) per citypopulation.de
["Jilin"] = {alias_of = "Jilin City"},
["Jinhua"] = {container = "Zhejiang"}, -- 7.1 prefectural, 1.5 urban; 1.041 urban (1.590 adm-urb) per citypopulation.de
["Shangrao"] = {container = "Jiangxi"}, -- 6.5 prefectural, 2.1 urban, 1.3 metro [sic]; 1.342 urban (1.580 adm-urb) per citypopulation.de
["Heze"] = {container = "Shandong"}, -- 8.8 prefectural, 1.3 urban; 1.294 urban (1.570 adm-urb) per citypopulation.de
["Yulin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}, wp = "%l, %c"}, -- 0.878 urban (1.570 adm-urb) per citypopulation.de
["Tai'an"] = {container = "Shandong"}, -- 1.417 urban (1.560 adm-urb) per citypopulation.de
["Weihai"] = {container = "Shandong"}, -- 1.340 urban (1.510 adm-urb) per citypopulation.de
-- Taizhou, Jiangsu would be here (1.490 adm-urb) but moved to china_prefecture_level_cities_2 to avoid clash
["Yancheng"] = {container = "Jiangsu"}, -- 6.7 prefectural, 1.6 urban; 1.353 urban (1.460 adm-urb) per citypopulation.de
["Zhangjiakou"] = {container = "Hebei"}, -- 1.339 urban (1.450 adm-urb) per citypopulation.de
["Maoming"] = {container = "Guangdong"}, -- 6.2 prefectural, 2.5 urban; 1.308 urban (1.440 adm-urb) per citypopulation.de
["Nanchong"] = {container = "Sichuan"}, -- 1.254 urban (1.440 adm-urb) per citypopulation.de
["Fuyang"] = {container = "Anhui", wp = "%l, %c"}, -- 8.2 prefectural, 2.1 urban; 1.191 urban (1.410 adm-urb) per citypopulation.de
["Xuchang"] = {container = "Henan"}, -- 0.850 urban (1.390 adm-urb) per citypopulation.de
["Yichang"] = {container = "Hubei"}, -- 1.284 urban (1.390 adm-urb) per citypopulation.de
["Dazhou"] = {container = "Sichuan"}, -- 1.136 urban (1.380 adm-urb) per citypopulation.de
["Kaifeng"] = {container = "Henan"}, -- 1.194 urban (1.340 adm-urb) per citypopulation.de
["Luzhou"] = {container = "Sichuan"}, -- 1.128 urban (1.340 adm-urb) per citypopulation.de
["Qingyuan"] = {container = "Guangdong"}, -- 1.198 urban (1.340 adm-urb) per citypopulation.de
["Huaibei"] = {container = "Anhui"}, -- 0.831 urban (1.330 adm-urb) per citypopulation.de
["Yibin"] = {container = "Sichuan"}, -- 1.101 urban (1.310 adm-urb) per citypopulation.de
["Lu'an"] = {container = "Anhui"}, -- 1.070 urban (1.300 adm-urb) per citypopulation.de
["Dezhou"] = {container = "Shandong"}, -- 0.843 urban (1.290 adm-urb) per citypopulation.de
["Rizhao"] = {container = "Shandong"}, -- 1.147 urban (1.270 adm-urb) per citypopulation.de
["Changzhi"] = {container = "Shanxi"}, -- 1.047 urban (1.250 adm-urb) per citypopulation.de
["Hengyang"] = {container = "Hunan"}, -- 6.6 prefectural, 1.5 urban; 1.185 urban (1.250 adm-urb) per citypopulation.de
["Jinzhou"] = {container = "Liaoning"}, -- 1.021 urban (1.240 adm-urb) per citypopulation.de
["Liaocheng"] = {container = "Shandong"}, -- 1.020 urban (1.240 adm-urb) per citypopulation.de
["Changde"] = {container = "Hunan"}, -- 1.101 urban (1.230 adm-urb) per citypopulation.de
["Suqian"] = {container = "Jiangsu"}, -- 1.082 urban (1.230 adm-urb) per citypopulation.de
["Xinyang"] = {container = "Henan"}, -- 6.2 prefectural, 1.4 urban/metro; 1.015 urban (1.230 adm-urb) per citypopulation.de
["Baoji"] = {container = "Shaanxi"}, -- 1.108 urban (1.220 adm-urb) per citypopulation.de
["Yueyang"] = {container = "Hunan"}, -- 1.125 urban (1.220 adm-urb) per citypopulation.de
["Zhenjiang"] = {container = "Jiangsu"}, -- 1.124 urban (1.210 adm-urb) per citypopulation.de
-- Wanzhou is a "district" of the "direct-administered municipality" of Chongqing but in fact is 142 miles away from Chongqing city proper.
["Wanzhou"] = {placetype = "district", container = {key = "Chongqing", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "%l, %c"}, -- 1.078 urban (1.190 adm-urb) per citypopulation.de
["Ulanhad"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 1.093 urban (1.180 adm-urb) per citypopulation.de
["Chifeng"] = {alias_of = "Ulanhad"},
["Ulankhad"] = {alias_of = "Ulanhad", display = true},
["Ezhou"] = {container = "Hubei"}, -- < 0.750 urban (1.180 adm-urb) per citypopulation.de
["Zhaoqing"] = {container = "Guangdong"}, -- 1.036 urban (1.160 adm-urb) per citypopulation.de
["Lianyungang"] = {container = "Jiangsu"}, -- 4.599 prefectural, 2.0 urban; 1.071 urban (1.150 adm-urb) per citypopulation.de
["Qujing"] = {container = "Yunnan"}, -- 0.976 urban (1.150 adm-urb) per citypopulation.de
-- Shuyang is a "county" of the "prefecture-level city" of Suqian but in fact is 38 miles away from Suqian city proper (urban core to urban core).
-- The county itself is 37 miles by 34 miles.
["Shuyang"] = {placetype = "county", container = {key = "Suqian", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l County"}, -- 0.986 urban (1.120 adm-urb) per citypopulation.de
-- Yongkang is a "county-level city" of the "prefecture-level city" of Jinhua but in fact is 32 miles away from Jinhua city proper (urban core to urban core).
["Yongkang"] = {placetype = "county-level city", container = {key = "Jinhua", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l, Zhejiang"}, -- < 0.750 urban (1.110 adm-urb) per citypopulation.de
["Zhoukou"] = {container = "Henan"}, -- 9.0 prefectural, 721,000 urban (1.6 metro); < 0.750 urban (1.100 adm-urb) per citypopulation.de
["Beihai"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- < 1 urban (1.090 adm-urb) per citypopulation.de
["Jiujiang"] = {container = "Jiangxi"}, -- < 0.750 urban (1.080 adm-urb) per citypopulation.de
["Shaoyang"] = {container = "Hunan"}, -- 6.6 prefectural, 802,000 urban, 1.4 metro; < 1 urban (1.080 adm-urb) per citypopulation.de
["Chuzhou"] = {container = "Anhui"}, -- < 0.750 urban (1.070 adm-urb) per citypopulation.de
["Hengshui"] = {container = "Hebei"}, -- 0.885 urban (1.070 adm-urb) per citypopulation.de
["Shiyan"] = {container = "Hubei"}, -- 0.955 urban (1.070 adm-urb) per citypopulation.de
["Huludao"] = {container = "Liaoning"}, -- 0.764 urban (1.060 adm-urb) per citypopulation.de
["Dongying"] = {container = "Shandong"}, -- 0.961 urban (1.050 adm-urb) per citypopulation.de
["Guigang"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 0.921 urban (1.050 adm-urb) per citypopulation.de
-- Liuyang is a "county-level city" of the "prefecture-level city" of Changsha but in fact is 47 miles away from Changsha city proper (urban core to urban core).
["Liuyang"] = {placetype = "county-level city", container = {key = "Changsha", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.886 urban (1.040 adm-urb) per citypopulation.de
-- NOTE: Not to be confused with Changzhou in Jiangsu
["Cangzhou"] = {container = "Hebei"}, -- 7.3 prefectural, 621,000 urban; 0.759 urban (1.030 adm-urb) per citypopulation.de
["Liupanshui"] = {container = "Guizhou"}, -- < 0.750 urban (1.030 adm-urb) per citypopulation.de
["Panjin"] = {container = "Liaoning"}, -- 0.980 urban (1.030 adm-urb) per citypopulation.de
["Qiqihar"] = {container = "Heilongjiang"}, -- 1.030 urban (1.030 adm-urb) per citypopulation.de
["Linfen"] = {container = "Shanxi"}, -- < 0.750 urban (1.010 adm-urb) per citypopulation.de
-- Tengzhou is a "county-level city" of the "prefecture-level city" of Zaozhuang but in fact is 30 miles away from Zaozhuang city proper (urban core to urban core).
["Tengzhou"] = {placetype = "county-level city", container = {key = "Zaozhuang", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.937 urban (1.010 adm-urb) per citypopulation.de
-- 3 extra that got added in earlier incarnations and aren't found in the "major agglomerations of the world" page https://citypopulation.de/en/world/agglomerations/ reference date 2025-01-01
["Kunshan"] = {container = "Jiangsu"}, -- 1.652 urban (2020 China census) per citypopulation.de
["Zhumadian"] = {container = "Henan"}, -- 7.0 prefectural, 722,000 urban per Wikipedia; 0.754 urban per citypopulation.de
["Bijie"] = {container = "Guizhou"}, -- 6.9 prefectural, ? urban, ? metro (not listed in Wikipedia); < 0.750 urban per citypopulation.de
}
export.china_prefecture_level_cities_group = {
-- don't do any transformations between key and placename; in particular, don't chop off anything from
-- "Taizhou, Zhejiang" or "Suzhou, Anhui".
key_to_placename = false,
placename_to_key = false, -- don't add ", China" to make the key
default_container = "Trung Quốc",
canonicalize_key_container = make_canonicalize_key_container(", China", "province"),
-- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people
-- don't understand how Chinese administrative divisions work.
default_placetype = {"prefecture-level city", "thành phố"},
default_divs = {
-- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities,
-- and prefecture-level cities (as well as county-level cities) are considered non-cities.
"districts", "subdistricts", "townships",
{type = "counties", cat_as = "counties and county-level cities"},
{type = "county-level cities", cat_as = "counties and county-level cities"},
},
data = export.china_prefecture_level_cities,
}
-- Needed to avoid problems with two cities called Taizhou and Suzhou.
export.china_prefecture_level_cities_2 = {
-- NOTE: There is also a larger and better-known prefecture-level city Taizhou in Zhejiang.
["Taizhou, Jiangsu"] = {container = "Jiangsu"}, -- 1.3 urban (1.490 adm-urb) per citypopulation.de 2020 census
["Taizhou"] = {alias_of = "Taizhou, Jiangsu"},
-- NOTE: There is also a larger and better-known prefecture-level city Suzhou in Jiangsu.
["Suzhou, Anhui"] = {container = "Anhui"}, -- 5.3 prefectural, 1.766 metro and "urban"; < 1 urban (1.010 adm-urb) per citypopulation.de 2020 census
-- hopefully this will work because we also have Suzhou as a key by itself for the larger, more-well-known Suzhou in Jiangsu
["Suzhou"] = {alias_of = "Suzhou, Anhui"},
}
export.china_prefecture_level_cities_group_2 = {
-- don't do any transformations between key and placename; in particular, don't chop off anything from
-- "Taizhou, Jiangsu".
placename_to_key = false, -- don't add ", China" to make the key
default_container = "Trung Quốc",
canonicalize_key_container = make_canonicalize_key_container(", China", "province"),
-- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people
-- don't understand how Chinese administrative divisions work.
default_placetype = {"prefecture-level city", "thành phố"},
default_divs = {
-- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities,
-- and prefecture-level cities (as well as county-level cities) are considered non-cities.
"districts", "subdistricts", "townships",
{type = "counties", cat_as = "counties and county-level cities"},
{type = "county-level cities", cat_as = "counties and county-level cities"},
},
data = export.china_prefecture_level_cities_2,
}
export.finland_regions = {
["Lapland, Finland"] = {wp = "%l (%c)"},
["North Ostrobothnia, Finland"] = {},
["Northern Ostrobothnia, Finland"] = {alias_of = "North Ostrobothnia, Finland", display = true},
["Kainuu, Finland"] = {},
["North Karelia, Finland"] = {},
["Northern Savonia, Finland"] = {},
["North Savo, Finland"] = {alias_of = "Northern Savonia, Finland", display = true},
["Southern Savonia, Finland"] = {},
["South Savo, Finland"] = {alias_of = "Southern Savonia, Finland", display = true},
["South Karelia, Finland"] = {},
["Central Finland, Finland"] = {},
["South Ostrobothnia, Finland"] = {},
["Southern Ostrobothnia, Finland"] = {alias_of = "South Ostrobothnia, Finland", display = true},
["Ostrobothnia, Finland"] = {wp = "%l (region)"},
["Central Ostrobothnia, Finland"] = {},
["Pirkanmaa, Finland"] = {},
["Satakunta, Finland"] = {},
["Päijänne Tavastia, Finland"] = {},
["Päijät-Häme, Finland"] = {alias_of = "Päijänne Tavastia, Finland", display = true},
["Tavastia Proper, Finland"] = {},
["Kanta-Häme, Finland"] = {alias_of = "Tavastia Proper, Finland", display = true},
["Kymenlaakso, Finland"] = {},
["Uusimaa, Finland"] = {},
["Southwest Finland, Finland"] = {},
["Åland Islands, Finland"] = {the = true, wp = "Åland"},
["Åland, Finland"] = {alias_of = "Åland Islands, Finland"}, -- differs in "the"
}
-- regions of Finland
export.finland_group = {
default_container = "Phần Lan",
default_placetype = "region",
default_divs = "municipalities",
data = export.finland_regions,
}
export.france_administrative_regions = {
["Auvergne-Rhône-Alpes, France"] = {},
["Bourgogne-Franche-Comté, France"] = {},
["Brittany, France"] = {wp = "%l (administrative region)"},
["Centre-Val de Loire, France"] = {},
["Corsica, France"] = {},
-- overseas departments are handled in `export.country_like_entities`
-- ["French Guiana"] = {},
["Grand Est, France"] = {},
-- ["Guadeloupe"] = {},
["Hauts-de-France, France"] = {},
["Île-de-France, France"] = {},
-- ["Martinique"] = {},
-- ["Mayotte"] = {},
["Normandy, France"] = {wp = "%l (administrative region)"},
["Nouvelle-Aquitaine, France"] = {},
["Occitania, France"] = {wp = "%l (administrative region)"},
["Occitanie, France"] = {alias_of = "Occitania, France", display = true},
["Pays de la Loire, France"] = {},
["Provence-Alpes-Côte d'Azur, France"] = {},
-- ["Réunion"] = {},
}
-- administrative regions of France
export.france_group = {
default_container = "Pháp",
-- Canonically these are 'administrative regions' but also treat as 'region' ('administrative region' falls back
-- to 'region').
default_placetype = "region",
default_divs = {
"communes",
{type = "municipalities", cat_as = "communes"},
"departments",
{type = "prefectures", cat_as = {"prefectures", "departmental capitals"}},
{type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}},
},
data = export.france_administrative_regions,
}
export.france_departments = {
["Ain, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 01
["Aisne, France"] = {container = "Hauts-de-France"}, -- 02
["Allier, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 03
["Alpes-de-Haute-Provence, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 04
["Hautes-Alpes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 05
["Alpes-Maritimes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 06
["Ardèche, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 07
["Ardennes, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 08
["Ariège, France"] = {container = "Occitania", wp = "%l (department)"}, -- 09
["Aube, France"] = {container = "Grand Est"}, -- 10
["Aude, France"] = {container = "Occitania"}, -- 11
["Aveyron, France"] = {container = "Occitania"}, -- 12
["Bouches-du-Rhône, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 13
["Calvados, France"] = {container = "Normandy", wp = "%l (department)"}, -- 14
["Cantal, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 15
["Charente, France"] = {container = "Nouvelle-Aquitaine"}, -- 16
["Charente-Maritime, France"] = {container = "Nouvelle-Aquitaine"}, -- 17
["Cher, France"] = {container = "Centre-Val de Loire", wp = "%l (department)"}, -- 18
["Corrèze, France"] = {container = "Nouvelle-Aquitaine"}, -- 19
["Corse-du-Sud, France"] = {container = "Corsica"}, -- 2A
["Haute-Corse, France"] = {container = "Corsica"}, -- 2B
["Côte-d'Or, France"] = {container = "Bourgogne-Franche-Comté"}, -- 21
["Côte d'Or, France"] = {alias_of = "Côte-d'Or, France", display = true},
["Côtes-d'Armor, France"] = {container = "Brittany"}, -- 22
["Côtes d'Armor, France"] = {alias_of = "Côtes-d'Armor, France", display = true},
["Creuse, France"] = {container = "Nouvelle-Aquitaine"}, -- 23
["Dordogne, France"] = {container = "Nouvelle-Aquitaine"}, -- 24
["Doubs, France"] = {container = "Bourgogne-Franche-Comté"}, -- 25
["Drôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 26
["Eure, France"] = {container = "Normandy"}, -- 27
["Eure-et-Loir, France"] = {container = "Centre-Val de Loire"}, -- 28
["Finistère, France"] = {container = "Brittany"}, -- 29
["Gard, France"] = {container = "Occitania"}, -- 30
["Haute-Garonne, France"] = {container = "Occitania"}, -- 31
["Gers, France"] = {container = "Occitania"}, -- 32
["Gironde, France"] = {container = "Nouvelle-Aquitaine"}, -- 33
["Hérault, France"] = {container = "Occitania"}, -- 34
["Ille-et-Vilaine, France"] = {container = "Brittany"}, -- 35
["Indre, France"] = {container = "Centre-Val de Loire"}, -- 36
["Indre-et-Loire, France"] = {container = "Centre-Val de Loire"}, -- 37
["Isère, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 38
["Jura, France"] = {container = "Bourgogne-Franche-Comté", wp = "%l (department)"}, -- 39
["Landes, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 40
["Loir-et-Cher, France"] = {container = "Centre-Val de Loire"}, -- 41
["Loire, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 42
["Haute-Loire, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 43
["Loire-Atlantique, France"] = {container = "Pays de la Loire"}, -- 44
["Loiret, France"] = {container = "Centre-Val de Loire"}, -- 45
["Lot, France"] = {container = "Occitania", wp = "%l (department)"}, -- 46
["Lot-et-Garonne, France"] = {container = "Nouvelle-Aquitaine"}, -- 47
["Lozère, France"] = {container = "Occitania"}, -- 48
["Maine-et-Loire, France"] = {container = "Pays de la Loire"}, -- 49
["Manche, France"] = {container = "Normandy"}, -- 50
["Marne, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 51
["Haute-Marne, France"] = {container = "Grand Est"}, -- 52
["Mayenne, France"] = {container = "Pays de la Loire"}, -- 53
["Meurthe-et-Moselle, France"] = {container = "Grand Est"}, -- 54
["Meuse, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 55
["Morbihan, France"] = {container = "Brittany"}, -- 56
["Moselle, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 57
["Nièvre, France"] = {container = "Bourgogne-Franche-Comté"}, -- 58
["Nord, France"] = {container = "Hauts-de-France", wp = "%l (French department)"}, -- 59
["Oise, France"] = {container = "Hauts-de-France"}, -- 60
["Orne, France"] = {container = "Normandy"}, -- 61
["Pas-de-Calais, France"] = {container = "Hauts-de-France"}, -- 62
["Puy-de-Dôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 63
["Pyrénées-Atlantiques, France"] = {container = "Nouvelle-Aquitaine"}, -- 64
["Hautes-Pyrénées, France"] = {container = "Occitania"}, -- 65
["Pyrénées-Orientales, France"] = {container = "Occitania"}, -- 66
["Bas-Rhin, France"] = {container = "Grand Est"}, -- 67
["Haut-Rhin, France"] = {container = "Grand Est"}, -- 68
["Rhône, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 69D
["Metropolis of Lyon, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 69M
["Lyon Metropolis, France"] = {alias_of = "Metropolis of Lyon, France"},
["Lyon, France"] = {alias_of = "Metropolis of Lyon, France"},
["Haute-Saône, France"] = {container = "Bourgogne-Franche-Comté"}, -- 70
["Saône-et-Loire, France"] = {container = "Bourgogne-Franche-Comté"}, -- 71
["Sarthe, France"] = {container = "Pays de la Loire"}, -- 72
["Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 73
["Haute-Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 74
["Paris, France"] = {container = "Île-de-France"}, -- 75
["Seine-Maritime, France"] = {container = "Normandy"}, -- 76
["Seine-et-Marne, France"] = {container = "Île-de-France"}, -- 77
["Yvelines, France"] = {container = "Île-de-France"}, -- 78
["Deux-Sèvres, France"] = {container = "Nouvelle-Aquitaine"}, -- 79
["Somme, France"] = {container = "Hauts-de-France", wp = "%l (department)"}, -- 80
["Tarn, France"] = {container = "Occitania", wp = "%l (department)"}, -- 81
["Tarn-et-Garonne, France"] = {container = "Occitania"}, -- 82
["Var, France"] = {container = "Provence-Alpes-Côte d'Azur", wp = "%l (department)"}, -- 83
["Vaucluse, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 84
["Vendée, France"] = {container = "Pays de la Loire"}, -- 85
["Vienne, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 86
["Haute-Vienne, France"] = {container = "Nouvelle-Aquitaine"}, -- 87
["Vosges, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 88
["Yonne, France"] = {container = "Bourgogne-Franche-Comté"}, -- 89
["Territoire de Belfort, France"] = {container = "Bourgogne-Franche-Comté"}, -- 90
["Essonne, France"] = {container = "Île-de-France"}, -- 91
["Hauts-de-Seine, France"] = {container = "Île-de-France"}, -- 92
["Seine-Saint-Denis, France"] = {container = "Île-de-France"}, -- 93
["Val-de-Marne, France"] = {container = "Île-de-France"}, -- 94
["Val-d'Oise, France"] = {container = "Île-de-France"}, -- 95
--["Guadeloupe"] = {container = "Guadeloupe"}, -- 971
--["Martinique"] = {container = "Martinique"}, -- 972
--["Guyane"] = {container = "French Guiana", wp = "French Guiana"}, -- 973
--["La Réunion"] = {container = "Réunion", wp = "Réunion"}, -- 974
--["Mayotte"] = {container = "Mayotte"}, -- 976
}
export.france_departments_group = {
placename_to_key = make_placename_to_key(", France"),
canonicalize_key_container = make_canonicalize_key_container(", France", "region"),
default_placetype = "department",
default_divs = {
"communes",
{type = "municipalities", cat_as = "communes"},
},
data = export.france_departments,
}
export.germany_states = {
["Baden-Württemberg, Germany"] = {},
["Bavaria, Germany"] = {},
-- Berlin, Bremen and Hamburg are effectively city-states and don't have districts ([[Kreise]]), so override
-- the default_divs setting. Better not to include them at all since they're included as cities down below.
-- ["Berlin"] = {divs = {}},
["Brandenburg, Germany"] = {},
-- ["Bremen"] = {divs = {}},
-- ["Hamburg"] = {divs = {}},
["Hesse, Germany"] = {},
["Lower Saxony, Germany"] = {},
["Mecklenburg-Vorpommern, Germany"] = {},
["Mecklenburg-Western Pomerania, Germany"] = {alias_of = "Mecklenburg-Vorpommern, Germany", display = true},
["North Rhine-Westphalia, Germany"] = {},
["Rhineland-Palatinate, Germany"] = {},
["Saarland, Germany"] = {},
["Saxony, Germany"] = {},
["Saxony-Anhalt, Germany"] = {},
["Schleswig-Holstein, Germany"] = {},
["Thuringia, Germany"] = {},
}
-- states of Germany
export.germany_group = {
default_container = "Đức",
default_placetype = "state",
default_divs = {"districts", "municipalities"},
data = export.germany_states,
}
export.greece_regions = {
["Attica, Greece"] = {wp = "%l (region)"},
["Central Greece, Greece"] = {wp = "%l (administrative region)"},
["Central Macedonia, Greece"] = {},
["Crete, Greece"] = {},
["Eastern Macedonia and Thrace, Greece"] = {},
["Epirus, Greece"] = {wp = "%l (region)"},
["Ionian Islands, Greece"] = {the = true, wp = "%l (region)"},
["North Aegean, Greece"] = {the = true},
-- I would expect 'the Peloponnese' but Wikipedia mostly has categories like [[w:Category:Geography of Peloponnese (region)]]
-- and [[w:Category:Buildings and structures in Peloponnese (region)]]; only [[w:Category:People from the Peloponnese (region)]]
-- has "the" in it.
["Peloponnese, Greece"] = {wp = "%l (region)"},
["South Aegean, Greece"] = {the = true},
["Thessaly, Greece"] = {},
["Western Greece, Greece"] = {},
["Western Macedonia, Greece"] = {},
["Mount Athos, Greece"] = {placetype = {"autonomous region", "region"}, wp = "Monastic community of Mount Athos"},
}
-- regions of Greece
export.greece_group = {
default_container = "Hy Lạp",
default_placetype = "region",
data = export.greece_regions,
}
local india_polity_with_divisions = {"divisions", "districts"}
local india_polity_without_divisions = {"districts"}
-- States and union territories of India. Only some of them are divided into divisions.
export.india_states_and_union_territories = {
["Andaman and Nicobar Islands, India"] =
{the = true, placetype = "union territory", divs = india_polity_without_divisions},
["Andhra Pradesh, India"] = {divs = india_polity_without_divisions},
["Arunachal Pradesh, India"] = {divs = india_polity_with_divisions},
["Assam, India"] = {divs = india_polity_with_divisions},
["Bihar, India"] = {divs = india_polity_with_divisions},
["Chandigarh, India"] = {placetype = "union territory", divs = india_polity_without_divisions},
["Chhattisgarh, India"] = {divs = india_polity_with_divisions},
["Dadra and Nagar Haveli and Daman and Diu, India"] = {placetype = "union territory", divs = india_polity_without_divisions},
["Delhi, India"] = {placetype = "union territory", divs = india_polity_with_divisions},
["Goa, India"] = {divs = india_polity_without_divisions},
["Gujarat, India"] = {divs = india_polity_without_divisions},
["Haryana, India"] = {divs = india_polity_with_divisions},
["Himachal Pradesh, India"] = {divs = india_polity_with_divisions},
["Jammu and Kashmir, India"] = {placetype = "union territory", divs = india_polity_with_divisions,
wp = "%l (union territory)"},
["Jharkhand, India"] = {divs = india_polity_with_divisions},
["Karnataka, India"] = {divs = india_polity_with_divisions},
["Kerala, India"] = {divs = india_polity_without_divisions},
["Ladakh, India"] = {placetype = "union territory", divs = india_polity_with_divisions},
["Lakshadweep, India"] = {placetype = "union territory", divs = india_polity_without_divisions},
["Madhya Pradesh, India"] = {divs = india_polity_with_divisions},
["Maharashtra, India"] = {divs = india_polity_with_divisions},
["Manipur, India"] = {divs = india_polity_without_divisions},
["Meghalaya, India"] = {divs = india_polity_with_divisions},
["Mizoram, India"] = {divs = india_polity_without_divisions},
["Nagaland, India"] = {divs = india_polity_with_divisions},
["Odisha, India"] = {divs = india_polity_with_divisions},
["Puducherry, India"] = {placetype = "union territory", divs = india_polity_without_divisions,
wp = "%l (union territory)"},
["Pondicherry, India"] = {alias_of = "Puducherry, India", display = true},
["Punjab, India"] = {divs = india_polity_with_divisions, wp = "%l, %c"},
["Rajasthan, India"] = {divs = india_polity_with_divisions},
["Sikkim, India"] = {divs = india_polity_without_divisions},
["Tamil Nadu, India"] = {divs = india_polity_without_divisions},
["Telangana, India"] = {divs = india_polity_without_divisions},
["Tripura, India"] = {divs = india_polity_without_divisions},
["Uttar Pradesh, India"] = {divs = india_polity_with_divisions},
["Uttarakhand, India"] = {divs = india_polity_with_divisions},
["West Bengal, India"] = {divs = india_polity_with_divisions},
}
-- states and union territories of India
export.india_group = {
default_container = "Ấn Độ",
default_placetype = "state",
data = export.india_states_and_union_territories,
}
export.indonesia_provinces = {
["Aceh, Indonesia"] = {},
["Bali, Indonesia"] = {},
["Bangka Belitung Islands, Indonesia"] = {the = true},
["Banten, Indonesia"] = {},
["Bengkulu, Indonesia"] = {},
["Central Java, Indonesia"] = {},
["Central Kalimantan, Indonesia"] = {},
["Central Papua, Indonesia"] = {},
["Central Sulawesi, Indonesia"] = {},
["East Java, Indonesia"] = {},
["East Kalimantan, Indonesia"] = {},
["East Nusa Tenggara, Indonesia"] = {},
["Gorontalo, Indonesia"] = {},
["Highland Papua, Indonesia"] = {wp = "%l"},
["Special Capital Region of Jakarta, Indonesia"] = {the = true, wp = "Jakarta"},
["Jakarta, Indonesia"] = {alias_of = "Special Capital Region of Jakarta, Indonesia"},
["Jambi, Indonesia"] = {},
["Lampung, Indonesia"] = {},
["Maluku, Indonesia"] = {},
["North Kalimantan, Indonesia"] = {},
["North Maluku, Indonesia"] = {},
["North Sulawesi, Indonesia"] = {},
["North Papua, Indonesia"] = {},
["North Sumatra, Indonesia"] = {},
["Papua, Indonesia"] = {wp = "%l (province)"},
["Riau, Indonesia"] = {},
["Riau Islands, Indonesia"] = {the = true},
["Southeast Sulawesi, Indonesia"] = {},
["South Kalimantan, Indonesia"] = {},
["South Papua, Indonesia"] = {},
["South Sulawesi, Indonesia"] = {},
["South Sumatra, Indonesia"] = {},
["Southwest Papua, Indonesia"] = {},
["West Java, Indonesia"] = {},
["West Kalimantan, Indonesia"] = {},
["West Nusa Tenggara, Indonesia"] = {},
["West Papua, Indonesia"] = {wp = "%l (province)"},
["West Sulawesi, Indonesia"] = {},
["West Sumatra, Indonesia"] = {},
["Special Region of Yogyakarta, Indonesia"] = {the = true},
["Yogyakarta, Indonesia"] = {alias_of = "Special Region of Yogyakarta, Indonesia"},
}
-- provinces of Indonesia
export.indonesia_group = {
default_container = "Indonesia",
default_placetype = "province",
-- per https://www.quora.com/Does-Indonesia-use-British-or-American-English, Indonesia tends to use American
-- spellings.
data = export.indonesia_provinces,
}
export.iran_provinces = {
["Alborz Province, Iran"] = {}, -- abbreviation AL, capital [[w:Karaj]]
["Ardabil Province, Iran"] = {}, -- abbreviation AR, capital [[w:Ardabil]]
["Bushehr Province, Iran"] = {}, -- abbreviation BU, capital [[w:Bushehr]]
["Chaharmahal and Bakhtiari Province, Iran"] = {}, -- abbreviation CB, capital [[w:Shahr-e Kord]]
["East Azerbaijan Province, Iran"] = {}, -- abbreviation EA, capital [[w:Tabriz]]
["Fars Province, Iran"] = {}, -- abbreviation FA, capital [[w:Shiraz]]
["Pars Province, Iran"] = {alias_of = "Fars Province, Iran", display = true},
["Gilan Province, Iran"] = {}, -- abbreviation GN, capital [[w:Rasht]]
["Golestan Province, Iran"] = {}, -- abbreviation GO, capital [[w:Gorgan]]
["Hamadan Province, Iran"] = {}, -- abbreviation HA, capital [[w:Hamadan]]
["Hormozgan Province, Iran"] = {}, -- abbreviation HO, capital [[w:Bandar Abbas]]
["Ilam Province, Iran"] = {}, -- abbreviation IL, capital [[w:Ilam, Iran|Ilam]]
["Isfahan Province, Iran"] = {}, -- abbreviation IS, capital [[w:Isfahan]]
["Kerman Province, Iran"] = {}, -- abbreviation KN, capital [[w:Kerman]]
["Kermanshah Province, Iran"] = {}, -- abbreviation KE, capital [[w:Kermanshah]]
["Khuzestan Province, Iran"] = {}, -- abbreviation KH, capital [[w:Ahvaz]]
["Kohgiluyeh and Boyer-Ahmad Province, Iran"] = {}, -- abbreviation KB, capital [[w:Yasuj]]
["Kurdistan Province, Iran"] = {}, -- abbreviation KU, capital [[w:Sanandaj]]
["Lorestan Province, Iran"] = {}, -- abbreviation LO, capital [[w:Khorramabad]]
["Markazi Province, Iran"] = {}, -- abbreviation MA, capital [[w:Arak, Iran|Arak]]
["Mazandaran Province, Iran"] = {}, -- abbreviation MN, capital [[w:Sari, Iran|Sari]]
["North Khorasan Province, Iran"] = {}, -- abbreviation NK, capital [[w:Bojnord]]
["Qazvin Province, Iran"] = {}, -- abbreviation QA, capital [[w:Qazvin]]
["Qom Province, Iran"] = {}, -- abbreviation QM, capital [[w:Qom]]
["Razavi Khorasan Province, Iran"] = {}, -- abbreviation RK, capital [[w:Mashhad]]
["Semnan Province, Iran"] = {}, -- abbreviation SE, capital [[w:Semnan, Iran|Semnan]]
["Sistan and Baluchestan Province, Iran"] = {}, -- abbreviation SB, capital [[w:Zahedan]]
["South Khorasan Province, Iran"] = {}, -- abbreviation SK, capital [[w:Birjand]]
["Tehran Province, Iran"] = {}, -- abbreviation TE, capital [[w:Tehran]]
["West Azerbaijan Province, Iran"] = {}, -- abbreviation WA, capital [[w:Urmia]]
["Yazd Province, Iran"] = {}, -- abbreviation YA, capital [[w:Yazd]]
["Zanjan Province, Iran"] = {}, -- abbreviation ZA, capital [[w:Zanjan, Iran|Zanjan]]
}
-- provinces of Iran
export.iran_group = {
key_to_placename = make_key_to_placename(", Iran", " Province$"),
placename_to_key = make_placename_to_key(", Iran", " Province"),
default_container = "Iran",
default_placetype = "province",
-- There aren't nearly enough counties of Iran currently entered in any language to allow for categorizing them
-- per-province. (As of 2025-05-09, there are only 6 counties in each of [[Category:en:Counties of Iran]],
-- [[Category:fa:Counties of Iran]] and [[Category:ar:Counties of Iran]].)
-- default_divs = "counties",
-- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province'
default_wp = "%e province",
data = export.iran_provinces,
}
export.ireland_counties = {
["County Carlow, Ireland"] = {},
["County Cavan, Ireland"] = {},
["County Clare, Ireland"] = {},
["County Cork, Ireland"] = {},
["County Donegal, Ireland"] = {},
["County Dublin, Ireland"] = {},
["County Galway, Ireland"] = {},
["County Kerry, Ireland"] = {},
["County Kildare, Ireland"] = {},
["County Kilkenny, Ireland"] = {},
["County Laois, Ireland"] = {},
["County Leitrim, Ireland"] = {},
["County Limerick, Ireland"] = {},
["County Longford, Ireland"] = {},
["County Louth, Ireland"] = {},
["County Mayo, Ireland"] = {},
["County Meath, Ireland"] = {},
["County Monaghan, Ireland"] = {},
["County Offaly, Ireland"] = {},
["County Roscommon, Ireland"] = {},
["County Sligo, Ireland"] = {},
["County Tipperary, Ireland"] = {},
["County Waterford, Ireland"] = {},
["County Westmeath, Ireland"] = {},
["County Wexford, Ireland"] = {},
["County Wicklow, Ireland"] = {},
}
local function make_irish_type_key_to_placename(container_pattern)
return function(key)
key = key:gsub(container_pattern, "")
local elliptical_key = key:gsub("^County ", "")
return key, elliptical_key
end
end
local function make_irish_type_placename_to_key(container_suffix)
return function(placename)
if not placename:find("^County ") and not placename:find("^City ") then
placename = "County " .. placename
end
return placename .. container_suffix
end
end
-- counties of Ireland
export.ireland_group = {
key_to_placename = make_irish_type_key_to_placename(", Ireland$"),
placename_to_key = make_irish_type_placename_to_key(", Ireland"),
default_container = "Ireland",
default_placetype = "county",
data = export.ireland_counties,
}
export.italy_administrative_regions = {
["Abruzzo, Italy"] = {},
["Aosta Valley, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}},
["Apulia, Italy"] = {},
["Basilicata, Italy"] = {},
["Calabria, Italy"] = {},
["Campania, Italy"] = {},
["Emilia-Romagna, Italy"] = {},
["Friuli-Venezia Giulia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}},
["Lazio, Italy"] = {},
["Liguria, Italy"] = {},
["Lombardy, Italy"] = {},
["Marche, Italy"] = {},
["Molise, Italy"] = {},
["Piedmont, Italy"] = {},
["Sardinia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}},
["Sicily, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}},
["Trentino-Alto Adige, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}},
["Tuscany, Italy"] = {},
["Umbria, Italy"] = {},
["Veneto, Italy"] = {},
}
-- administrative regions of Italy
export.italy_group = {
default_container = "Ý",
default_placetype = "region",
data = export.italy_administrative_regions,
}
-- table of Japanese prefectures; interpolated into the main 'places' table, but also needed separately
export.japan_prefectures = {
["Aichi, Nhật Bản"] = {},
["Akita, Nhật Bản"] = {},
["Aomori, Nhật Bản"] = {},
["Chiba, Nhật Bản"] = {},
["Ehime, Nhật Bản"] = {},
["Fukui, Nhật Bản"] = {},
["Fukuoka, Nhật Bản"] = {},
["Fukushima, Nhật Bản"] = {},
["Gifu, Nhật Bản"] = {},
["Gunma, Nhật Bản"] = {},
["Hiroshima, Nhật Bản"] = {},
["Hokkaidō, Nhật Bản"] = {divs = "subprefectures", wp = "Hokkaidō"},
["Hyōgo, Nhật Bản"] = {},
["Hyogo, Nhật Bản"] = {alias_of = "Hyōgo, Nhật Bản", display = true},
["Ibaraki, Nhật Bản"] = {},
["Ishikawa, Nhật Bản"] = {},
["Iwate, Nhật Bản"] = {},
["Kagawa, Nhật Bản"] = {},
["Kagoshima, Nhật Bản"] = {},
["Kanagawa, Nhật Bản"] = {},
["Kōchi, Nhật Bản"] = {},
["Kochi, Nhật Bản"] = {alias_of = "Kōchi, Nhật Bản", display = true},
["Kumamoto, Nhật Bản"] = {},
["Kyoto, Nhật Bản"] = {},
["Mie, Nhật Bản"] = {},
["Miyagi, Nhật Bản"] = {},
["Miyazaki, Nhật Bản"] = {},
["Nagano, Nhật Bản"] = {},
["Nagasaki, Nhật Bản"] = {},
["Nara, Nhật Bản"] = {},
["Niigata, Nhật Bản"] = {},
["Ōita, Nhật Bản"] = {},
["Oita, Nhật Bản"] = {alias_of = "Ōita, Nhật Bản", display = true},
["Okayama, Nhật Bản"] = {},
["Okinawa, Nhật Bản"] = {},
["Ōsaka, Nhật Bản"] = {},
["Osaka, Nhật Bản"] = {alias_of = "Ōsaka, Nhật Bản", display = true},
["Saga, Nhật Bản"] = {},
["Saitama, Nhật Bản"] = {},
["Shiga, Nhật Bản"] = {},
["Shimane, Nhật Bản"] = {},
["Shizuoka, Nhật Bản"] = {},
["Tochigi, Nhật Bản"] = {},
["Tokushima, Nhật Bản"] = {},
["Tottori, Nhật Bản"] = {},
["Toyama, Nhật Bản"] = {},
["Wakayama, Nhật Bản"] = {},
["Yamagata, Nhật Bản"] = {},
["Yamaguchi, Nhật Bản"] = {},
["Yamanashi, Nhật Bản"] = {},
}
-- prefectures of Japan
export.japan_group = {
key_to_placename = make_key_to_placename(", Nhật Bản$", " $"),
placename_to_key = make_placename_to_key(", Nhật Bản", ""),
default_container = "Nhật Bản",
default_placetype = "prefecture",
data = export.japan_prefectures,
}
export.laos_provinces = {
["Attapeu Province, Laos"] = {},
["Bokeo Province, Laos"] = {},
["Bolikhamxai Province, Laos"] = {},
["Champasak Province, Laos"] = {},
["Houaphanh Province, Laos"] = {},
["Khammouane Province, Laos"] = {},
["Luang Namtha Province, Laos"] = {},
["Luang Prabang Province, Laos"] = {},
["Oudomxay Province, Laos"] = {},
["Phongsaly Province, Laos"] = {},
["Salavan Province, Laos"] = {},
["Savannakhet Province, Laos"] = {},
["Vientiane Province, Laos"] = {},
["Vientiane Prefecture, Laos"] = {placetype = "prefecture", wp = "%l"},
["Sainyabuli Province, Laos"] = {},
["Sekong Province, Laos"] = {},
["Xaisomboun Province, Laos"] = {},
["Xiangkhouang Province, Laos"] = {},
}
local function laos_placename_to_key(placename)
if placename == "Vientiane Prefecture" then
return placename .. ", Laos"
end
if placename:find(" Province$") then
return placename .. ", Laos"
end
return placename .. " Province, Laos"
end
-- provinces of Laos
export.laos_group = {
key_to_placename = make_key_to_placename(", Laos$", {" Province$", " Prefecture$"}),
placename_to_key = laos_placename_to_key,
default_container = "Lào",
default_placetype = "province",
-- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province'
default_wp = "%e province",
data = export.laos_provinces,
}
export.lebanon_governorates = {
["Akkar Governorate, Lebanon"] = {},
["Baalbek-Hermel Governorate, Lebanon"] = {},
["Beirut Governorate, Lebanon"] = {},
["Beqaa Governorate, Lebanon"] = {},
["Keserwan-Jbeil Governorate, Lebanon"] = {},
["Mount Lebanon Governorate, Lebanon"] = {},
["Nabatieh Governorate, Lebanon"] = {},
-- These two are generic enough that we don't want to automatically augment a use of `gov/North Governorate` or
-- `gov/South Governorate` with `c/Lebanon`.
["North Governorate, Lebanon"] = {no_auto_augment_container = true},
["South Governorate, Lebanon"] = {no_auto_augment_container = true},
}
-- governorates of Lebanon
export.lebanon_group = {
key_to_placename = make_key_to_placename(", Lebanon$", " Governorate$"),
placename_to_key = make_placename_to_key(", Lebanon", " Governorate"),
default_container = "Lebanon",
default_placetype = "governorate",
data = export.lebanon_governorates,
}
export.malaysia_states = {
["Johor, Malaysia"] = {},
["Kedah, Malaysia"] = {},
["Kelantan, Malaysia"] = {},
["Malacca, Malaysia"] = {},
["Negeri Sembilan, Malaysia"] = {},
["Pahang, Malaysia"] = {},
["Penang, Malaysia"] = {},
["Perak, Malaysia"] = {},
["Perlis, Malaysia"] = {},
["Sabah, Malaysia"] = {},
["Sarawak, Malaysia"] = {},
["Selangor, Malaysia"] = {},
["Terengganu, Malaysia"] = {},
}
-- states of Malaysia
export.malaysia_group = {
default_container = "Malaysia",
default_placetype = "state",
default_wp = "%l, %c",
data = export.malaysia_states,
}
export.malta_regions = {
-- Some of the regions are generic enough that we don't want to automatically augment a use of e.g.
-- `r/Northern Region` with `c/Malta`. In particular;
-- * "Eastern Region" also occurs at least in Ghana, Uganda, Iceland, Nigeria, Venezuela, North Macedonia and
-- El Salvador;
-- * "Northern Region" also occurs at least in Ghana, Uganda, Malawi, Nigeria, Canada and South Africa;
-- * "Western Region" also occurs at least in Abu Dhabi, Bahrain, South Africa, Ghana, Iceland, Nepal, Nigeria,
-- Serbia and Uganda;
-- * "Southern Region" also occurs at least in Nigeria, Eritrea, Iceland, Ireland, Malawi and Serbia.
["Eastern Region, Malta"] = {no_auto_augment_container = true},
["Gozo Region, Malta"] = {wp = "%l"},
["Northern Region, Malta"] = {no_auto_augment_container = true},
["Port Region, Malta"] = {},
["Southern Region, Malta"] = {no_auto_augment_container = true},
["Western Region, Malta"] = {no_auto_augment_container = true},
}
-- regions of Malta
export.malta_group = {
key_to_placename = make_key_to_placename(", Malta$", " Region"),
placename_to_key = make_placename_to_key(", Malta", " Region"),
default_container = "Malta",
default_placetype = "region",
default_wp = "%l, %c",
default_the = true,
data = export.malta_regions,
}
export.mexico_states = {
["Aguascalientes, Mexico"] = {},
["Baja California, Mexico"] = {},
-- not display-canonicalizing because the "Norte" could be for emphasis
["Baja California Norte, Mexico"] = {alias_of = "Baja California, Mexico"},
["Baja California Sur, Mexico"] = {},
["Campeche, Mexico"] = {},
["Chiapas, Mexico"] = {},
["Chihuahua, Mexico"] = {wp = "%l (state)"},
["Coahuila, Mexico"] = {},
["Colima, Mexico"] = {},
["Durango, Mexico"] = {},
["Guanajuato, Mexico"] = {},
["Guerrero, Mexico"] = {},
["Hidalgo, Mexico"] = {wp = "%l (state)"},
["Jalisco, Mexico"] = {},
["State of Mexico, Mexico"] = {the = true},
["Mexico, Mexico"] = {alias_of = "State of Mexico, Mexico"}, -- differs in "the"
-- ["Mexico City, Mexico"] = {}, doesn't belong here because it's a city
["Michoacán, Mexico"] = {},
["Michoacan, Mexico"] = {alias_of = "Michoacán, Mexico", display = true},
["Morelos, Mexico"] = {},
["Nayarit, Mexico"] = {},
["Nuevo León, Mexico"] = {},
["Nuevo Leon, Mexico"] = {alias_of = "Nuevo León, Mexico", display = true},
["Oaxaca, Mexico"] = {},
["Puebla, Mexico"] = {},
["Querétaro, Mexico"] = {},
["Queretaro, Mexico"] = {alias_of = "Querétaro, Mexico", display = true},
["Quintana Roo, Mexico"] = {},
["San Luis Potosí, Mexico"] = {},
["San Luis Potosi, Mexico"] = {alias_of = "San Luis Potosí, Mexico", display = true},
["Sinaloa, Mexico"] = {},
["Sonora, Mexico"] = {},
["Tabasco, Mexico"] = {},
["Tamaulipas, Mexico"] = {},
["Tlaxcala, Mexico"] = {},
["Veracruz, Mexico"] = {},
["Yucatán, Mexico"] = {},
["Yucatan, Mexico"] = {alias_of = "Yucatán, Mexico", display = true},
["Zacatecas, Mexico"] = {},
}
-- Mexican states
export.mexico_group = {
default_container = "Mexico",
default_placetype = "state",
data = export.mexico_states,
}
export.moldova_districts_and_autonomous_territorial_units = {
["Anenii Noi District, Moldova"] = {}, -- capital [[Anenii Noi]]
["Basarabeasca District, Moldova"] = {}, -- capital [[Basarabeasca]]
["Briceni District, Moldova"] = {}, -- capital [[Briceni]]
["Cahul District, Moldova"] = {}, -- capital [[Cahul]]
["Cantemir District, Moldova"] = {}, -- capital [[Cantemir, Moldova|Cantemir]]
["Călărași District, Moldova"] = {}, -- capital [[Călărași, Moldova|Călărași]]
["Căușeni District, Moldova"] = {}, -- capital [[Căușeni]]
["Cimișlia District, Moldova"] = {}, -- capital [[Cimișlia]]
["Criuleni District, Moldova"] = {}, -- capital [[Criuleni]]
["Dondușeni District, Moldova"] = {}, -- capital [[Dondușeni]]
["Drochia District, Moldova"] = {}, -- capital [[Drochia]]
["Dubăsari District, Moldova"] = {}, -- capital [[Cocieri]]
["Edineț District, Moldova"] = {}, -- capital [[Edineț]]
["Fălești District, Moldova"] = {}, -- capital [[Fălești]]
["Florești District, Moldova"] = {}, -- capital [[Florești, Moldova|Florești]]
["Glodeni District, Moldova"] = {}, -- capital [[Glodeni]]
["Hîncești District, Moldova"] = {}, -- capital [[Hîncești]]
["Ialoveni District, Moldova"] = {}, -- capital [[Ialoveni]]
["Leova District, Moldova"] = {}, -- capital [[Leova]]
["Nisporeni District, Moldova"] = {}, -- capital [[Nisporeni]]
["Ocnița District, Moldova"] = {}, -- capital [[Ocnița]]
["Orhei District, Moldova"] = {}, -- capital [[Orhei]]
["Rezina District, Moldova"] = {}, -- capital [[Rezina]]
["Rîșcani District, Moldova"] = {}, -- capital [[Rîșcani]]
["Sîngerei District, Moldova"] = {}, -- capital [[Sîngerei]]
["Soroca District, Moldova"] = {}, -- capital [[Soroca]]
["Strășeni District, Moldova"] = {}, -- capital [[Strășeni]]
["Șoldănești District, Moldova"] = {}, -- capital [[Șoldănești]]
["Ștefan Vodă District, Moldova"] = {}, -- capital [[Ștefan Vodă]]
["Taraclia District, Moldova"] = {}, -- capital [[Taraclia]]
["Telenești District, Moldova"] = {}, -- capital [[Telenești]]
["Ungheni District, Moldova"] = {}, -- capital [[Ungheni]]
["Chișinău, Moldova"] = {placetype = "municipality"},
["Bălți, Moldova"] = {placetype = "municipality"},
["Gagauzia, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Comrat]]
-- the remainder are under the de-facto control of the unrecognized state of Transnistria
["Bender, Moldova"] = {placetype = "municipality"},
["Tighina, Moldova"] = {alias_of = "Bender, Moldova"},
["Transnistria, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Tiraspol]]
["Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova"},
["Administrative-Territorial Units of the Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova"},
}
local function moldova_placename_to_key(placename)
local elliptical_key = placename .. ", Moldova"
if export.moldova_districts_and_autonomous_territorial_units[elliptical_key] then
return elliptical_key
end
if placename:find(" District$") then
return placename .. ", Moldova"
end
return placename .. " District, Moldova"
end
-- Moldovan districts (raions) and autonomous territorial units
export.moldova_group = {
key_to_placename = make_key_to_placename(", Moldova$", " District"),
placename_to_key = moldova_placename_to_key,
default_container = "Moldova",
default_placetype = {"district", "raion"},
default_divs = "communes",
data = export.moldova_districts_and_autonomous_territorial_units,
}
export.morocco_regions = {
["Tangier-Tetouan-Al Hoceima, Morocco"] = {},
["Oriental, Morocco"] = {wp = "%l (%c)"},
["L'Oriental, Morocco"] = {alias_of = "Oriental, Morocco", display = true},
["Fez-Meknes, Morocco"] = {},
["Rabat-Sale-Kenitra, Morocco"] = {wp = "Rabat-Salé-Kénitra"},
["Rabat-Salé-Kénitra, Morocco"] = {alias_of = "Rabat-Sale-Kenitra, Morocco", display = true},
["Beni Mellal-Khenifra, Morocco"] = {wp = "Béni Mellal-Khénifra"},
["Béni Mellal-Khénifra, Morocco"] = {alias_of = "Beni Mellal-Khenifra, Morocco", display = true},
["Casablanca-Settat, Morocco"] = {},
["Marrakesh-Safi, Morocco"] = {wp = "Marrakesh–Safi"}, -- WP title has en-dash
["Marrakech-Safi, Morocco"] = {alias_of = "Marrakesh-Safi, Morocco", display = true},
["Draa-Tafilalet, Morocco"] = {wp = "Drâa-Tafilalet"},
["Drâa-Tafilalet, Morocco"] = {alias_of = "Draa-Tafilalet, Morocco", display = true},
["Souss-Massa, Morocco"] = {},
["Guelmim-Oued Noun, Morocco"] = {
keydesc = "+++. '''NOTE:''' This region lies partly within the disputed territory of [[Western Sahara]]"
},
["Laayoune-Sakia El Hamra, Morocco"] = {
wp = "Laâyoune-Sakia El Hamra",
keydesc = "+++. '''NOTE:''' This region lies almost completely within the disputed territory of [[Western Sahara]]",
},
["Laâyoune-Sakia El Hamra, Morocco"] = {alias_of = "Laayoune-Sakia El Hamra, Morocco", display = true},
["Dakhla-Oued Ed-Dahab, Morocco"] = {
keydesc = "+++. '''NOTE:''' This region lies completely within the disputed territory of [[Western Sahara]]",
},
}
-- regions of Morocco
export.morocco_group = {
default_container = "Maroc",
default_placetype = "region",
data = export.morocco_regions,
}
export.egypt_governorates = {
["Cairo Governorate, Egypt"] = {},
["Giza Governorate, Egypt"] = {},
["Sharqia Governorate, Egypt"] = {},
["Dakahlia Governorate, Egypt"] = {},
["Beheira Governorate, Egypt"] = {},
["Minya Governorate, Egypt"] = {},
["Qalyubia Governorate, Egypt"] = {},
["Sohag Governorate, Egypt"] = {},
["Alexandria Governorate, Egypt"] = {},
["Gharbia Governorate, Egypt"] = {},
["Asyut Governorate, Egypt"] = {},
["Monufia Governorate, Egypt"] = {},
["Faiyum Governorate, Egypt"] = {},
["Kafr El Sheikh Governorate, Egypt"] = {},
["Qena Governorate, Egypt"] = {},
["Beni Suef Governorate, Egypt"] = {},
["Damietta Governorate, Egypt"] = {},
["Aswan Governorate, Egypt"] = {},
["Ismailia Governorate, Egypt"] = {},
["Luxor Governorate, Egypt"] = {},
["Suez Governorate, Egypt"] = {},
["Port Said Governorate, Egypt"] = {},
["Matrouh Governorate, Egypt"] = {},
["North Sinai Governorate, Egypt"] = {},
["Red Sea Governorate, Egypt"] = {},
["New Valley Governorate, Egypt"] = {},
["South Sinai Governorate, Egypt"] = {},
}
-- governorates of Egypt
export.egypt_group = {
key_to_placename = make_key_to_placename(", Egypt$", " Governorate$"),
placename_to_key = make_placename_to_key(", Egypt", " Governorate"),
default_container = "Ai Cập",
default_placetype = "governorate",
data = export.egypt_governorates,
}
export.netherlands_provinces = {
["Drenthe, Netherlands"] = {},
["Flevoland, Netherlands"] = {},
["Friesland, Netherlands"] = {},
["Gelderland, Netherlands"] = {},
["Groningen, Netherlands"] = {wp = "%l (province)"},
["Limburg, Netherlands"] = {wp = "%l (%c)"},
["North Brabant, Netherlands"] = {},
-- Foreign forms get display-canonicalized.
["Noord-Brabant, Netherlands"] = {alias_of = "North Brabant, Netherlands", display = true},
["North Holland, Netherlands"] = {},
["Noord-Holland, Netherlands"] = {alias_of = "North Holland, Netherlands", display = true},
["Overijssel, Netherlands"] = {},
["South Holland, Netherlands"] = {},
["Zuid-Holland, Netherlands"] = {alias_of = "South Holland, Netherlands", display = true},
["Utrecht, Netherlands"] = {wp = "%l (province)"},
["Zeeland, Netherlands"] = {},
}
-- provinces of the Netherlands
export.netherlands_group = {
default_container = "Hà Lan",
default_placetype = "province",
default_divs = "municipalities",
data = export.netherlands_provinces,
}
export.new_zealand_regions = {
-- North Island regions
["Northland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-NTL, number 1, capital [[Whangārei]]
["Auckland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-AUK, number 2, capital [[Auckland]]
["Waikato, New Zealand"] = {}, -- ISO 3166-2 code NZ-WKO, number 3, capital [[Hamilton, New Zealand|Hamilton]]
["Bay of Plenty, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-BOP, number 4, capital [[Whakatāne]]
["Gisborne, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-GIS, number 5, capital [[Gisborne, New Zealand|Gisborne]]
["Hawke's Bay, New Zealand"] = {}, -- ISO 3166-2 code NZ-HKB, number 6, capital [[Napier, New Zealand|Napier]]
["Taranaki, New Zealand"] = {}, -- ISO 3166-2 code NZ-TKI, number 7, capital [[Stratford, New Zealand|Stratford]]
["Manawatū-Whanganui, New Zealand"] = {}, -- ISO 3166-2 code NZ-MWT, number 8, capital [[Palmerston North]]
["Manawatu-Whanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true},
["Manawatu-Wanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true},
["Wellington, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-WGN, number 9, capital [[Wellington]]
-- South Island regions
["Tasman, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-TAS, number 10, capital [[Richmond, New Zealand|Richmond]]
["Nelson, New Zealand"] = {placetype = {"region", "thành phố"}, wp = "%l, %c", is_city = true}, -- ISO 3166-2 code NZ-NSN, number 11, capital [[Nelson, New Zealand|Nelson]]
["Marlborough, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-MBH, number 12, capital [[Blenheim, New Zealand|Blenheim]]
["West Coast, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-WTC, number 13, capital [[Greymouth]]
["Canterbury, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-CAN, number 14, capital [[Christchurch]]
["Otago, New Zealand"] = {}, -- ISO 3166-2 code NZ-OTA, number 15, capital [[Dunedin]]
["Southland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-STL, number 16, capital [[Invercargill]]
}
-- regions of New Zealand
export.new_zealand_group = {
default_container = "New Zealand",
default_placetype = "region",
data = export.new_zealand_regions,
}
export.nigeria_states = {
["Abia State, Nigeria"] = {},
["Adamawa State, Nigeria"] = {},
["Akwa Ibom State, Nigeria"] = {},
["Anambra State, Nigeria"] = {},
["Bauchi State, Nigeria"] = {},
["Bayelsa State, Nigeria"] = {},
["Benue State, Nigeria"] = {},
["Borno State, Nigeria"] = {},
["Cross River State, Nigeria"] = {},
["Delta State, Nigeria"] = {},
["Ebonyi State, Nigeria"] = {},
["Edo State, Nigeria"] = {},
["Ekiti State, Nigeria"] = {},
["Enugu State, Nigeria"] = {},
["Federal Capital Territory, Nigeria"] = {
-- not a state but allow it to be referenced as one in holonyms
placetype = {"federal territory", "territory", "state"}, the = true, wp = "%l (%c)",
},
["Gombe State, Nigeria"] = {},
["Imo State, Nigeria"] = {},
["Jigawa State, Nigeria"] = {},
["Kaduna State, Nigeria"] = {},
["Kano State, Nigeria"] = {},
["Katsina State, Nigeria"] = {},
["Kebbi State, Nigeria"] = {},
["Kogi State, Nigeria"] = {},
["Kwara State, Nigeria"] = {},
["Lagos State, Nigeria"] = {},
["Nasarawa State, Nigeria"] = {},
["Niger State, Nigeria"] = {},
["Ogun State, Nigeria"] = {},
["Ondo State, Nigeria"] = {},
["Osun State, Nigeria"] = {},
["Oyo State, Nigeria"] = {},
["Plateau State, Nigeria"] = {},
["Rivers State, Nigeria"] = {},
["Sokoto State, Nigeria"] = {},
["Taraba State, Nigeria"] = {},
["Yobe State, Nigeria"] = {},
["Zamfara State, Nigeria"] = {},
}
-- states of Nigeria
export.nigeria_group = {
key_to_placename = make_key_to_placename(", Nigeria$", " State$"),
placename_to_key = make_placename_to_key(", Nigeria", " State"),
default_container = "Nigeria",
default_placetype = "state",
data = export.nigeria_states,
}
export.north_korea_provinces = {
["Chagang Province, North Korea"] = {},
["North Hamgyong Province, North Korea"] = {},
["South Hamgyong Province, North Korea"] = {},
["North Hwanghae Province, North Korea"] = {},
["South Hwanghae Province, North Korea"] = {},
["Kangwon Province, North Korea"] = {wp = "%l (%c)"},
["North Pyongan Province, North Korea"] = {},
["South Pyongan Province, North Korea"] = {},
["Ryanggang Province, North Korea"] = {},
}
-- provinces of North Korea
export.north_korea_group = {
key_to_placename = make_key_to_placename(", North Korea$", " Province$"),
placename_to_key = make_placename_to_key(", North Korea", " Province"),
default_container = "Cộng hòa Dân chủ Nhân dân Triều Tiên",
default_placetype = "province",
data = export.north_korea_provinces,
}
export.norwegian_counties = {
["Oslo, Norway"] = {},
["Rogaland, Norway"] = {},
["Møre og Romsdal, Norway"] = {},
["Nordland, Norway"] = {},
["Østfold, Norway"] = {},
["Akershus, Norway"] = {},
["Buskerud, Norway"] = {},
-- the following two were merged into Innlandet
-- ["Hedmark, Norway"] = {},
-- ["Oppland, Norway"] = {},
["Innlandet, Norway"] = {},
["Vestfold, Norway"] = {},
["Telemark, Norway"] = {},
-- the following two were merged into Agder
-- ["Aust-Agder, Norway"] = {},
-- ["Vest-Agder, Norway"] = {},
["Agder, Norway"] = {},
-- the following two were merged into Vestland
-- ["Hordaland, Norway"] = {},
-- ["Sogn og Fjordane, Norway"] = {},
["Vestland, Norway"] = {},
["Trøndelag, Norway"] = {},
["Troms, Norway"] = {},
["Finnmark, Norway"] = {},
}
-- counties of Norway
export.norway_group = {
default_container = "Na Uy",
default_placetype = "county",
data = export.norwegian_counties,
}
export.pakistan_provinces_and_territories = {
["Azad Kashmir, Pakistan"] = {
placetype = {"administrative territory", "autonomous territory", "territory"},
},
["Azad Jammu and Kashmir, Pakistan"] = {alias_of = "Azad Kashmir, Pakistan", display = true},
["Balochistan, Pakistan"] = {wp = "%l, %c"},
["Gilgit-Baltistan, Pakistan"] = {
placetype = {"administrative territory", "territory"},
},
["Islamabad Capital Territory, Pakistan"] = {
the = true,
divs = {}, -- no divisions
placetype = {"federal territory", "administrative territory", "territory"},
},
-- Islamabad is an accepted alias for Islamabad Capital Territory given the above placetypes
["Islamabad, Pakistan"] = {alias_of = "Islamabad Capital Territory, Pakistan"},
["Khyber Pakhtunkhwa, Pakistan"] = {},
["Punjab, Pakistan"] = {wp = "%l, %c"},
["Sindh, Pakistan"] = {},
}
-- provinces and territories of Pakistan
export.pakistan_group = {
default_container = "Pakistan",
default_placetype = "province",
default_divs = "divisions",
data = export.pakistan_provinces_and_territories,
}
export.philippines_provinces = {
["Abra, Philippines"] = {wp = "%l (province)"},
["Agusan del Norte, Philippines"] = {},
["Agusan del Sur, Philippines"] = {},
["Aklan, Philippines"] = {},
["Albay, Philippines"] = {},
["Antique, Philippines"] = {wp = "%l (province)"},
["Apayao, Philippines"] = {},
["Aurora, Philippines"] = {wp = "%l (province)"},
["Basilan, Philippines"] = {},
["Bataan, Philippines"] = {},
["Batanes, Philippines"] = {},
["Batangas, Philippines"] = {},
["Benguet, Philippines"] = {},
["Biliran, Philippines"] = {},
["Bohol, Philippines"] = {},
["Bukidnon, Philippines"] = {},
["Bulacan, Philippines"] = {},
["Cagayan, Philippines"] = {},
["Camarines Norte, Philippines"] = {},
["Camarines Sur, Philippines"] = {},
["Camiguin, Philippines"] = {},
["Capiz, Philippines"] = {},
["Catanduanes, Philippines"] = {},
["Cavite, Philippines"] = {},
["Cebu, Philippines"] = {},
["Cotabato, Philippines"] = {},
["Davao de Oro, Philippines"] = {},
["Davao del Norte, Philippines"] = {},
["Davao del Sur, Philippines"] = {},
["Davao Occidental, Philippines"] = {},
["Davao Oriental, Philippines"] = {},
["Dinagat Islands, Philippines"] = {the = true},
["Eastern Samar, Philippines"] = {},
["Guimaras, Philippines"] = {},
["Ifugao, Philippines"] = {},
["Ilocos Norte, Philippines"] = {},
["Ilocos Sur, Philippines"] = {},
["Iloilo, Philippines"] = {},
["Isabela, Philippines"] = {wp = "%l (province)"},
["Kalinga, Philippines"] = {wp = "%l (province)"},
["La Union, Philippines"] = {},
["Laguna, Philippines"] = {wp = "%l (province)"},
["Lanao del Norte, Philippines"] = {},
["Lanao del Sur, Philippines"] = {},
["Leyte, Philippines"] = {wp = "%l (province)"},
["Maguindanao del Norte, Philippines"] = {},
["Maguindanao del Sur, Philippines"] = {},
["Marinduque, Philippines"] = {},
["Masbate, Philippines"] = {},
["Misamis Occidental, Philippines"] = {},
["Misamis Oriental, Philippines"] = {},
["Mountain Province, Philippines"] = {},
["Negros Occidental, Philippines"] = {},
["Negros Oriental, Philippines"] = {},
["Northern Samar, Philippines"] = {},
["Nueva Ecija, Philippines"] = {},
["Nueva Vizcaya, Philippines"] = {},
["Occidental Mindoro, Philippines"] = {},
["Oriental Mindoro, Philippines"] = {},
["Palawan, Philippines"] = {},
["Pampanga, Philippines"] = {},
["Pangasinan, Philippines"] = {},
["Quezon, Philippines"] = {},
["Quirino, Philippines"] = {},
["Rizal, Philippines"] = {wp = "%l (province)"},
["Romblon, Philippines"] = {},
["Samar, Philippines"] = {wp = "%l (province)"},
["Sarangani, Philippines"] = {},
["Siquijor, Philippines"] = {},
["Sorsogon, Philippines"] = {},
["South Cotabato, Philippines"] = {},
["Southern Leyte, Philippines"] = {},
["Sultan Kudarat, Philippines"] = {},
["Sulu, Philippines"] = {},
["Surigao del Norte, Philippines"] = {},
["Surigao del Sur, Philippines"] = {},
["Tarlac, Philippines"] = {},
["Tawi-Tawi, Philippines"] = {},
["Zambales, Philippines"] = {},
["Zamboanga del Norte, Philippines"] = {},
["Zamboanga del Sur, Philippines"] = {},
["Zamboanga Sibugay, Philippines"] = {},
-- not a province but treated as one; allow it to be referred to as a province in holonyms
["Metro Manila, Philippines"] = {placetype = {"region", "province"}},
}
-- provinces of the Philippines
export.philippines_group = {
default_container = "Philippines",
default_placetype = "province",
default_divs = {"municipalities", "barangays"},
data = export.philippines_provinces,
}
export.poland_voivodeships = {
["Lower Silesian Voivodeship, Poland"] = {}, -- abbr DS, code 02, capital Wrocław
["Kuyavian-Pomeranian Voivodeship, Poland"] = {}, -- abbr KP, code 04, capital Bydgoszcz (seat of voivode), Toruń (seat of sejmik and marshal)
["Lublin Voivodeship, Poland"] = {}, -- abbr LU, code 06, capital Lublin
["Lubusz Voivodeship, Poland"] = {}, -- abbr LB, code 08, capital Gorzów Wielkopolski (seat of voivode), Zielona Góra (seat of sejmik and marshal)
["Lodz Voivodeship, Poland"] = {wp = "Łódź Voivodeship"}, -- abbr LD, code 10, capital Łódź
["Łódź Voivodeship, Poland"] = {alias_of = "Lodz Voivodeship, Poland", display = true, display_as_full = true},
["Lesser Poland Voivodeship, Poland"] = {}, -- abbr MA, code 12, capital Kraków
["Masovian Voivodeship, Poland"] = {}, -- abbr MZ, code 14, capital Warsaw
["Opole Voivodeship, Poland"] = {}, -- abbr OP, code 16, capital Opole
["Subcarpathian Voivodeship, Poland"] = {}, -- abbr PK, code 18, capital Rzeszów
["Podlaskie Voivodeship, Poland"] = {}, -- abbr PD, code 20, capital Białystok
["Pomeranian Voivodeship, Poland"] = {}, -- abbr PM, code 22, capital Gdańsk
["Silesian Voivodeship, Poland"] = {}, -- abbr SL, code 24, capital Katowice
["Holy Cross Voivodeship, Poland"] = {wp = "Świętokrzyskie Voivodeship"}, -- abbr SK, code 26, capital Kielce
["Świętokrzyskie Voivodeship, Poland"] = {alias_of = "Holy Cross Voivodeship, Poland", display = true, display_as_full = true},
["Warmian-Masurian Voivodeship, Poland"] = {}, -- abbr WN, code 28, capital Olsztyn
["Greater Poland Voivodeship, Poland"] = {}, -- abbr WP, code 30, capital Poznań
["West Pomeranian Voivodeship, Poland"] = {}, -- abbr ZP, code 32, capital Szczecin
}
-- voivodeships of Poland
export.poland_group = {
key_to_placename = make_key_to_placename(", Poland$", " Voivodeship$"),
placename_to_key = make_placename_to_key(", Poland", " Voivodeship"),
default_container = "Ba Lan",
default_placetype = "voivodeship",
default_divs = {
-- "counties", -- not enough of them currently
{type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}},
},
data = export.poland_voivodeships,
}
export.portugal_districts_and_autonomous_regions = {
["Azores, Portugal"] = {the = true, placetype = {"autonomous region", "region"}},
["Aveiro District, Portugal"] = {},
["Beja, Bồ Đào Nha"] = {},
["Braga District, Portugal"] = {},
["Bragança District, Portugal"] = {},
["Castelo Branco District, Portugal"] = {},
["Coimbra District, Portugal"] = {},
["Évora District, Portugal"] = {},
["Faro District, Portugal"] = {},
["Guarda District, Portugal"] = {},
["Leiria District, Portugal"] = {},
["Lisbon District, Portugal"] = {},
["Lisboa District, Portugal"] = {alias_of = "Lisbon District, Portugal", display = true},
["Madeira, Portugal"] = {placetype = {"autonomous region", "region"}},
["Portalegre District, Portugal"] = {},
["Porto District, Portugal"] = {},
["Santarém District, Portugal"] = {},
["Setúbal District, Portugal"] = {},
["Viana do Castelo District, Portugal"] = {},
["Vila Real District, Portugal"] = {},
["Viseu District, Portugal"] = {},
}
local function portugal_placename_to_key(placename)
if placename == "Azores" or placename == "Madeira" then
return placename .. ", Portugal"
end
if placename:find(" District$") then
return placename .. ", Portugal"
end
return placename .. " District, Portugal"
end
-- districts and autonomous regions of Portugal
export.portugal_group = {
key_to_placename = make_key_to_placename(", Portugal$", " District$"),
placename_to_key = portugal_placename_to_key,
default_container = "Portugal",
default_placetype = "district",
default_divs = "municipalities",
data = export.portugal_districts_and_autonomous_regions,
}
export.romania_counties = {
["Alba County, Romania"] = {},
["Arad County, Romania"] = {},
["Argeș County, Romania"] = {},
["Bacău County, Romania"] = {},
["Bihor County, Romania"] = {},
["Bistrița-Năsăud County, Romania"] = {},
["Botoșani County, Romania"] = {},
["Brașov County, Romania"] = {},
["Brăila County, Romania"] = {},
-- Bucharest: not in a county
["Buzău County, Romania"] = {},
["Caraș-Severin County, Romania"] = {},
["Cluj County, Romania"] = {},
["Constanța County, Romania"] = {},
["Covasna County, Romania"] = {},
["Călărași County, Romania"] = {},
["Dolj County, Romania"] = {},
["Dâmbovița County, Romania"] = {},
["Galați County, Romania"] = {},
["Giurgiu County, Romania"] = {},
["Gorj County, Romania"] = {},
["Harghita County, Romania"] = {},
["Hunedoara County, Romania"] = {},
["Ialomița County, Romania"] = {},
["Iași County, Romania"] = {},
["Ilfov County, Romania"] = {},
["Maramureș County, Romania"] = {},
["Mehedinți County, Romania"] = {},
["Mureș County, Romania"] = {},
["Neamț County, Romania"] = {},
["Olt County, Romania"] = {},
["Prahova County, Romania"] = {},
["Satu Mare County, Romania"] = {},
["Sibiu County, Romania"] = {},
["Suceava County, Romania"] = {},
["Sălaj County, Romania"] = {},
["Teleorman County, Romania"] = {},
["Timiș County, Romania"] = {},
["Tulcea County, Romania"] = {},
["Vaslui County, Romania"] = {},
["Vrancea County, Romania"] = {},
["Vâlcea County, Romania"] = {},
}
-- counties of Romania
export.romania_group = {
key_to_placename = make_key_to_placename(", Romania$", " County$"),
placename_to_key = make_placename_to_key(", Romania", " County"),
default_container = "Romania",
default_placetype = "county",
default_divs = "communes",
data = export.romania_counties,
}
local function make_russia_federal_subject_spec(spectype, use_the, wp)
return {
placetype = spectype,
the = not not use_the,
bare_category_parent_type = {"federal subjects", spectype .. "s"},
wp = wp,
}
end
local russia_autonomous_okrug_no_the =
{placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}}
local russia_autonomous_okrug_the =
{placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"},
the = true}
local russia_krai = make_russia_federal_subject_spec("krai")
local russia_oblast = make_russia_federal_subject_spec("oblast")
local russia_republic_the = make_russia_federal_subject_spec("republic", "use the")
local russia_republic_no_the = make_russia_federal_subject_spec("republic")
export.russia_federal_subjects = {
-- autonomous oblasts
["Jewish Autonomous Oblast, Russia"] =
{the = true, placetype = {"autonomous oblast", "oblast"},
bare_category_parent_type = {"federal subjects", "autonomous oblasts"}},
-- autonomous okrugs
["Chukotka Autonomous Okrug, Russia"] = russia_autonomous_okrug_the,
["Chukotka, Russia"] = {alias_of = "Chukotka Autonomous Okrug, Russia"},
["Khanty-Mansi Autonomous Okrug, Russia"] = russia_autonomous_okrug_the,
["Khanty-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"},
["Khantia-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"},
["Yugra, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"},
["Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the,
["Nenetsia, Russia"] = {alias_of = "Nenets Autonomous Okrug, Russia"},
["Yamalo-Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the,
["Yamalia, Russia"] = {alias_of = "Yamalo-Nenets Autonomous Okrug, Russia"},
-- krais
["Altai Krai, Russia"] = russia_krai,
["Kamchatka Krai, Russia"] = russia_krai,
["Khabarovsk Krai, Russia"] = russia_krai,
["Krasnodar Krai, Russia"] = russia_krai,
["Krasnoyarsk Krai, Russia"] = russia_krai,
["Perm Krai, Russia"] = russia_krai,
["Primorsky Krai, Russia"] = russia_krai,
["Stavropol Krai, Russia"] = russia_krai,
["Zabaykalsky Krai, Russia"] = russia_krai,
-- oblasts
["Amur Oblast, Russia"] = russia_oblast,
["Arkhangelsk Oblast, Russia"] = russia_oblast,
["Astrakhan Oblast, Russia"] = russia_oblast,
["Belgorod Oblast, Russia"] = russia_oblast,
["Bryansk Oblast, Russia"] = russia_oblast,
["Chelyabinsk Oblast, Russia"] = russia_oblast,
["Irkutsk Oblast, Russia"] = russia_oblast,
["Ivanovo Oblast, Russia"] = russia_oblast,
["Kaliningrad Oblast, Russia"] = russia_oblast,
["Kaluga Oblast, Russia"] = russia_oblast,
["Kemerovo Oblast, Russia"] = russia_oblast,
["Kirov Oblast, Russia"] = russia_oblast,
["Kostroma Oblast, Russia"] = russia_oblast,
["Kurgan Oblast, Russia"] = russia_oblast,
["Kursk Oblast, Russia"] = russia_oblast,
["Leningrad Oblast, Russia"] = russia_oblast,
["Lipetsk Oblast, Russia"] = russia_oblast,
["Magadan Oblast, Russia"] = russia_oblast,
["Moscow Oblast, Russia"] = russia_oblast,
["Murmansk Oblast, Russia"] = russia_oblast,
["Nizhny Novgorod Oblast, Russia"] = russia_oblast,
["Novgorod Oblast, Russia"] = russia_oblast,
["Novosibirsk Oblast, Russia"] = russia_oblast,
["Omsk Oblast, Russia"] = russia_oblast,
["Orenburg Oblast, Russia"] = russia_oblast,
["Oryol Oblast, Russia"] = russia_oblast,
["Penza Oblast, Russia"] = russia_oblast,
["Pskov Oblast, Russia"] = russia_oblast,
["Rostov Oblast, Russia"] = russia_oblast,
["Ryazan Oblast, Russia"] = russia_oblast,
["Sakhalin Oblast, Russia"] = russia_oblast,
["Samara Oblast, Russia"] = russia_oblast,
["Saratov Oblast, Russia"] = russia_oblast,
["Smolensk Oblast, Russia"] = russia_oblast,
["Sverdlovsk Oblast, Russia"] = russia_oblast,
["Tambov Oblast, Russia"] = russia_oblast,
["Tomsk Oblast, Russia"] = russia_oblast,
["Tula Oblast, Russia"] = russia_oblast,
["Tver Oblast, Russia"] = russia_oblast,
["Tyumen Oblast, Russia"] = russia_oblast,
["Ulyanovsk Oblast, Russia"] = russia_oblast,
["Vladimir Oblast, Russia"] = russia_oblast,
["Volgograd Oblast, Russia"] = russia_oblast,
["Vologda Oblast, Russia"] = russia_oblast,
["Voronezh Oblast, Russia"] = russia_oblast,
["Yaroslavl Oblast, Russia"] = russia_oblast,
-- republics
--
-- We only need to include cases that aren't just shortened versions of the full federal subject name (i.e. where
-- words like "Republic" and "Oblast" are omitted but the name is not otherwise modified; these are handled by
-- key_to_placename). Non-display-canonicalizing aliases are generally due to differences in the presence or absence
-- of "the".
["Adygea, Russia"] = russia_republic_no_the,
["Republic of Adygea, Russia"] = {alias_of = "Adygea, Russia"},
["Bashkortostan, Russia"] = russia_republic_no_the,
["Republic of Bashkortostan, Russia"] = {alias_of = "Bashkortostan, Russia"},
["Bashkiria, Russia"] = {alias_of = "Bashkortostan, Russia"},
["Buryatia, Russia"] = russia_republic_no_the,
["Republic of Buryatia, Russia"] = {alias_of = "Buryatia, Russia"},
["Dagestan, Russia"] = russia_republic_no_the,
["Republic of Dagestan, Russia"] = {alias_of = "Dagestan, Russia"},
["Ingushetia, Russia"] = russia_republic_no_the,
["Republic of Ingushetia, Russia"] = {alias_of = "Ingushetia, Russia"},
["Kalmykia, Russia"] = russia_republic_no_the,
["Republic of Kalmykia, Russia"] = {alias_of = "Kalmykia, Russia"},
["Karelia, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Karelia"),
["Republic of Karelia, Russia"] = {alias_of = "Karelia, Russia"},
["Khakassia, Russia"] = russia_republic_no_the,
["Republic of Khakassia, Russia"] = {alias_of = "Khakassia, Russia"},
["Mordovia, Russia"] = russia_republic_no_the,
["Republic of Mordovia, Russia"] = {alias_of = "Mordovia, Russia"},
["North Ossetia-Alania, Russia"] = make_russia_federal_subject_spec("republic", nil, "North Ossetia–Alania"), -- with en-dash
["Republic of North Ossetia-Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia"},
["North Ossetia, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true},
["Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true},
["Tatarstan, Russia"] = russia_republic_no_the,
["Republic of Tatarstan, Russia"] = {alias_of = "Tatarstan, Russia"},
["Altai Republic, Russia"] = russia_republic_the,
["Chechnya, Russia"] = russia_republic_no_the,
["Chechen Republic, Russia"] = {alias_of = "Chechnya, Russia"},
["Chuvashia, Russia"] = russia_republic_no_the,
["Chuvash Republic, Russia"] = {alias_of = "Chuvashia, Russia"},
["Kabardino-Balkaria, Russia"] = russia_republic_no_the,
["Kabardino-Balkariya, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = true},
["Kabardino-Balkarian Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia"},
["Kabardino-Balkar Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia",
display = "Kabardino-Balkarian Republic, Russia"},
["Karachay-Cherkessia, Russia"] = russia_republic_no_the,
["Karachay-Cherkess Republic, Russia"] = {alias_of = "Karachay-Cherkessia, Russia"},
["Komi, Russia"] = make_russia_federal_subject_spec("republic", nil, "Komi Republic"),
["Komi Republic, Russia"] = {alias_of = "Komi, Russia"},
["Mari El, Russia"] = russia_republic_no_the,
["Mari El Republic, Russia"] = {alias_of = "Mari El, Russia"},
["Sakha, Russia"] = make_russia_federal_subject_spec("republic", nil, "Sakha Republic"),
["Sakha Republic, Russia"] = {alias_of = "Sakha, Russia"},
["Yakutia, Russia"] = {alias_of = "Sakha, Russia"},
["Yakutiya, Russia"] = {alias_of = "Sakha, Russia", display = "Yakutia, Russia"},
["Republic of Yakutia (Sakha), Russia"] = {alias_of = "Sakha, Russia", display = "Sakha Republic, Russia",
the = true},
["Tuva, Russia"] = russia_republic_no_the,
["Tyva, Russia"] = {alias_of = "Tuva, Russia", display = true},
["Tuva Republic, Russia"] = {alias_of = "Tuva, Russia"},
["Tyva Republic, Russia"] = {alias_of = "Tuva, Russia", display= "Tuva Republic, Russia"},
["Udmurtia, Russia"] = russia_republic_no_the,
["Udmurt Republic, Russia"] = {alias_of = "Udmurtia, Russia"},
-- Not included due to being unrecognized and only partly controlled:
-- ["Crimea, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Crimea (Russia)")
-- ["Donetsk People's Republic, Russia"] = russia_republic_the,
-- ["Luhansk People's Republic, Russia"] = russia_republic_the,
-- ["Zaporozhye Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Zaporizhzhia Oblast"),
-- ["Kherson Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Kherson Oblast"),
-- There are also federal cities (not included because they're cities):
-- Moscow, Saint Petersburg; Sevastopol (unrecognized; same status as for "Crimea, Russia" above)
}
local function russia_key_to_placename(key)
key = key:gsub(",.*", "")
local full_placename = key
if key == "Jewish Autonomous Oblast" then
return full_placename, full_placename
end
local elliptical_placename
for _, suffix in ipairs({"Krai", "Oblast"}) do
elliptical_placename = key:match("^(.*) " .. suffix .. "$")
if elliptical_placename then
return full_placename, elliptical_placename
end
end
return full_placename, full_placename
end
local function russia_placename_to_key(placename)
local key = placename .. ", Russia"
if export.russia_federal_subjects[key] then
return key
end
-- We allow the user to say e.g. "obl/Samara" in place of "obl/Samara Oblast".
for _, suffix in ipairs({"Krai", "Oblast"}) do
local suffixed_key = placename .. " " .. suffix .. ", Russia"
if export.russia_federal_subjects[suffixed_key] then
return suffixed_key
end
end
return placename .. ", Russia"
end
local function construct_russia_federal_subject_keydesc(group, key, spec)
local placename = key:gsub(",.*", "")
local linked_placename = export.construct_linked_placename(spec, placename)
local placetype = spec.placetype
if type(placetype) == "table" then
placetype = placetype[1]
end
if placetype == "oblast" then
-- Hack: Oblasts generally don't have entries under "Foo Oblast"
-- but just under "Foo", so fix the linked key appropriately;
-- doesn't apply to the Jewish Autonomous Oblast
linked_placename = linked_placename:gsub(" Oblast%]%]", "%]%] Oblast")
end
return linked_placename .. ", a [[federal subject]] ([[" .. placetype .. "]]) of [[Russia]]"
end
-- federal subjects of Russia
export.russia_group = {
key_to_placename = russia_key_to_placename,
placename_to_key = russia_placename_to_key,
default_container = "Nga",
default_keydesc = construct_russia_federal_subject_keydesc,
default_overriding_bare_label_parents = {"federal subjects of Russia", "+++"},
data = export.russia_federal_subjects,
}
export.saudi_arabia_provinces = {
["Riyadh Province, Saudi Arabia"] = {},
["Mecca Province, Saudi Arabia"] = {},
-- Name is too generic to assume it's in Saudi Arabia if not specified.
["Eastern Province, Saudi Arabia"] = {no_auto_augment_container = true, wp = "%l, %c"},
["Medina Province, Saudi Arabia"] = {wp = "%l (%c)"},
["Aseer Province, Saudi Arabia"] = {wp = "Asir"},
["Asir Province, Saudi Arabia"] = {alias_of = "Aseer Province, Saudi Arabia", display = true},
["Jazan Province, Saudi Arabia"] = {},
["Qassim Province, Saudi Arabia"] = {wp = "Al-Qassim Province"},
["Al-Qassim Province, Saudi Arabia"] = {alias_of = "Qassim Province, Saudi Arabia", display = true},
["Tabuk Province, Saudi Arabia"] = {},
["Hail Province, Saudi Arabia"] = {wp = "Ḥa'il Province"},
["Ha'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true},
["Ḥa'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true},
["Al-Jouf Province, Saudi Arabia"] = {wp = "Al-Jawf Province"},
["Al-Jawf Province, Saudi Arabia"] = {alias_of = "Al-Jouf Province, Saudi Arabia", display = true},
["Najran Province, Saudi Arabia"] = {},
["Northern Borders Province, Saudi Arabia"] = {},
["Al-Bahah Province, Saudi Arabia"] = {},
}
-- provinces of Saudi Arabia
export.saudi_arabia_group = {
key_to_placename = make_key_to_placename(", Saudi Arabia$", " Province$"),
placename_to_key = make_placename_to_key(", Saudi Arabia", " Province"),
default_container = "Ả Rập Xê Út",
default_placetype = "province",
data = export.saudi_arabia_provinces,
}
export.south_africa_provinces = {
["Eastern Cape, South Africa"] = {the = true},
["Free State, South Africa"] = {the = true, wp = "%l (province)"},
["Gauteng, South Africa"] = {},
["KwaZulu-Natal, South Africa"] = {},
["Limpopo, South Africa"] = {},
["Mpumalanga, South Africa"] = {},
-- per Wikipedia and other sources, `North West` doesn't normally have `the` before it
["North West, South Africa"] = {wp = "%l (South African province)"},
["Northern Cape, South Africa"] = {the = true},
["Western Cape, South Africa"] = {the = true},
}
-- provinces of South Africa
export.south_africa_group = {
default_container = "South Africa",
default_placetype = "province",
default_divs = "municipalities",
data = export.south_africa_provinces,
}
export.south_korea_provinces = {
["North Chungcheong Province, South Korea"] = {},
["South Chungcheong Province, South Korea"] = {},
["Gangwon Province, South Korea"] = {wp = "%l, %c"},
["Gyeonggi Province, South Korea"] = {},
["North Gyeongsang Province, South Korea"] = {},
["South Gyeongsang Province, South Korea"] = {},
["North Jeolla Province, South Korea"] = {},
["South Jeolla Province, South Korea"] = {},
["Jeju Province, South Korea"] = {},
}
-- provinces of South Korea
export.south_korea_group = {
key_to_placename = make_key_to_placename(", South Korea$", " Province$"),
placename_to_key = make_placename_to_key(", South Korea", " Province"),
default_container = "Hàn Quốc",
default_placetype = "province",
data = export.south_korea_provinces,
}
export.spain_autonomous_communities = {
["Andalusia, Spain"] = {},
["Aragon, Spain"] = {},
["Asturias, Spain"] = {},
["Balearic Islands, Spain"] = {the = true},
["Basque Country, Spain"] = {the = true, wp = "%l (autonomous community)"},
["Canary Islands, Spain"] = {the = true},
["Cantabria, Spain"] = {},
["Castile and León, Spain"] = {},
["Castilla-La Mancha, Spain"] = {wp = "Castilla–La Mancha"}, -- with en-dash
["Catalonia, Spain"] = {},
["Community of Madrid, Spain"] = {the = true},
["Extremadura, Spain"] = {},
["Galicia, Spain"] = {wp = "%l (Spain)"},
["La Rioja, Spain"] = {},
["Murcia, Spain"] = {wp = "Region of %l"},
["Navarre, Spain"] = {},
["Valencia, Spain"] = {wp = "Valencian Community"},
["Valencian Community, Spain"] = {alias_of = "Valencia, Spain"},
}
-- autonomous communities of Spain
export.spain_group = {
default_container = "Tây Ban Nha",
default_placetype = "autonomous community",
default_divs = {"municipalities", "comarcas"},
data = export.spain_autonomous_communities,
}
export.taiwan_counties = {
["Changhua County, Taiwan"] = {},
["Chiayi County, Taiwan"] = {},
["Hsinchu County, Taiwan"] = {},
["Hualien County, Taiwan"] = {},
["Kinmen County, Taiwan"] = {wp = "Kinmen"},
["Lienchiang County, Taiwan"] = {wp = "Matsu Islands"},
["Miaoli County, Taiwan"] = {},
["Nantou County, Taiwan"] = {},
["Penghu County, Taiwan"] = {wp = "Penghu"},
["Pingtung County, Taiwan"] = {},
["Taitung County, Taiwan"] = {},
["Yilan County, Taiwan"] = {wp = "%l, %c"},
["Yunlin County, Taiwan"] = {},
}
-- counties of Taiwan
export.taiwan_group = {
key_to_placename = make_key_to_placename(", Taiwan$", " County$"),
placename_to_key = make_placename_to_key(", Taiwan", " County"),
default_container = "Đài Loan",
default_placetype = "county",
default_divs = {"districts", "townships"},
data = export.taiwan_counties,
}
export.thailand_provinces = {
-- Bangkok (special administrative area)
["Amnat Charoen Province, Thailand"] = {},
["Ang Thong Province, Thailand"] = {},
["Bueng Kan Province, Thailand"] = {},
["Buriram Province, Thailand"] = {},
["Chachoengsao Province, Thailand"] = {},
["Chai Nat Province, Thailand"] = {},
["Chaiyaphum Province, Thailand"] = {},
["Chanthaburi Province, Thailand"] = {},
["Chiang Mai Province, Thailand"] = {},
["Chiang Rai Province, Thailand"] = {},
["Chonburi Province, Thailand"] = {},
["Chumphon Province, Thailand"] = {},
["Kalasin Province, Thailand"] = {},
["Kamphaeng Phet Province, Thailand"] = {},
["Kanchanaburi Province, Thailand"] = {},
["Khon Kaen Province, Thailand"] = {},
["Krabi Province, Thailand"] = {},
["Lampang Province, Thailand"] = {},
["Lamphun Province, Thailand"] = {},
["Loei Province, Thailand"] = {},
["Lopburi Province, Thailand"] = {},
["Mae Hong Son Province, Thailand"] = {},
["Maha Sarakham Province, Thailand"] = {},
["Mukdahan Province, Thailand"] = {},
["Nakhon Nayok Province, Thailand"] = {},
["Nakhon Pathom Province, Thailand"] = {},
["Nakhon Phanom Province, Thailand"] = {},
["Nakhon Ratchasima Province, Thailand"] = {},
["Nakhon Sawon Province, Thailand"] = {},
["Nakhon Si Thammarat Province, Thailand"] = {},
["Nan Province, Thailand"] = {},
["Narathiwat Province, Thailand"] = {},
["Nong Bua Lamphu Province, Thailand"] = {},
["Nong Khai Province, Thailand"] = {},
["Nonthaburi Province, Thailand"] = {},
["Pathum Thani Province, Thailand"] = {},
["Pattani Province, Thailand"] = {},
["Phang Nga Province, Thailand"] = {},
["Phatthalung Province, Thailand"] = {},
["Phayao Province, Thailand"] = {},
["Phetchabun Province, Thailand"] = {},
["Phetchaburi Province, Thailand"] = {},
["Phichit Province, Thailand"] = {},
["Phitsanulok Province, Thailand"] = {},
["Phra Nakhon Si Ayutthaya Province, Thailand"] = {},
["Phrae Province, Thailand"] = {},
["Phuket Province, Thailand"] = {},
["Prachinburi Province, Thailand"] = {},
["Prachuap Khiri Khan Province, Thailand"] = {},
["Ranong Province, Thailand"] = {},
["Ratchaburi Province, Thailand"] = {},
["Rayong Province, Thailand"] = {},
["Roi Et Province, Thailand"] = {},
["Sa Kaeo Province, Thailand"] = {},
["Sakon Nakhon Province, Thailand"] = {},
["Samut Prakan Province, Thailand"] = {},
["Samut Sakhon Province, Thailand"] = {},
["Samut Songkhram Province, Thailand"] = {},
["Saraburi Province, Thailand"] = {},
["Satun Province, Thailand"] = {},
["Sing Buri Province, Thailand"] = {},
["Sisaket Province, Thailand"] = {},
["Songkhla Province, Thailand"] = {},
["Sukhothai Province, Thailand"] = {},
["Suphan Buri Province, Thailand"] = {},
["Surat Thani Province, Thailand"] = {},
["Surin Province, Thailand"] = {},
["Tak Province, Thailand"] = {},
["Trang Province, Thailand"] = {},
["Trat Province, Thailand"] = {},
["Ubon Ratchathani Province, Thailand"] = {},
["Udon Thani Province, Thailand"] = {},
["Uthai Thani Province, Thailand"] = {},
["Uttaradit Province, Thailand"] = {},
["Yala Province, Thailand"] = {},
["Yasothon Province, Thailand"] = {},
}
-- provinces of Thailand
export.thailand_group = {
key_to_placename = make_key_to_placename(", Thailand$", " Province$"),
placename_to_key = make_placename_to_key(", Thailand", " Province"),
default_container = "Thái Lan",
default_placetype = "province",
default_divs = "districts",
-- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province'
default_wp = "%e province",
data = export.thailand_provinces,
}
export.turkey_provinces = {
["Adana Province, Turkey"] = {}, -- code 01
["Adıyaman Province, Turkey"] = {}, -- code 02
["Afyonkarahisar Province, Turkey"] = {}, -- code 03
["Ağrı Province, Turkey"] = {}, -- code 04
["Amasya Province, Turkey"] = {}, -- code 05
["Ankara Province, Turkey"] = {}, -- code 06
["Antalya Province, Turkey"] = {}, -- code 07
["Artvin Province, Turkey"] = {}, -- code 08
["Aydın Province, Turkey"] = {}, -- code 09
["Balıkesir Province, Turkey"] = {}, -- code 10
["Bilecik Province, Turkey"] = {}, -- code 11
["Bingöl Province, Turkey"] = {}, -- code 12
["Bitlis Province, Turkey"] = {}, -- code 13
["Bolu Province, Turkey"] = {}, -- code 14
["Burdur Province, Turkey"] = {}, -- code 15
["Bursa Province, Turkey"] = {}, -- code 16
["Çanakkale Province, Turkey"] = {}, -- code 17
["Çankırı Province, Turkey"] = {}, -- code 18
["Çorum Province, Turkey"] = {}, -- code 19
["Denizli Province, Turkey"] = {}, -- code 20
["Diyarbakır Province, Turkey"] = {}, -- code 21
["Edirne Province, Turkey"] = {}, -- code 22
["Elazığ Province, Turkey"] = {}, -- code 23
["Elâzığ Province, Turkey"] = {alias_of = "Elazığ Province, Turkey", display = true},
["Erzincan Province, Turkey"] = {}, -- code 24
["Erzurum Province, Turkey"] = {}, -- code 25
["Eskişehir Province, Turkey"] = {}, -- code 26
["Gaziantep Province, Turkey"] = {}, -- code 27
["Giresun Province, Turkey"] = {}, -- code 28
["Gümüşhane Province, Turkey"] = {}, -- code 29
["Hakkâri Province, Turkey"] = {}, -- code 30
["Hakkari Province, Turkey"] = {alias_of = "Hakkâri Province, Turkey", display = true},
["Hatay Province, Turkey"] = {}, -- code 31
["Isparta Province, Turkey"] = {}, -- code 32
["Mersin Province, Turkey"] = {}, -- code 33
-- ["Istanbul Province, Turkey"] = {}, -- code 34; this is coextensive with the city itself
["İzmir Province, Turkey"] = {}, -- code 35
["Izmir Province, Turkey"] = {alias_of = "İzmir Province, Turkey", display = true},
["Kars Province, Turkey"] = {}, -- code 36
["Kastamonu Province, Turkey"] = {}, -- code 37
["Kayseri Province, Turkey"] = {}, -- code 38
["Kırklareli Province, Turkey"] = {}, -- code 39
["Kırşehir Province, Turkey"] = {}, -- code 40
["Kocaeli Province, Turkey"] = {}, -- code 41
["Konya Province, Turkey"] = {}, -- code 42
["Kütahya Province, Turkey"] = {}, -- code 43
["Malatya Province, Turkey"] = {}, -- code 44
["Manisa Province, Turkey"] = {}, -- code 45
["Kahramanmaraş Province, Turkey"] = {}, -- code 46
["Mardin Province, Turkey"] = {}, -- code 47
["Muğla Province, Turkey"] = {}, -- code 48
["Muş Province, Turkey"] = {}, -- code 49
["Nevşehir Province, Turkey"] = {}, -- code 50
["Niğde Province, Turkey"] = {}, -- code 51
["Ordu Province, Turkey"] = {}, -- code 52
["Rize Province, Turkey"] = {}, -- code 53
["Sakarya Province, Turkey"] = {}, -- code 54
["Samsun Province, Turkey"] = {}, -- code 55
["Siirt Province, Turkey"] = {}, -- code 56
["Sinop Province, Turkey"] = {}, -- code 57
["Sivas Province, Turkey"] = {}, -- code 58
["Tekirdağ Province, Turkey"] = {}, -- code 59
["Tokat Province, Turkey"] = {}, -- code 60
["Trabzon Province, Turkey"] = {}, -- code 61
["Tunceli Province, Turkey"] = {}, -- code 62
["Şanlıurfa Province, Turkey"] = {}, -- code 63
["Uşak Province, Turkey"] = {}, -- code 64
["Van Province, Turkey"] = {}, -- code 65
["Yozgat Province, Turkey"] = {}, -- code 66
["Zonguldak Province, Turkey"] = {}, -- code 67
["Aksaray Province, Turkey"] = {}, -- code 68
["Bayburt Province, Turkey"] = {}, -- code 69
["Karaman Province, Turkey"] = {}, -- code 70
["Kırıkkale Province, Turkey"] = {}, -- code 71
["Batman Province, Turkey"] = {}, -- code 72
["Şırnak Province, Turkey"] = {}, -- code 73
["Bartın Province, Turkey"] = {}, -- code 74
["Ardahan Province, Turkey"] = {}, -- code 75
["Iğdır Province, Turkey"] = {}, -- code 76
["Yalova Province, Turkey"] = {}, -- code 77
["Karabük Province, Turkey"] = {}, -- code 78
["Kilis Province, Turkey"] = {}, -- code 79
["Osmaniye Province, Turkey"] = {}, -- code 80
["Düzce Province, Turkey"] = {}, -- code 81
}
-- provinces of Turkey
export.turkey_group = {
key_to_placename = make_key_to_placename(", Turkey$", " Province$"),
placename_to_key = make_placename_to_key(", Turkey", " Province"),
default_container = "Thổ Nhĩ Kỳ",
default_placetype = "province",
default_divs = "districts",
data = export.turkey_provinces,
}
export.ukraine_oblasts = {
["Cherkasy Oblast, Ukraine"] = {}, -- capital [[Cherkasy]], license plate prefix CA, IA
["Chernihiv Oblast, Ukraine"] = {}, -- capital [[Chernihiv]], license plate prefix CB, IB
["Chernivtsi Oblast, Ukraine"] = {}, -- capital [[Chernivtsi]], license plate prefix CE, IE
-- apparently will be renamed to 'Dnipro Oblast'
["Dnipropetrovsk Oblast, Ukraine"] = {}, -- capital [[Dnipro]], license plate prefix AE, KE
["Donetsk Oblast, Ukraine"] = {}, -- capital ''[[Donetsk]] ([[Kramatorsk]])'', license plate prefix AH, KH
["Ivano-Frankivsk Oblast, Ukraine"] = {}, -- capital [[Ivano-Frankivsk]], license plate prefix AT, KT
["Kharkiv Oblast, Ukraine"] = {}, -- capital [[Kharkiv]], license plate prefix AX, KX
["Kherson Oblast, Ukraine"] = {}, -- capital ''[[Kherson]]'', license plate prefix ''BT, HT''
["Khmelnytskyi Oblast, Ukraine"] = {}, -- capital [[Khmelnytskyi]], license plate prefix BX, HX
-- apparently will be renamed to 'Kropyvnytskyi Oblast'
["Kirovohrad Oblast, Ukraine"] = {}, -- capital [[Kropyvnytskyi]], license plate prefix BA, HA
["Kyiv Oblast, Ukraine"] = {}, -- capital [[Kyiv]], license plate prefix AI, KI
["Kiev Oblast, Ukraine"] = {alias_of = "Kyiv Oblast, Ukraine", display = true},
["Luhansk Oblast, Ukraine"] = {}, -- capital ''[[Luhansk]] ([[Sievierodonetsk]])'', license plate prefix BB, HB
["Lviv Oblast, Ukraine"] = {}, -- capital [[Lviv]], license plate prefix BC, HC
["Mykolaiv Oblast, Ukraine"] = {}, -- capital [[Mykolaiv]], license plate prefix BE, HE
["Odesa Oblast, Ukraine"] = {}, -- capital [[Odesa]], license plate prefix BH, HH
["Odessa Oblast, Ukraine"] = {alias_of = "Odesa Oblast, Ukraine", display = true},
["Poltava Oblast, Ukraine"] = {}, -- capital [[Poltava]], license plate prefix BI, HI
["Rivne Oblast, Ukraine"] = {}, -- capital [[Rivne]], license plate prefix BK, HK
["Sumy Oblast, Ukraine"] = {}, -- capital [[Sumy]], license plate prefix BM, HM
["Ternopil Oblast, Ukraine"] = {}, -- capital [[Ternopil]], license plate prefix BO, HO
["Vinnytsia Oblast, Ukraine"] = {}, -- capital [[Vinnytsia]], license plate prefix AB, KB
["Volyn Oblast, Ukraine"] = {}, -- capital [[Lutsk]], license plate prefix AC, KC
["Zakarpattia Oblast, Ukraine"] = {}, -- capital [[Uzhhorod]], license plate prefix AO, KO
["Zaporizhzhia Oblast, Ukraine"] = {}, -- capital ''[[Zaporizhzhia]]'', license plate prefix AP, KP
["Zaporizhia Oblast, Ukraine"] = {alias_of = "Zaporizhzhia Oblast, Ukraine", display = true},
["Zhytomyr Oblast, Ukraine"] = {}, -- capital [[Zhytomyr]], license plate prefix AM, KM
}
-- oblasts of Ukraine
export.ukraine_group = {
key_to_placename = make_key_to_placename(", Ukraine$", " Oblast$"),
placename_to_key = make_placename_to_key(", Ukraine", " Oblast"),
default_container = "Ukraina",
default_placetype = "oblast",
default_divs = {"raions", "hromadas"},
data = export.ukraine_oblasts,
}
export.united_kingdom_constituent_countries = {
["England"] = {divs = {
"counties",
"districts",
{type = "local government districts", cat_as = "districts"},
{
type = "local government districts with borough status",
cat_as = {"districts", "boroughs"},
},
{type = "boroughs", cat_as = {"districts", "boroughs"}},
{type = "civil parishes", container_parent_type = false},
}},
["Northern Ireland"] = {
placetype = {"constituent country", "province", "quốc gia"},
divs = {"counties", "districts"},
},
["Scotland"] = {divs = {
{type = "council areas", container_parent_type = false},
"districts",
}},
["Wales"] = {divs = {
"counties",
{type = "county boroughs", container_parent_type = false},
{type = "communities", container_parent_type = false},
{type = "Welsh communities", cat_as = {{type = "communities", container_parent_type = false}}},
}},
}
-- constituent countries and provinces of the United Kingdom
export.united_kingdom_group = {
placename_to_key = false,
default_container = "United Kingdom",
default_placetype = {"constituent country", "quốc gia"},
addl_divs = {
"traditional counties",
{type = "historical counties", cat_as = "traditional counties"},
},
-- Don't create categories like 'Category:en:Towns in the United Kingdom'
-- or 'Category:en:Places in the United Kingdom'.
default_no_container_cat = true,
data = export.united_kingdom_constituent_countries,
}
export.england_counties = {
-- NOTE: We used to have various other "no longer" counties commented out, which seems to refer to counties that
-- existed officially at some point between 1889 and 1974, which I have removed. I have only kept the three
-- ceremonial counties that existed from 1974 (when ceremonial counties were created) to 1996, as well as those
-- still considered "historic counties" per [[w:Historic counties of England]].
-- ["Avon, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996)
["Bedfordshire, England"] = {},
["Berkshire, England"] = {},
-- ["Brighton and Hove, England"] = {}, -- city
-- ["Bristol, England"] = {}, -- city
["Buckinghamshire, England"] = {},
["Cambridgeshire, England"] = {},
["Cheshire, England"] = {},
-- ["Cleveland, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996)
["Cornwall, England"] = {},
-- ["Cumberland, England"] = {}, -- no longer (historic county)
["Cumbria, England"] = {},
["Derbyshire, England"] = {},
["Devon, England"] = {},
["Dorset, England"] = {},
["County Durham, England"] = {},
["East Sussex, England"] = {},
["Essex, England"] = {},
["Gloucestershire, England"] = {},
["Greater London, England"] = {},
["Greater Manchester, England"] = {},
["Hampshire, England"] = {},
["Herefordshire, England"] = {},
["Hertfordshire, England"] = {},
-- ["Humberside, England"] = {}, -- no longer (1974 to 1996)
-- ["Huntingdonshire, England"] = {}, -- no longer (historic county)
["Isle of Wight, England"] = {the = true},
["Kent, England"] = {},
["Lancashire, England"] = {},
["Leicestershire, England"] = {},
["Lincolnshire, England"] = {},
["Merseyside, England"] = {},
-- ["Middlesex, England"] = {}, -- no longer (historic county)
["Norfolk, England"] = {},
["Northamptonshire, England"] = {},
["Northumberland, England"] = {},
["North Yorkshire, England"] = {},
["Nottinghamshire, England"] = {},
["Oxfordshire, England"] = {},
["Rutland, England"] = {},
["Shropshire, England"] = {},
["Somerset, England"] = {},
["South Humberside, England"] = {},
["South Yorkshire, England"] = {},
["Staffordshire, England"] = {},
["Suffolk, England"] = {},
["Surrey, England"] = {},
-- ["Sussex, England"] = {}, -- no longer (historic county)
["Tyne and Wear, England"] = {},
["Warwickshire, England"] = {},
["West Midlands, England"] = {the = true, wp = "%l (county)"},
-- ["Westmorland, England"] = {}, -- no longer (historic county)
["West Sussex, England"] = {},
["West Yorkshire, England"] = {},
["Wiltshire, England"] = {},
["Worcestershire, England"] = {},
-- ["Yorkshire, England"] = {}, -- no longer (historic county)
["East Riding of Yorkshire, England"] = {the = true},
}
-- counties of England
export.england_group = {
default_container = {key = "England", placetype = "constituent country"},
default_placetype = "county",
default_divs = {
"districts",
{type = "local government districts", cat_as = "districts"},
{
type = "local government districts with borough status",
cat_as = {"districts", "boroughs"},
},
{type = "boroughs", cat_as = {"districts", "boroughs"}},
"civil parishes",
},
data = export.england_counties,
}
export.northern_ireland_counties = {
["County Antrim, Northern Ireland"] = {},
["County Armagh, Northern Ireland"] = {},
["City of Belfast, Northern Ireland"] = {the = true, is_city = true, wp = "Belfast"},
["County Down, Northern Ireland"] = {},
["County Fermanagh, Northern Ireland"] = {},
["County Londonderry, Northern Ireland"] = {},
["City of Derry, Northern Ireland"] = {the = true, is_city = true, wp = "Derry"},
["County Tyrone, Northern Ireland"] = {},
}
-- counties of Northern Ireland
export.northern_ireland_group = {
key_to_placename = make_irish_type_key_to_placename(", Northern Ireland$"),
placename_to_key = make_irish_type_placename_to_key(", Northern Ireland"),
default_container = {key = "Northern Ireland", placetype = "constituent country"},
default_placetype = "county",
data = export.northern_ireland_counties,
}
export.scotland_council_areas = {
["Aberdeenshire, Scotland"] = {},
["Angus, Scotland"] = {wp = "%l, %c"},
["Argyll and Bute, Scotland"] = {},
["City of Aberdeen, Scotland"] = {the = true, wp = "Aberdeen"},
["Aberdeen"] = {alias_of = "City of Aberdeen, Scotland"},
["Aberdeen City"] = {alias_of = "City of Aberdeen, Scotland"},
["City of Dundee, Scotland"] = {the = true, wp = "Dundee"},
["Dundee"] = {alias_of = "City of Dundee, Scotland"},
["Dundee City"] = {alias_of = "City of Dundee, Scotland"},
["City of Edinburgh, Scotland"] = {the = true, wp = "%l council area"},
["Edinburgh"] = {alias_of = "City of Edinburgh, Scotland"},
["City of Glasgow, Scotland"] = {the = true, wp = "Glasgow"},
["Glasgow"] = {alias_of = "City of Glasgow, Scotland"},
["Clackmannanshire, Scotland"] = {},
["Dumfries and Galloway, Scotland"] = {},
["East Ayrshire, Scotland"] = {},
["East Dunbartonshire, Scotland"] = {},
["East Lothian, Scotland"] = {},
["East Renfrewshire, Scotland"] = {},
["Falkirk, Scotland"] = {wp = "%l council area"},
["Fife, Scotland"] = {},
["Highland, Scotland"] = {wp = "%l council area"},
["Inverclyde, Scotland"] = {},
["Midlothian, Scotland"] = {},
["Moray, Scotland"] = {},
["North Ayrshire, Scotland"] = {},
["North Lanarkshire, Scotland"] = {},
["Orkney Islands, Scotland"] = {the = true},
["Perth and Kinross, Scotland"] = {},
["Renfrewshire, Scotland"] = {},
["Scottish Borders, Scotland"] = {the = true},
["Shetland Islands, Scotland"] = {the = true},
["South Ayrshire, Scotland"] = {},
["South Lanarkshire, Scotland"] = {},
["Stirling, Scotland"] = {wp = "%l council area"},
["West Dunbartonshire, Scotland"] = {},
["West Lothian, Scotland"] = {},
["Western Isles, Scotland"] = {the = true, wp = "Outer Hebrides"},
["Na h-Eileanan Siar, Scotland"] = {alias_of = "Western Isles, Scotland"},
}
-- council areas of Scotland
export.scotland_group = {
default_container = {key = "Scotland", placetype = "constituent country"},
default_placetype = "council area",
data = export.scotland_council_areas,
}
export.wales_principal_areas = {
["Blaenau Gwent, Wales"] = {},
["Bridgend, Wales"] = {wp = "%l County Borough"},
["Caerphilly, Wales"] = {wp = "%l County Borough"},
-- ["Cardiff, Wales"] = {placetype = "thành phố"},
["Carmarthenshire, Wales"] = {placetype = "county"},
["Ceredigion, Wales"] = {placetype = "county"},
["Conwy, Wales"] = {wp = "%l County Borough"},
["Denbighshire, Wales"] = {placetype = "county"},
["Flintshire, Wales"] = {placetype = "county"},
["Gwynedd, Wales"] = {placetype = "county"},
["Isle of Anglesey, Wales"] = {the = true, placetype = "county"},
["Anglesey, Wales"] = {alias_of = "Isle of Anglesey, Wales"}, -- differs in "the"
["Merthyr Tydfil, Wales"] = {wp = "%l County Borough"},
["Monmouthshire, Wales"] = {placetype = "county"},
["Neath Port Talbot, Wales"] = {},
-- ["Newport, Wales"] = {placetype = "thành phố", wp = "%l, %c"},
["Pembrokeshire, Wales"] = {placetype = "county"},
["Powys, Wales"] = {placetype = "county"},
["Rhondda Cynon Taf, Wales"] = {},
-- ["Swansea, Wales"] = {placetype = "thành phố"},
["Torfaen, Wales"] = {},
["Vale of Glamorgan, Wales"] = {the = true},
["Wrexham, Wales"] = {wp = "%l County Borough"},
}
-- principal areas (cities, counties and county boroughs) of Wales
export.wales_group = {
default_container = {key = "Wales", placetype = "constituent country"},
default_placetype = "county borough",
data = export.wales_principal_areas,
}
export.united_states_states = {
["Alabama, USA"] = {},
["Alaska, USA"] = {divs = {
{type = "boroughs", container_parent_type = "counties"},
{type = "borough seats", container_parent_type = "county seats"},
}},
["Arizona, USA"] = {},
["Arkansas, USA"] = {},
["California, USA"] = {},
["Colorado, USA"] = {divs = {"counties", "county seats", "municipalities"}},
["Connecticut, USA"] = {divs = {"counties", "county seats", "municipalities"}},
["Delaware, USA"] = {},
["Florida, USA"] = {},
["Georgia, USA"] = {wp = "%l (U.S. state)"},
["Hawaii, USA"] = {addl_parents = {"Polynesia"}},
["Idaho, USA"] = {},
["Illinois, USA"] = {},
["Indiana, USA"] = {},
["Iowa, USA"] = {},
["Kansas, USA"] = {},
["Kentucky, USA"] = {},
["Louisiana, USA"] = {divs = {
{type = "parishes", container_parent_type = "counties"},
{type = "parish seats", container_parent_type = "county seats"},
}},
["Maine, USA"] = {},
["Maryland, USA"] = {},
["Massachusetts, USA"] = {},
["Michigan, USA"] = {},
["Minnesota, USA"] = {},
["Mississippi, USA"] = {},
["Missouri, USA"] = {},
["Montana, USA"] = {},
["Nebraska, USA"] = {},
["Nevada, USA"] = {},
["New Hampshire, USA"] = {},
["New Jersey, USA"] = {divs = {
"counties", "county seats",
{type = "boroughs", prep = "in"},
}},
["New Mexico, USA"] = {},
["New York, USA"] = {wp = "%l (state)"},
["North Carolina, USA"] = {},
["North Dakota, USA"] = {},
["Ohio, USA"] = {},
["Oklahoma, USA"] = {},
["Oregon, USA"] = {},
["Pennsylvania, USA"] = {divs = {
"counties", "county seats",
{type = "boroughs", prep = "in"},
}},
["Rhode Island, USA"] = {},
["South Carolina, USA"] = {},
["South Dakota, USA"] = {},
["Tennessee, USA"] = {},
["Texas, USA"] = {},
["Utah, USA"] = {},
["Vermont, USA"] = {},
["Virginia, USA"] = {},
["Washington, USA"] = {wp = "%l (state)"},
["West Virginia, USA"] = {},
["Wisconsin, USA"] = {},
["Wyoming, USA"] = {},
}
-- states of the United States
export.united_states_group = {
placename_to_key = make_placename_to_key(", USA"),
default_container = "Hoa Kỳ",
default_placetype = "state",
default_divs = {"counties", "county seats"},
addl_divs = {
{type = "census-designated places", prep = "in"},
{type = "unincorporated communities", prep = "in"},
},
data = export.united_states_states,
}
export.vietnam_provinces = {
-- [[Northeast (Vietnam)|Northeast]] region
["Bắc Giang, Việt Nam"] = {}, -- capital [[Bắc Giang]]
["Bắc Kạn, Việt Nam"] = {}, -- capital [[Bắc Kạn]]
["Cao Bằng, Việt Nam"] = {}, -- capital [[Cao Bằng]]
["Hà Giang, Việt Nam"] = {}, -- capital [[Hà Giang]]
["Lạng Sơn, Việt Nam"] = {}, -- capital [[Lạng Sơn]]
["Phú Thọ, Việt Nam"] = {}, -- capital [[Việt Trì]]
["Quảng Ninh, Việt Nam"] = {}, -- capital [[Hạ Long]]
["Thái Nguyên, Việt Nam"] = {}, -- capital [[Thái Nguyên]]
["Tuyên Quang, Việt Nam"] = {}, -- capital [[Tuyên Quang]]
-- [[Northwest (Vietnam)|Northwest]] region
["Lào Cai, Việt Nam"] = {}, -- capital [[Lào Cai]]
["Yên Bái, Việt Nam"] = {}, -- capital [[Yên Bái]]
["Điện Biên, Việt Nam"] = {}, -- capital [[Điện Biên Phủ]]
["Hòa Bình, Việt Nam"] = {},
["Lai Châu, Việt Nam"] = {}, -- capital [[Lai Châu]]
["Sơn La, Việt Nam"] = {}, -- capital [[Sơn La]]
-- [[Red River Delta]] region
["Bắc Ninh, Việt Nam"] = {}, -- capital [[Bắc Ninh]]
["Hà Nam, Việt Nam"] = {}, -- capital [[Phủ Lý]]
["Hải Dương, Việt Nam"] = {}, -- capital [[Hải Dương]]
["Hưng Yên, Việt Nam"] = {}, -- capital [[Hưng Yên]]
["Nam Định, Việt Nam"] = {}, -- capital [[Nam Định]]
["Ninh Bình, Việt Nam"] = {}, -- capital [[Ninh Bình|Hoa Lư]]
["Thái Bình, Việt Nam"] = {}, -- capital [[Thái Bình]]
["Vĩnh Phúc, Việt Nam"] = {}, -- capital [[Vĩnh Yên]]
-- ["Hanoi"] = {placetype = {"municipality", "thành phố"}}, -- capital [[Hoàn Kiếm district]]
-- ["Haiphong"] = {placetype = {"municipality", "thành phố"}}, -- capital [[Hồng Bàng district]]
-- [[North Central Coast]] region
["Hà Tĩnh, Việt Nam"] = {}, -- capital [[Hà Tĩnh]]
["Nghệ An, Việt Nam"] = {}, -- capital [[Vinh]]
["Quảng Bình, Việt Nam"] = {}, -- capital [[Đồng Hới]]
["Quảng Trị, Việt Nam"] = {}, -- capital [[Đông Hà]]
["Thanh Hóa, Việt Nam"] = {},
-- ["Hue"] = {placetype = {"municipality", "thành phố"}, wp = "Huế"}, -- capital [[Thuận Hoá district]]
-- [[Central Highlands (Vietnam)|Central Highlands]] region
["Đắk Lắk, Việt Nam"] = {}, -- capital [[Buôn Ma Thuột]]
["Đăk Nông, Việt Nam"] = {}, -- capital [[Gia Nghĩa]]
["Gia Lai, Việt Nam"] = {}, -- capital [[Pleiku]]
["Kon Tum, Việt Nam"] = {}, -- capital [[Kon Tum]]
["Lâm Đồng, Việt Nam"] = {}, -- capital [[Đà Lạt]]
-- [[South Central Coast]] region
["Bình Định, Việt Nam"] = {}, -- capital [[Quy Nhon]]
["Bình Thuận, Việt Nam"] = {}, -- capital [[Phan Thiết]]
["Khánh Hòa, Việt Nam"] = {},
["Ninh Thuận, Việt Nam"] = {}, -- capital [[Phan Rang–Tháp Chàm]]
["Phú Yên, Việt Nam"] = {}, -- capital [[Tuy Hoà]]
["Quảng Nam, Việt Nam"] = {}, -- capital [[Tam Kỳ]]
["Quảng Ngãi, Việt Nam"] = {}, -- capital [[Quảng Ngãi]]
-- ["Da Nang"] = {placetype = {"municipality", "thành phố"}}, -- capital [[Hải Châu district]]
-- [[Southeast (Vietnam)|Southeast]] region
["Bà Rịa–Vũng Tàu, Việt Nam"] = {}, -- capital [[Bà Rịa]]
["Bình Dương, Việt Nam"] = {}, -- capital [[Thủ Dầu Một]]
["Bình Phước, Việt Nam"] = {}, -- capital [[Đồng Xoài]]
["Đồng Nai, Việt Nam"] = {}, -- capital [[Biên Hoà]]
["Tây Ninh, Việt Nam"] = {}, -- capital [[Tây Ninh]]
-- ["Thành phố Hồ Chí Minh"] = {placetype = {"municipality", "thành phố"}}, -- capital [[District 1, Thành phố Hồ Chí Minh|'''District 1''']]
-- [[Mekong Delta]] region
["An Giang, Việt Nam"] = {}, -- capital [[Long Xuyên]]
["Bạc Liêu, Việt Nam"] = {}, -- capital [[Bạc Liêu]]
["Bến Tre, Việt Nam"] = {}, -- capital [[Bến Tre]]
["Cà Mau, Việt Nam"] = {}, -- capital [[Cà Mau]]
["Đồng Tháp, Việt Nam"] = {}, -- capital [[Cao Lãnh City|Cao Lãnh]]
["Hậu Giang, Việt Nam"] = {}, -- capital [[Vị Thanh]]
["Kiên Giang, Việt Nam"] = {}, -- capital [[Rạch Giá]]
["Long An, Việt Nam"] = {}, -- capital [[Tân An]]
["Sóc Trăng, Việt Nam"] = {}, -- capital [[Sóc Trăng]]
["Tiền Giang, Việt Nam"] = {}, -- capital [[Mỹ Tho]]
["Trà Vinh, Việt Nam"] = {}, -- capital [[Trà Vinh]]
["Vĩnh Long, Việt Nam"] = {}, -- capital [[Vĩnh Long]]
-- ["Can Tho"] = {placetype = {"municipality", "thành phố"}, wp = "Cần Thơ"}, -- capital [[Ninh Kiều district]]
}
-- provinces of Vietnam
export.vietnam_group = {
key_to_placename = make_key_to_placename(", Việt Nam$", "$"),
placename_to_key = make_placename_to_key(", Việt Nam", ""),
default_container = "Việt Nam",
default_placetype = "tỉnh",
-- There may not be enough districts to subcategorize like this.
-- default_divs = "districts",
-- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province'
default_wp = "%e",
data = export.vietnam_provinces,
}
-----------------------------------------------------------------------------------
-- City data --
-----------------------------------------------------------------------------------
export.australia_cities = {
["Adelaide"] = {container = "South Australia"}, -- 1,450,000 (Agglomeration)
["Brisbane"] = {container = "Queensland"}, -- 3,450,000 (Conglomeration; including the Gold Coast [750,997 2024 estiamte])
["Canberra"] = {container = {key = "Lãnh thổ Thủ đô Úc, Úc", placetype = "territory"}}, -- 510,641 (2024 estimate)
["Melbourne"] = {container = "Victoria"}, -- 5,200,000 (Agglomeration)
["Newcastle, New South Wales"] = {container = "New South Wales", wp = "%l, %c"}, -- 534,033 (2024 estimate)
["Newcastle"] = {alias_of = "Newcastle, New South Wales"},
["Perth"] = {container = "Western Australia"}, -- 2,350,000 (Agglomeration)
["Sydney"] = {container = "New South Wales"}, -- 5,100,000 (Agglomeration)
}
export.australia_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Úc", "state"),
default_placetype = "thành phố",
data = export.australia_cities,
}
export.brazil_cities = {
-- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01.
["São Paulo"] = {container = "São Paulo"}, -- 22,600,000 (Consolidated Urban Area; including Guarulhos)
["Sao Paulo"] = {alias_of = "São Paulo", display = true},
["Rio de Janeiro"] = {container = "Rio de Janeiro"}, -- 13,600,000 (Consolidated Urban Area)
["Belo Horizonte"] = {container = "Minas Gerais"}, -- 5,300,000
["Recife"] = {container = "Pernambuco"}, -- 4,100,000
["Porto Alegre"] = {container = "Rio Grande do Sul"}, -- 3,950,000 (Consolidated Urban Area)
["Brasília"] = {container = "Distrito Federal"}, -- 3,850,000
["Brasilia"] = {alias_of = "Brasília", display = true},
["Fortaleza"] = {container = "Ceará"}, -- 3,825,000
["Salvador"] = {container = "Bahia", wp = "%l, %c", commonscat = "%l (%c)"}, -- 3,400,000
["Curitiba"] = {container = "Paraná"}, -- 3,375,000
["Campinas"] = {container = "São Paulo"}, -- 3,250,000
["Goiânia"] = {container = "Goiás"}, -- 2,525,000
["Goiania"] = {alias_of = "Goiânia", display = true},
["Manaus"] = {container = "Amazonas"}, -- 2,275,000
["Belém"] = {container = "Pará"}, -- 2,200,000
["Belem"] = {alias_of = "Belém", display = true},
["Vitória"] = {container = "Espírito Santo", wp = "%l, %c"}, -- 1,870,000
["Vitoria"] = {alias_of = "Vitória", display = true},
["Santos"] = {container = "São Paulo", wp = "%l, %c"}, -- 1,760,000
["São Luís"] = {container = "Maranhão", wp = "%l, %c"}, -- 1,530,000
["Sao Luis"] = {alias_of = "São Luís", display = true},
["Natal"] = {container = "Rio Grande do Norte", wp = "%l, %c"}, -- 1,360,000
["Florianópolis"] = {container = "Santa Catarina"}, -- 1,260,000
["Florianopolis"] = {alias_of = "Florianópolis", display = true},
["Maceió"] = {container = "Alagoas"}, -- 1,220,000
["Maceio"] = {alias_of = "Maceió", display = true},
["João Pessoa"] = {container = "Paraíba", wp = "%l, %c"}, -- 1,210,000
["Joao Pessoa"] = {alias_of = "João Pessoa", display = true},
["São José dos Campos"] = {container = "São Paulo"}, -- 1,090,000
["Sao Jose dos Campos"] = {alias_of = "São José dos Campos", display = true},
["Londrina"] = {container = "Paraná"}, -- 1,050,000
["Teresina"] = {container = "Piauí"}, -- 1,040,000
}
export.brazil_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Brazil", "state"),
default_placetype = "thành phố",
data = export.brazil_cities,
}
export.canada_cities = {
-- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01.
["Toronto"] = {container = "Ontario"}, -- 7,850,000 (Consolidated Urban Area; including Hamilton)
["Montreal"] = {container = "Quebec"}, -- 4,500,000 (Consolidated Urban Area)
["Vancouver"] = {container = "British Columbia"}, -- 3,175,000 (Consolidated Urban Area)
["Calgary"] = {container = "Alberta"}, -- 1,510,000 (Consolidated Urban Area)
["Edmonton"] = {container = "Alberta"}, -- 1,460,000 (Consolidated Urban Area)
["Ottawa"] = {container = "Ontario"}, -- 1,390,000 (Consolidated Urban Area)
["Quebec City"] = {container = "Quebec"}, -- 839,311 metro per Wikipedia (2021 census)
["Winnipeg"] = {container = "Manitoba"}, -- 834,678 metro per Wikipedia (2021 census)
["Hamilton"] = {container = "Ontario", wp = "%l, %c"}, -- 785,184 metro per Wikipedia (2021 census)
["Kitchener"] = {container = "Ontario", wp = "%l, %c"}, -- 575,847 metro per Wikipedia (2021 census)
}
export.canada_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Canada", "province"),
default_placetype = "thành phố",
data = export.canada_cities,
}
export.france_cities = {
-- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01.
["Paris"] = {container = "Île-de-France"}, -- 11,500,000 (Conglomeration)
["Lyon"] = {container = "Auvergne-Rhône-Alpes"}, -- 2,050,000 (Conglomeration)
["Lyons"] = {alias_of = "Lyon", display = true},
["Marseille"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 1,710,000 (Conglomeration)
["Marseilles"] = {alias_of = "Marseille", display = true},
["Lille"] = {container = "Hauts-de-France"}, -- 1,320,000 (Conglomeration)
["Bordeaux"] = {container = "Nouvelle-Aquitaine"}, -- 1,160,000 (Conglomeration)
["Toulouse"] = {container = "Occitania"}, -- 1,150,000 (Conglomeration)
["Nice"] = {container = "Provence-Alpes-Côte d'Azur"},
["Nantes"] = {container = "Pays de la Loire"},
["Strasbourg"] = {container = "Grand Est"},
["Rennes"] = {container = "Brittany"},
}
export.france_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", France", "region"),
default_placetype = "thành phố",
data = export.france_cities,
}
export.germany_cities = {
-- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01.
-- listed under Rhein-Ruhr Area, total population 10,900,000 (Consolidated Urban Area)
["Cologne"] = {container = "North Rhine-Westphalia"},
["Köln"] = {alias_of = "Cologne", display = true},
["Düsseldorf"] = {container = "North Rhine-Westphalia"},
["Dusseldorf"] = {alias_of = "Düsseldorf", display = true},
["Dortmund"] = {container = "North Rhine-Westphalia"},
["Essen"] = {container = "North Rhine-Westphalia"},
["Duisberg"] = {container = "North Rhine-Westphalia"},
["Berlin"] = {}, -- 4,700,000
["Frankfurt"] = {container = "Hesse"}, -- 3,225,000
["Frankfurt am Main"] = {alias_of = "Frankfurt"}, -- not a display alias as it's longer
["Hamburg"] = {}, -- 2,900,000
["Munich"] = {container = "Bavaria"}, -- 2,300,000
["Stuttgart"] = {container = "Baden-Württemberg"}, -- 2,300,000
["Mannheim"] = {container = "Baden-Württemberg"}, -- 1,550,000
["Nuremberg"] = {container = "Bavaria"}, -- 1,120,000
["Hanover"] = {"Lower Saxony"}, -- 1,090,000
["Bielefeld"] = {container = "North Rhine-Westphalia"}, -- 1,080,000
["Leipzig"] = {container = "Saxony"}, -- 1,080,000
["Aachen"] = {container = "North Rhine-Westphalia"}, -- 1,000,000
["Aix-la-Chapelle"] = {alias_of = "Aachen"}, -- historical; not a display alias
["Bremen"] = {},
}
export.germany_cities_group = {
default_container = "Đức",
canonicalize_key_container = make_canonicalize_key_container(", Germany", "state"),
default_placetype = "thành phố",
data = export.germany_cities,
}
export.india_cities = {
-- This lists the 65 metro areas per Demographia's 2023 estimates, as found in
-- [[w:List_of_million-plus_urban_agglomerations_in_India]]. The last census in India (as of April 2025) was
-- conducted in 2011, and the results are not accurate any more.
["Delhi"] = {container = {key = "Delhi, India", placetype = "union territory"}}, -- 31,190,000
["Mumbai"] = {container = "Maharashtra"}, -- 25,189,000
["Kolkata"] = {container = "West Bengal"}, -- 21,747,000
["Bangalore"] = {container = "Karnataka", wp = "Bengaluru"}, -- 15,257,000
["Bengaluru"] = {alias_of = "Bangalore"},
["Chennai"] = {container = "Tamil Nadu"}, -- 11,570,000
["Hyderabad"] = {container = "Telangana"}, -- 9,797,000
["Ahmedabad"] = {container = "Gujarat"}, -- 8,006,000
["Pune"] = {container = "Maharashtra"}, -- 6,819,000
["Surat"] = {container = "Gujarat"}, -- 6,601,000
["Lucknow"] = {container = "Uttar Pradesh"}, -- 4,661,000
["Jaipur"] = {container = "Rajasthan"}, -- 4,360,000
["Kanpur"] = {container = "Uttar Pradesh"}, -- 4,350,000
["Indore"] = {container = "Madhya Pradesh"}, -- 3,765,000
["Nagpur"] = {container = "Maharashtra"}, -- 3,493,000
["Patna"] = {container = "Bihar"}, -- 3,331,000
["Varanasi"] = {container = "Uttar Pradesh"}, -- 3,229,000
["Kozhikode"] = {container = "Kerala"}, -- 3,049,000
["Thiruvananthapuram"] = {container = "Kerala"}, -- 2,851,000
["Agra"] = {container = "Uttar Pradesh"}, -- 2,737,000
["Bhopal"] = {container = "Madhya Pradesh"}, -- 2,562,000
["Coimbatore"] = {container = "Tamil Nadu"}, -- 2,551,000
["Allahabad"] = {container = "Uttar Pradesh", wp = "Prayagraj"}, -- 2,438,000
["Prayagraj"] = {alias_of = "Allahabad"},
["Kochi"] = {container = "Kerala"}, -- 2,381,000
["Ludhiana"] = {container = "Punjab"}, -- 2,205,000
["Vadodara"] = {container = "Gujarat"}, -- 2,182,000
["Chandigarh"] = {container = {key = "Chandigarh, India", placetype = "union territory"}}, -- 2,168,000
["Madurai"] = {container = "Tamil Nadu"}, -- 2,048,000
["Meerut"] = {container = "Uttar Pradesh"}, -- 2,011,000
["Visakhapatnam"] = {container = "Andhra Pradesh"}, -- 2,005,000
["Jamshedpur"] = {container = "Jharkhand"}, -- 1,925,000
["Malappuram"] = {container = "Kerala"}, -- 1,868,000
["Nashik"] = {container = "Maharashtra"}, -- 1,810,000
["Asansol"] = {container = "West Bengal"}, -- 1,720,000
["Aligarh"] = {container = "Uttar Pradesh"}, -- 1,660,000
["Ranchi"] = {container = "Jharkhand"}, -- 1,638,000
["Thrissur"] = {container = "Kerala"}, -- 1,578,000
["Kollam"] = {container = "Kerala"}, -- 1,576,000
["Jabalpur"] = {container = "Madhya Pradesh"}, -- 1,533,000
["Dhanbad"] = {container = "Jharkhand"}, -- 1,503,000
["Jodhpur"] = {container = "Rajasthan"}, -- 1,497,000
["Aurangabad"] = {container = "Maharashtra"}, -- 1,490,000
["Chhatrapati Sambhajinagar"] = {alias_of = "Aurangabad"},
["Rajkot"] = {container = "Gujarat"}, -- 1,487,000
["Gwalior"] = {container = "Madhya Pradesh"}, -- 1,477,000
["Raipur"] = {container = "Chhattisgarh"}, -- 1,429,000
["Gorakhpur"] = {container = "Uttar Pradesh"}, -- 1,410,000
["Kannur"] = {container = "Kerala"}, -- 1,360,000
["Bareilly"] = {container = "Uttar Pradesh"}, -- 1,355,000
["Guwahati"] = {container = "Assam"}, -- 1,355,000
["Moradabad"] = {container = "Uttar Pradesh"}, -- 1,345,000
["Amritsar"] = {container = "Punjab"}, -- 1,313,000
["Mysore"] = {container = "Karnataka"}, -- 1,296,000
["Bhilai"] = {container = "Chhattisgarh"}, -- 1,293,000
["Durg-Bhilainagar"] = {alias_of = "Bhilai"},
["Durg-Bhilai"] = {alias_of = "Bhilai"},
["Durg"] = {alias_of = "Bhilai"},
["Bhilainagar"] = {alias_of = "Bhilai"},
["Vijayawada"] = {container = "Andhra Pradesh"}, -- 1,232,000
["Srinagar"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,212,000
["Salem"] = {container = "Tamil Nadu", wp = "%l, %c"}, -- 1,189,000
["Kota"] = {container = "Rajasthan"}, -- 1,172,000
["Jalandhar"] = {container = "Punjab"}, -- 1,165,000
["Saharanpur"] = {container = "Uttar Pradesh"}, -- 1,152,000
["Dehradun"] = {container = "Uttarakhand"}, -- 1,136,000
["Tiruchirappalli"] = {container = "Tamil Nadu"}, -- 1,131,000
["Bhubaneswar"] = {container = "Odisha"}, -- 1,112,000
["Jammu"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,103,000
["Solapur"] = {container = "Maharashtra"}, -- 1,082,000
["Hubli-Dharwad"] = {container = "Karnataka", wp = "Hubli–Dharwad"}, -- 1,062,000; wp with en dash
["Hubli"] = {alias_of = "Hubli-Dharwad"},
["Dharwad"] = {alias_of = "Hubli-Dharwad"},
["Puducherry"] = {container = {key = "Puducherry, India", placetype = "union territory"}}, -- 1,024,000
["Pondicherry"] = {alias_of = "Puducherry", display = true},
-- satellite/secondary cities of metro area (none in citypopulation.de)
["Ghaziabad"] = {container = "Uttar Pradesh"}, -- 1,729,000 city, 2,358,525 urban agglomeration per 2011 census; 3,406,061 2025 estimate from official website; part of Delhi metro area
["Faridabad"] = {container = "Haryana"}, -- 1,414,050 city per 2011 census; part of Delhi metro area
["Thane"] = {container = "Maharashtra"}, -- 1,841,488 city per 2011 census; part of Mumbai metro area
["Kalyan-Dombivli"] = {container = "Maharashtra"}, -- 1,246,381 city per 2011 census; part of Mumbai metro area
["Kalyan-Dombivali"] = {alias_of = "Kalyan-Dombivli", display = true},
["Kalyan"] = {alias_of = "Kalyan-Dombivli"},
["Dombivli"] = {alias_of = "Kalyan-Dombivli"},
["Dombivali"] = {alias_of = "Kalyan-Dombivli"},
["Vasai-Virar"] = {container = "Maharashtra"}, -- 1,221,233 city per 2011 census; part of Mumbai metro area
["Vasai"] = {alias_of = "Vasai-Virar"},
["Virar"] = {alias_of = "Vasai-Virar"},
["Navi Mumbai"] = {container = "Maharashtra"}, -- 1,120,547 city per 2011 census; part of Mumbai metro area
["Howrah"] = {container = "West Bengal"}, -- 1,077,075 city ("metropolis"), 2,811,344 "metro" per 2011 census; part of Kolkata metro area
["Pimpri-Chinchwad"] = {container = "Maharashtra"}, -- 1,727,692 per 2011 census; part of Pune metro area
["Pimpri Chinchwad"] = {alias_of = "Pimpri-Chinchwad", display = true},
}
export.india_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", India", "state"),
default_placetype = "thành phố",
data = export.india_cities,
}
export.indonesia_cities = {
-- cities where the city proper has more than 1,000,000 people as of mid-2023 estimate
["Jakarta"] = {container = "Special Capital Region of Jakarta", divs = {
{type = "subdistricts", container_parent_type = false},
}},
["Surabaya"] = {container = "East Java"},
["Bekasi"] = {container = "West Java"}, -- part of Jakarta metro area
["Bandung"] = {container = "West Java"},
["Medan"] = {container = "North Sumatra"},
["Depok"] = {container = "West Java"}, -- part of Jakarta metro area
["Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area
["Palembang"] = {container = "South Sumatra"},
["Semarang"] = {container = "Central Java"},
["Makassar"] = {container = "South Sulawesi"},
["South Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area
["Batam"] = {container = "Riau Islands"},
["Bogor"] = {container = "West Java"}, -- part of Jakarta metro area
["Pekanbaru"] = {container = "Riau"},
["Bandar Lampung"] = {container = "Lampung"},
-- other metro areas over 1,000,000 people
["Padang"] = {container = "West Sumatra"},
["Samarinda"] = {container = "East Kalimantan"},
["Malang"] = {container = "East Java"},
["Yogyakarta"] = {container = "Special Region of Yogyakarta"},
["Denpasar"] = {container = "Bali"},
["Cirebon"] = {container = "West Java"},
["Surakarta"] = {container = "Central Java"},
["Banjarmasin"] = {container = "South Kalimantan"},
["Tasikmalaya"] = {container = "West Java"},
}
export.indonesia_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Indonesia", "province"),
default_placetype = "thành phố",
data = export.indonesia_cities,
}
export.italy_cities = {
-- Data per [[w:List_of_metropolitan_areas_of_Italy]]. There are several lists given; the most recent one, used
-- here, only gives estimates as of Jan 1, 2014.
["Milan"] = {container = "Lombardy"}, -- 6,623,798
["Naples"] = {container = "Campania"}, -- 5,294,546
["Rome"] = {container = "Lazio"}, -- 4,447,881
["Turin"] = {container = "Piedmont"}, -- 1,865,284
["Venice"] = {container = "Veneto"}, -- 1,645,900
["Florence"] = {container = "Tuscany"}, -- 1,485,030
["Bari"] = {container = "Apulia"}, -- 1,257,459
["Palermo"] = {container = "Sicily"}, -- 1,183,084
-- include a few just below 1,000,000 metro area that may be above it by now (depending on the definition).
["Catania"] = {container = "Sicily"}, -- 988,240
["Brescia"] = {container = "Lombardy"}, -- 924,090
["Genoa"] = {container = "Liguria"}, -- 861,318
}
export.italy_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Italy", "region"),
default_placetype = "thành phố",
data = export.italy_cities,
}
export.japan_cities = {
-- Population figures from [[w:List of cities in Japan]]. Metro areas from
-- [[w:List of metropolitan areas in Japan]].
["Tokyo"] = {keydesc = "[[Tokyo]] Metropolis, the [[capital city]] and a [[prefecture]] of [[Japan]] (which is a country in [[Asia]])",
placetype = {"thành phố", "tỉnh"},
divs = {
{type = "quận đặc biệt", container_parent_type = false},
{type = "thành phố", prep = "của"},
},
},
["Yokohama"] = {container = "Kanagawa"}, -- 3,697,894
["Ōsaka"] = {container = "Ōsaka"}, -- 2,668,586
["Osaka"] = {alias_of = "Ōsaka"},
["Nagoya"] = {container = "Aichi"}, -- 2,283,289
-- FIXME, Hokkaido is handled specially.
["Sapporo"] = {container = "Hokkaidō"}, -- 1,918,096
["Fukuoka"] = {container = "Fukuoka"}, -- 1,581,527
["Kobe"] = {container = "Hyōgo"}, -- 1,530,847
["Kyoto"] = {container = "Kyoto"}, -- 1,474,570
["Kawasaki"] = {container = "Kanagawa", wp = "%l, Kanagawa"}, -- 1,373,630
["Saitama"] = {container = "Saitama", wp = "%l (city)", commonscat = "%l, %c"}, -- 1,192,418
["Hiroshima"] = {container = "Hiroshima"}, -- 1,163,806
["Sendai"] = {container = "Miyagi"}, -- 1,029,552
-- the remaining cities are considered "central cities" in a 1,000,000+ metro area
-- (sometimes there is more than one central city in the area).
["Kitakyushu"] = {container = "Fukuoka"}, -- 986,998
["Chiba"] = {container = "Chiba", wp = "%l (city)", commonscat = "%l, %c"}, -- 938,695
["Sakai"] = {container = "Ōsaka"}, -- 835,333
["Niigata"] = {container = "Niigata", wp = "%l (city)", commonscat = "%l, %c"}, -- 813,053
["Hamamatsu"] = {container = "Shizuoka"}, -- 811,431
["Shizuoka"] = {container = "Shizuoka", wp = "%l (city)", commonscat = "%l, %c"}, -- 710,944
["Sagamihara"] = {container = "Kanagawa"}, -- 706,342
["Okayama"] = {container = "Okayama"}, -- 701,293
["Kumamoto"] = {container = "Kumamoto"}, -- 670,348
["Kagoshima"] = {container = "Kagoshima"}, -- 605,196
-- skipped 6 cities (Funabashi, Hachiōji, Kawaguchi, Himeji, Matsuyama, Higashiōsaka)
-- with population in the range 509k - 587k because not central cities in any
-- 1,000,000+ metro area.
["Utsunomiya"] = {container = "Tochigi"}, -- 507,833
}
export.japan_cities_group = {
default_container = "Nhật Bản",
canonicalize_key_container = make_canonicalize_key_container(", Nhật Bản", "prefecture"),
default_placetype = "thành phố",
data = export.japan_cities,
}
export.mexico_cities = {
["Mexico City"] = {}, -- its own state
["Monterrey"] = {container = "Nuevo León"},
["Guadalajara"] = {container = "Jalisco"},
["Puebla"] = {container = "Puebla", wp = "%l (city)"},
["Toluca"] = {container = "State of Mexico"},
["Tijuana"] = {container = "Baja California"},
-- Include the state in the category for León due to possible confusion with León, Spain.
["León, Guanajuato"] = {container = "Guanajuato", wp = "%l, %c"},
["León"] = {alias_of = "León, Guanajuato"},
["Leon"] = {alias_of = "León, Guanajuato", display = true},
["Querétaro"] = {container = "Querétaro", wp = "%l (city)"},
["Queretaro"] = {alias_of = "Querétaro", display = true},
["Ciudad Juárez"] = {container = "Chihuahua"},
["Juárez"] = {alias_of = "Ciudad Juárez"},
["Juarez"] = {alias_of = "Ciudad Juárez", display = "Juárez"},
["Torreón"] = {container = "Coahuila"},
["Torreon"] = {alias_of = "Torreón", display = true},
-- Include the state in the category for Mérida due to possible confusion with Mérida, Spain or
-- Mérida, Venezuela.
["Mérida, Yucatán"] = {container = "Yucatán", wp = "%l, %c"},
["Mérida"] = {alias_of = "Mérida, Yucatán"},
["Merida"] = {alias_of = "Mérida, Yucatán", display = true},
["San Luis Potosí"] = {container = "San Luis Potosí", wp = "%l (city)"},
["San Luis Potosi"] = {alias_of = "San Luis Potosí", display = true},
["Aguascalientes"] = {container = "Aguascalientes", wp = "%l (city)"},
["Mexicali"] = {container = "Baja California"},
}
export.mexico_cities_group = {
default_container = "Mexico",
canonicalize_key_container = make_canonicalize_key_container(", Mexico", "state"),
default_placetype = "thành phố",
data = export.mexico_cities,
}
export.nigeria_cities = {
-- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01.
["Lagos"] = {container = "Lagos"}, -- 21,300,000 (unindicated; population of low reliability)
["Kano"] = {container = "Kano", wp = "%l (city)"}, -- 5,350,000 (unindicated; population of low reliability)
["Ibadan"] = {container = "Oyo"}, -- 3,400,000 (unindicated; population of low reliability)
["Abuja"] = {container = {key = "Federal Capital Territory, Nigeria", placetype = "federal territory"}}, -- 3,050,000 (unindicated; population of low reliability)
["Port Harcourt"] = {container = "Rivers"}, -- 2,250,000 (unindicated; population of low reliability)
["Kaduna"] = {container = "Kaduna"}, -- 1,980,000 (unindicated; population of low reliability)
["Benin City"] = {container = "Edo"}, -- 1,790,000 (unindicated; population of low reliability)
["Aba"] = {container = "Abia", wp = "%l, Nigeria"}, -- 1,280,000 (unindicated; population of low reliability)
["Onitsha"] = {container = "Anambra"}, -- 1,230,000 (unindicated; population of low reliability)
["Maiduguri"] = {container = "Borno"}, -- 1,190,000 (unindicated; population of low reliability)
["Ilorin"] = {container = "Kwara"}, -- 1,160,000 (unindicated; population of low reliability)
["Sokoto"] = {container = "Sokoto", wp = "%l (city)"}, -- 1,140,000 (unindicated; population of low reliability)
["Jos"] = {container = "Plateau"}, -- 1,110,000 (unindicated; population of low reliability)
["Zaria"] = {container = "Kaduna"}, -- 1,050,000 (unindicated; population of low reliability)
["Enugu"] = {container = "Enugu", wp = "%l (city)"}, -- 1,010,000 (unindicated; population of low reliability)
}
export.nigeria_cities_group = {
default_container = "Nigeria",
canonicalize_key_container = make_canonicalize_key_container(" State, Nigeria", "state"),
default_placetype = "thành phố",
data = export.nigeria_cities,
}
export.pakistan_cities = {
-- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01.
["Karachi"] = {container = "Sindh"}, -- 21,000,000 (Consolidated Urban Area)
["Lahore"] = {container = "Punjab"}, -- 14,600,000 (Consolidated Urban Area)
["Rawalpindi"] = {container = "Punjab"}, -- 5,600,000 (Consolidated Urban Area; including Islamabad)
["Islamabad"] = {container = {key = "Islamabad Capital Territory, Pakistan", placetype = "federal territory"}}, -- 5,600,000 (Consolidated Urban Area; including Rawalpindi)
["Faisalabad"] = {container = "Punjab"}, -- 4,125,000 (Consolidated Urban Area)
["Gujranwala"] = {container = "Punjab"}, -- 3,450,000 (Consolidated Urban Area)
-- there is also Hyderabad in India (very confusing)
["Hyderabad, Pakistan"] = {container = "Sindh", wp = "%l, %c"}, -- 2,475,000 (Consolidated Urban Area)
["Hyderabad"] = {alias_of = "Hyderabad, Pakistan"},
["Multan"] = {container = "Punjab"}, -- 2,425,000 (Consolidated Urban Area)
["Peshawar"] = {container = "Khyber Pakhtunkhwa"}, -- 2,150,000 (Consolidated Urban Area)
["Quetta"] = {container = "Balochistan"}, -- 1,720,000 (Urban Area)
["Sargodha"] = {container = "Punjab"}, -- 1,080,000 (Urban Area)
["Sialkot"] = {container = "Punjab"}, -- 1,050,000 (Consolidated Urban Area)
}
export.pakistan_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Pakistan", "province"),
default_placetype = "thành phố",
data = export.pakistan_cities,
}
export.philippines_cities = {
-- Skipped some cities in Metro Manila (Taguig, Pasig) which don't have districts.
-- Other cities outside Metro Manila skipped as not central city in their urban area.
["Quezon City"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}},
-- Don't display-canonicalize Foo to Foo City as it may make the display weird.
["Quezon"] = {alias_of = "Quezon City"},
["Manila"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}},
["Davao City"] = {container = "Davao del Sur"},
["Davao"] = {alias_of = "Davao City"},
["Caloocan"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}},
["Zamboanga City"] = {container = "Zamboanga del Sur"},
["Zamboanga"] = {alias_of = "Zamboanga City"},
["Cebu City"] = {container = "Cebu"},
["Cebu"] = {alias_of = "Cebu City"},
["Antipolo"] = {container = "Rizal"},
["Cagayan de Oro"] = {container = "Misamis Oriental"},
["Dasmariñas"] = {container = "Cavite"},
["Dasmarinas"] = {alias_of = "Dasmariñas", display = true},
["General Santos"] = {container = "South Cotabato"},
["San Jose del Monte"] = {container = "Bulacan"},
["Bacolod"] = {container = "Negros Occidental"},
["Calamba"] = {container = "Laguna", wp = "%l, %c"},
["Angeles"] = {container = "Pampanga", wp = "Angeles City"},
["Angeles City"] = {alias_of = "Angeles"},
["Iloilo City"] = {container = "Iloilo"},
["Iloilo"] = {alias_of = "Iloilo City"},
}
export.philippines_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Philippines", "province"),
default_placetype = "thành phố",
data = export.philippines_cities,
}
export.russia_cities = {
-- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01.
["Moscow"] = {}, -- 18,800,000 (Agglomeration)
["Sankt-Peterburg"] = {}, -- 6,350,000 (Agglomeration)
["Saint Petersburg"] = {alias_of = "Sankt-Peterburg"},
["Novosibirsk"] = {container = "Novosibirsk Oblast"}, -- 1,820,000 (Agglomeration)
["Yekaterinburg"] = {container = "Sverdlovsk Oblast"}, -- 1,810,000 (Agglomeration)
["Nizhny Novgorod"] = {container = "Nizhny Novgorod Oblast"}, -- 1,620,000 (Agglomeration)
["Kazan"] = {container = {key = "Tatarstan, Russia", placetype = "republic"}}, -- 1,560,000 (Agglomeration)
["Chelyabinsk"] = {container = "Chelyabinsk Oblast"}, -- 1,430,000 (Agglomeration)
["Rostov-on-Don"] = {container = "Rostov Oblast"}, -- 1,390,000 (Agglomeration)
["Rostov-na-Donu"] = {alias_of = "Rostov-on-Don", display = true},
["Krasnodar"] = {container = {key = "Krasnodar Krai, Russia", placetype = "krai"}}, -- 1,370,000 (Agglomeration)
["Samara"] = {container = "Samara Oblast"}, -- 1,350,000 (Agglomeration)
["Krasnoyarsk"] = {container = {key = "Krasnoyarsk Krai, Russia", placetype = "krai"}}, -- 1,270,000 (Agglomeration)
["Ufa"] = {container = {key = "Bashkortostan, Russia", placetype = "republic"}}, -- 1,230,000 (Agglomeration)
["Saratov"] = {container = "Saratov Oblast"}, -- 1,170,000 (Agglomeration)
["Omsk"] = {container = "Omsk Oblast"}, -- 1,140,000 (Agglomeration)
["Voronezh"] = {container = "Voronezh Oblast"}, -- 1,130,000 (Agglomeration)
["Volgograd"] = {container = "Volgograd Oblast"}, -- 1,080,000 (Agglomeration)
["Perm"] = {container = {key = "Perm Krai, Russia", placetype = "krai"}, wp = "%l, Russia"}, -- 1,070,000 (Agglomeration)
}
export.russia_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Russia", "oblast"),
default_container = "Nga",
default_placetype = "thành phố",
data = export.russia_cities,
}
export.saudi_arabia_cities = {
-- Figures for the first five from [[w:List of cities and towns in Saudi Arabia]] as of 2022. Unclear if these are
-- metro, urban or city proper figures.
["Riyadh"] = {container = "Riyadh"}, -- 7,000,100; 7,700,000 per citypopulation.de 2025-01-01 (Agglomeration)
["Jeddah"] = {container = "Mecca"}, -- 3,751,917; 3,950,000 per citypopulation.de 2025-01-01 (Agglomeration)
["Jedda"] = {alias_of = "Jeddah", display = true},
["Jiddah"] = {alias_of = "Jeddah", display = true},
["Jidda"] = {alias_of = "Jeddah", display = true},
["Dammam"] = {container = "Eastern"}, -- 2,638,166; 2,925,000 per citypopulation.de 2025-01-01 (Agglomeration)
["Mecca"] = {container = "Mecca"}, -- 2,385,509; 2,675,000 per citypopulation.de 2025-01-01 (Agglomeration)
["Makkah"] = {alias_of = "Mecca", display = true},
["Medina"] = {container = "Medina"}, -- 1,477,023; 1,530,000 per citypopulation.de 2025-01-01 (City)
["Hofuf"] = {container = "Eastern"}, -- 1,060,000 per citypopulation.de 2025-01-01 (Agglomeration)
["Khamis Mushait"] = {container = "Aseer"}, -- 1,030,000 per citypopulation.de 2025-01-01 (Agglomeration)
["Khamis Mushayt"] = {alias_of = "Khamis Mushait", display = true},
}
export.saudi_arabia_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(" Province, Saudi Arabia", "province"),
default_placetype = "thành phố",
data = export.saudi_arabia_cities,
}
export.south_korea_cities = {
-- All cities listed are not associated with any county.
["Seoul"] = {},
["Busan"] = {},
["Incheon"] = {},
["Daegu"] = {},
["Daejeon"] = {},
["Gwangju"] = {},
["Ulsan"] = {},
}
export.south_korea_cities_group = {
default_container = "Hàn Quốc",
canonicalize_key_container = make_canonicalize_key_container(" County, South Korea", "province"),
default_placetype = "thành phố",
data = export.south_korea_cities,
}
export.spain_cities = {
["Madrid"] = {container = "Community of Madrid"},
["Barcelona"] = {container = "Catalonia"},
["Valencia"] = {container = "Valencia"},
["Seville"] = {container = "Andalusia"},
["Bilbao"] = {container = "Basque Country"},
}
export.spain_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", Spain", "autonomous community"),
default_placetype = "thành phố",
data = export.spain_cities,
}
export.taiwan_cities = {
["Tân Bắc"] = {},
["New Taipei"] = {alias_of = "Tân Bắc", display = true},
["Đài Trung"] = {},
["Cao Hùng"] = {wp = "%l, Đài Loan"},
["Đài Bắc"] = {},
["Đào Viên"] = {},
["Đài Nam"] = {},
-- these last three are not special municipalities
["Gia Nghĩa"] = {placetype = "thành phố"},
["Tân Trúc"] = {placetype = "thành phố"},
["Cơ Long"] = {placetype = "thành phố"},
}
export.taiwan_cities_group = {
placename_to_key = false, -- don't add ", Taiwan" to make the key
canonicalize_key_container = make_canonicalize_key_container(", Taiwan", "county"),
default_container = "Đài Loan",
default_placetype = {"special municipality", "municipality", "thành phố"},
default_is_city = true,
default_divs = {"districts"},
data = export.taiwan_cities,
}
-- NOTE: It's OK to mix cities from different constituent countries; as long as the immediate container is correct,
-- everything else will be figured out.
export.united_kingdom_cities = {
["London"] = {container = "Greater London"},
["Manchester"] = {container = "Greater Manchester"},
["Birmingham"] = {container = "West Midlands"},
["Liverpool"] = {container = "Merseyside"},
["Glasgow"] = {container = {key = "City of Glasgow, Scotland", placetype = "council area"}},
["Leeds"] = {container = "West Yorkshire"},
["Newcastle upon Tyne"] = {container = "Tyne and Wear"},
["Newcastle"] = {alias_of = "Newcastle upon Tyne"},
["Bristol"] = {container = {key = "England", placetype = "constituent country"}},
["Cardiff"] = {container = {key = "Wales", placetype = "constituent country"}},
["Portsmouth"] = {container = "Hampshire"},
["Edinburgh"] = {container = {key = "City of Edinburgh, Scotland", placetype = "council area"}},
-- under 1,000,000 people but principal areas of Wales; requested by [[User:Donnanz]]
["Swansea"] = {container = {key = "Wales", placetype = "constituent country"}},
["Newport"] = {container = {key = "Wales", placetype = "constituent country"}, wp = "Newport, Wales"},
}
export.united_kingdom_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(", England", "county"),
default_placetype = "thành phố",
data = export.united_kingdom_cities,
}
export.united_states_cities = {
-- top 50 CSA's by population, with the top and sometimes 2nd or 3rd city listed
["New York City"] = {container = "New York", wp = "%l", divs = {
{type = "boroughs", container_parent_type = false},
}},
-- Don't display-canonicalize as it may make the display weird (e.g. in the context New York, New York).
["New York"] = {alias_of = "New York City"},
["Newark"] = {container = "New Jersey"},
["Los Angeles"] = {container = "California", wp = "%l"},
["Long Beach"] = {container = "California"},
["Riverside"] = {container = "California"},
["Chicago"] = {container = "Illinois", wp = "%l"},
["Washington, D.C."] = {wp = "%l"},
["Washington, DC"] = {alias_of = "Washington, D.C.", display = true},
["Washington D.C."] = {alias_of = "Washington, D.C.", display = true},
["Washington DC"] = {alias_of = "Washington, D.C.", display = true},
-- Don't display-canonicalize as it may make the display weird (e.g. if the holonym is followed by a District of
-- Columbia holonym).
["Washington"] = {alias_of = "Washington, D.C."},
["Baltimore"] = {container = "Maryland", wp = "%l"},
-- to avoid conflict with San Jose in Costa Rica
["San Jose, California"] = {container = "California"},
["San Jose"] = {alias_of = "San Jose, California"},
["San Francisco"] = {container = "California", wp = "%l"},
["Oakland"] = {container = "California"},
["Boston"] = {container = "Massachusetts", wp = "%l"},
["Providence"] = {container = "Rhode Island"},
["Dallas"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"},
["Fort Worth"] = {container = "Texas"},
["Philadelphia"] = {container = "Pennsylvania", wp = "%l"},
["Houston"] = {container = "Texas", wp = "%l"},
["Miami"] = {container = "Florida", wp = "%l", commonscat = "%l, %c"},
["Atlanta"] = {container = "Georgia", wp = "%l"},
["Detroit"] = {container = "Michigan", wp = "%l"},
["Phoenix"] = {container = "Arizona", wp = "%l", commonscat = "%l, %c"},
["Mesa"] = {container = "Arizona"},
["Seattle"] = {container = "Washington", wp = "%l"},
["Orlando"] = {container = "Florida"},
["Minneapolis"] = {container = "Minnesota", wp = "%l"},
["Cleveland"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"},
["Denver"] = {container = "Colorado", wp = "%l", commonscat = "%l, %c"},
["San Diego"] = {container = "California", wp = "%l", commonscat = "%l, %c"},
["Portland"] = {container = "Oregon"},
["Tampa"] = {container = "Florida"},
["St. Louis"] = {container = "Missouri", wp = "%l", commonscat = "%l, %c"},
["Saint Louis"] = {alias_of = "St. Louis", display = true},
["Charlotte"] = {container = "North Carolina"},
["Sacramento"] = {container = "California"},
["Pittsburgh"] = {container = "Pennsylvania", wp = "%l"},
["Salt Lake City"] = {container = "Utah", wp = "%l"},
["San Antonio"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"},
["Columbus"] = {container = "Ohio"},
["Kansas City"] = {container = "Missouri", wp = "%l metropolitan area", commonscat = "%l, %c"},
["Indianapolis"] = {container = "Indiana", wp = "%l"},
["Las Vegas"] = {container = "Nevada", wp = "%l"},
["Cincinnati"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"},
["Austin"] = {container = "Texas"},
["Milwaukee"] = {container = "Wisconsin", wp = "%l", commonscat = "%l, %c"},
["Raleigh"] = {container = "North Carolina"},
["Nashville"] = {container = "Tennessee"},
["Virginia Beach"] = {container = "Virginia"},
["Norfolk"] = {container = "Virginia"},
["Greensboro"] = {container = "North Carolina"},
["Winston-Salem"] = {container = "North Carolina"},
["Jacksonville"] = {container = "Florida"},
["New Orleans"] = {container = "Louisiana", wp = "%l"},
["Louisville"] = {container = "Kentucky"},
["Greenville"] = {container = "South Carolina"},
["Hartford"] = {container = "Connecticut"},
["Oklahoma City"] = {container = "Oklahoma", wp = "%l"},
["Grand Rapids"] = {container = "Michigan"},
["Memphis"] = {container = "Tennessee"},
["Birmingham, Alabama"] = {container = "Alabama"},
["Birmingham"] = {alias_of = "Birmingham, Alabama"},
["Fresno"] = {container = "California"},
["Richmond"] = {container = "Virginia"},
["Harrisburg"] = {container = "Pennsylvania"},
-- any major city of top 50 MSA's that's missed by previous
["Buffalo"] = {container = "New York"},
-- any of the top 50 city by city population that's missed by previous
["El Paso"] = {container = "Texas"},
["Albuquerque"] = {container = "New Mexico"},
["Tucson"] = {container = "Arizona"},
["Colorado Springs"] = {container = "Colorado"},
["Omaha"] = {container = "Nebraska"},
["Tulsa"] = {container = "Oklahoma"},
-- skip Arlington, Texas; too obscure and likely to be interpreted as Arlington, Virginia
}
export.united_states_cities_group = {
default_container = "Hoa Kỳ",
canonicalize_key_container = make_canonicalize_key_container(", USA", "state"),
default_placetype = "thành phố",
default_wp = "%l, %c",
data = export.united_states_cities,
}
export.new_york_boroughs = {
["Bronx"] = {the = true, wp = "The Bronx"},
["Brooklyn"] = {},
["Manhattan"] = {},
["Queens"] = {},
["Staten Island"] = {},
}
export.new_york_boroughs_group = {
default_container = {key = "New York City", placetype = "thành phố"},
default_placetype = "borough",
default_is_city = true,
data = export.new_york_boroughs,
}
export.vietnam_cities = {
-- Figures from citypopulation.de (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated.
["Thành phố Hồ Chí Minh"] = {}, -- 14,300,000 (Agglomeration; inclunding Bien Hoa)
["Sài Gòn"] = {alias_of = "Thành phố Hồ Chí Minh"},
["Hanoi"] = {}, -- 7,350,000 (Agglomeration)
["Da Nang"] = {}, -- 1,500,000 (Agglomeration)
["Danang"] = {alias_of = "Da Nang", display = true},
["Haiphong"] = {}, -- 1,450,000 (Agglomeration)
["Hai Phong"] = {alias_of = "Haiphong", display = true},
-- This is the one entry in this list that is not a province-level municipality; instead it's a "provincial city"
-- meaning it is directly under its province as opposed to being contained in a district.
["Bien Hoa"] = {placetype = "thành phố", container = "Đồng Nai", wp = "Biên Hòa"}, -- 1,272,235 (2022 city population per Wikipedia)
["Biên Hòa"] = {alias_of = "Bien Hoa", display = true},
["Biên Hoà"] = {alias_of = "Bien Hoa", display = true},
-- These two not in citypopulation.de because the urban population may be slightly under 1,000,000, but they are
-- both province-level municipalities and close to the 1,000,000 mark.
["Can Tho"] = {wp = "Cần Thơ"}, -- 1,456,000 municipality (2019 census), 994,704 urban (2022 General Statistics Office of Vietnam estimate); capital [[Ninh Kiều district]]
["Cần Thơ"] = {alias_of = "Can Tho", display = true},
["Huế"] = {wp = "Huế"}, -- 1,257,000 municipality (2019 census), 840,000 urban (2022 General Statistics Office of Vietnam estimate); -- capital [[Thuận Hóa district]]
["Hue"] = {alias_of = "Hue", display = true},
}
export.vietnam_cities_group = {
placename_to_key = false, -- don't add ", Vietnam" to make the key
default_container = "Việt Nam",
canonicalize_key_container = make_canonicalize_key_container(" , Việt Nam", "tỉnh"),
-- Most of the cities listed are province-level municipalities in addition, which contain a certain amount of
-- rural territory surrounding the city, but not enough to separate the municipality from the city as distinct
-- known locations.
default_placetype = {"municipality", "thành phố"},
default_is_city = true,
-- There may not be enough districts to subcategorize like this.
-- default_divs = "districts",
data = export.vietnam_cities,
}
export.misc_cities = {
------------------ Africa -------------------
-- Sorted by country and then within the country, by decreasing population; figures from citypopulation.de
-- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated; combined with data from
-- [[w:List of urban areas in Africa by population]].
["Algiers"] = {container = "Algeria"}, -- 4,325,000 (Consolidated Urban Area)
["Oran"] = {container = "Algeria"}, -- 1,640,000 (Consolidated Urban Area)
["Luanda"] = {container = "Angola"}, -- 9,650,000 (Urban Area)
["Benguela"] = {container = "Angola"}, -- 1,420,000 (Urban Area)
["Cotonou"] = {container = "Benin"}, -- 2,150,000 (Agglomeration)
["Ouagadougou"] = {container = "Burkina Faso"}, -- 3,425,000 (Agglomeration)
["Bobo-Dioulasso"] = {container = "Burkina Faso"}, -- 1,100,000 (Agglomeration)
["Bujumbura"] = {container = "Burundi"}, -- 1,143,202 (Urban Area 2023 per PopulationStat, cited in Wikipedia)
["Yaoundé"] = {container = "Cameroon"}, -- 3,975,000 (City)
["Yaounde"] = {alias_of = "Yaoundé", display = true},
["Douala"] = {container = "Cameroon"}, -- 3,900,000 (City)
["Bangui"] = {container = "Central African Republic"}, -- 1,680,000 (Agglomeration)
["N'Djamena"] = {container = "Chad"}, -- 1,950,000 (City)
["Ndjamena"] = {alias_of = "N'Djamena", display = true},
["Kinshasa"] = {container = "Democratic Republic of the Congo"}, -- 16,300,000 (City; population of low reliability)
["Lubumbashi"] = {container = "Democratic Republic of the Congo"}, -- 2,875,000 (City; population of low reliability)
["Mbuji-Mayi"] = {container = "Democratic Republic of the Congo"}, -- 2,500,000 (City; population of low reliability)
["Kananga"] = {container = "Democratic Republic of the Congo"}, -- 1,370,000 (City; population of low reliability)
["Kisangani"] = {container = "Democratic Republic of the Congo"}, -- 1,300,000 (City; population of low reliability)
["Bukavu"] = {container = "Democratic Republic of the Congo"}, -- 1,100,000 (City; population of low reliability)
["Goma"] = {container = "Democratic Republic of the Congo"}, -- 1,010,000 (City; population of low reliability)
["Tshikapa"] = {container = "Democratic Republic of the Congo"}, -- 1,020,468 (2023 Wikipedia [[w:List of cities with over one million inhabitants]] from populationstat.com; not in citypopulation.de)
["Cairo"] = {container = "Ai Cập"}, -- 22,800,000 (Agglomeration, including Giza and Subhra El Kheima)
["Alexandria"] = {container = "Ai Cập"}, -- 6,250,000 (Agglomeration)
["Giza"] = {container = "Ai Cập"}, -- 4,458,135 (2023 from citypopulation.de)
["Shubra El Kheima"] = {container = "Ai Cập"}, -- 1,240,239 (2021 from citypopulation.de)
["Asmara"] = {container = "Eritrea"}, -- 1,090,000 (City; population of low reliability)
["Asmera"] = {alias_of = "Asmara", display = true},
["Addis Ababa"] = {container = "Ethiopia"}, -- 4,825,000 (Agglomeration)
["Banjul"] = {container = "Gambia"}, -- 1,170,000 (Agglomeration)
["Accra"] = {container = "Ghana"}, -- 6,800,000 (Agglomeration)
["Kumasi"] = {container = "Ghana"}, -- 2,900,000 (Agglomeration)
["Conakry"] = {container = "Guinea"}, -- 2,975,000 (Consolidated Urban Area)
["Abidjan"] = {container = "Bờ Biển Ngà"}, -- 7,050,000 (Agglomeration)
["Nairobi"] = {container = "Kenya"}, -- 6,900,000 (unindicated)
["Mombasa"] = {container = "Kenya"}, -- 1,370,000 (City)
["Monrovia"] = {container = "Liberia"}, -- 1,940,000 (Urban Area)
["Tripoli"] = {container = "Libya", wp = "%l, %c"}, -- 1,870,000 (unindicated)
["Antananarivo"] = {container = "Madagascar"}, -- 3,150,000 (Agglomeration)
["Lilongwe"] = {container = "Malawi"}, -- 1,210,000 (City)
["Bamako"] = {container = "Mali"}, -- 5,700,000 (Agglomeration)
["Nouakchott"] = {container = "Mauritania"}, -- 1,500,000 (City)
["Casablanca"] = {container = {key = "Casablanca-Settat, Morocco", placetype = "region"}}, -- 4,450,000 (Municipality (urban population))
["Rabat"] = {container = {key = "Rabat-Sale-Kenitra, Morocco", placetype = "region"}}, -- 2,125,000 (Municipality (urban population))
["Tangier"] = {container = {key = "Tangier-Tetouan-Al Hoceima, Morocco", placetype = "region"}}, -- 1,410,000 (Municipality (urban population))
["Tanger"] = {alias_of = "Tangier", display = true},
["Tangiers"] = {alias_of = "Tangier", display = true},
["Fez"] = {container = {key = "Fez-Meknes, Morocco", placetype = "region"}, wp = "%l, Morocco"}, -- 1,310,000 (Municipality (urban population))
["Fes"] = {alias_of = "Fez", display = true},
["Fès"] = {alias_of = "Fez", display = true},
["Agadir"] = {container = {key = "Souss-Massa, Morocco", placetype = "region"}}, -- 1,270,000 (Municipality (urban population))
["Marrakesh"] = {container = {key = "Marrakesh-Safi, Morocco", placetype = "region"}}, -- 1,140,000 (Municipality (urban population))
["Marrakech"] = {alias_of = "Marrakesh", display = true},
["Maputo"] = {container = "Mozambique"}, -- 2,575,000 (Agglomeration)
["Niamey"] = {container = "Niger"}, -- 1,530,000 (City)
["Brazzaville"] = {container = "Republic of the Congo"}, -- 2,475,000 (Agglomeration)
["Pointe-Noire"] = {container = "Republic of the Congo"}, -- 1,480,000 (City)
["Kigali"] = {container = "Rwanda"}, -- 1,960,000 (Municipality (urban population))
["Dakar"] = {container = "Senegal"}, -- 4,225,000 (Agglomeration)
["Touba"] = {container = "Senegal"}, -- 1,320,000 (Agglomeration)
["Freetown"] = {container = "Sierra Leone"}, -- 1,420,000 (Agglomeration)
["Mogadishu"] = {container = "Somalia"}, -- 2,250,000 (unindicated; population of low reliability)
["Johannesburg"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 14,800,000 (Consolidated Urban Area; including Pretoria, Soweto, etc.)
["Cape Town"] = {container = {key = "Western Cape, South Africa", placetype = "province"}}, -- 5,100,000 (Consolidated Urban Area)
["Durban"] = {container = {key = "KwaZulu-Natal, South Africa", placetype = "province"}}, -- 3,900,000 (Consolidated Urban Area)
["Pretoria"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 2,921,488 (2011 census)
["Port Elizabeth"] = {container = {key = "Eastern Cape, South Africa", placetype = "province"}, wp = "Gqeberha"}, -- 1,200,000 (Consolidated Urban Area)
["Gqeberha"] = {alias_of = "Port Elizabeth"}, -- official name; not a display alias
["Khartoum"] = {container = "Sudan"}, -- 7,200,000 (unindicated; population of low reliability)
["Dar es Salaam"] = {container = "Tanzania"}, -- 6,650,000 (Agglomeration)
["Mwanza"] = {container = "Tanzania"}, -- 1,340,000 (Agglomeration)
["Mwanza City"] = {alias_of = "Mwanza", display = true},
["Arusha"] = {container = "Tanzania"}, -- 1,190,000 (Agglomeration)
["Zanzibar"] = {container = "Tanzania"}, -- 1,030,000 (Agglomeration)
["Lomé"] = {container = "Togo"}, -- 2,625,000 (unindicated)
["Lome"] = {alias_of = "Lomé", display = true},
["Tunis"] = {container = "Tunisia"}, -- 2,725,000 (Municipality (urban population))
["Sousse"] = {container = "Tunisia"}, -- 1,180,000 (Municipality (urban population))
["Soussa"] = {alias_of = "Sousse", display = true},
["Kampala"] = {container = "Uganda"}, -- 4,300,000 (unindicated)
["Lusaka"] = {container = "Zambia"}, -- 3,000,000 (Consolidated Urban Area)
["Harare"] = {container = "Zimbabwe"}, -- 2,675,000 (Agglomeration)
------------------ Asia -------------------
-- sorted by country and then within the country, by decreasing population; figures from citypopulation.de
-- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated.
["Kabul"] = {container = "Afghanistan"}, -- 5,250,000 (Agglomeration)
["Baku"] = {container = "Azerbaijan"}, -- 3,725,000 (Administrative Area (urban population))
["Manama"] = {container = "Bahrain"}, -- 1,560,000 (unindicated)
["Dhaka"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 23,100,000 (Agglomeration)
["Dacca"] = {alias_of = "Dhaka", display = true},
["Chittagong"] = {container = {key = "Chittagong Division, Bangladesh", placetype = "division"}}, -- 5,050,000 (Agglomeration)
["Gazipur"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 2,674,697 (City per 2022; countied in citypopulation.de as part of Dhaka metro area)
["Khulna"] = {container = {key = "Khulna Division, Bangladesh", placetype = "division"}}, -- 1,210,000 (Agglomeration)
["Phnom Penh"] = {container = "Campuchia"}, -- 2,925,000 (Agglomeration)
["Tehran"] = {container = {key = "Tehran Province, Iran", placetype = "province"}}, -- 16,800,000 (Agglomeration)
["Teheran"] = {alias_of = "Tehran", display = true},
["Mashhad"] = {container = {key = "Razavi Khorasan Province, Iran", placetype = "province"}}, -- 3,475,000 (Agglomeration)
["Mashad"] = {alias_of = "Mashhad", display = true},
["Meshhed"] = {alias_of = "Mashhad", display = true},
["Meshed"] = {alias_of = "Mashhad", display = true},
["Isfahan"] = {container = {key = "Isfahan Province, Iran", placetype = "province"}}, -- 3,425,000 (Agglomeration)
["Esfahan"] = {alias_of = "Isfahan", display = true},
["Tabriz"] = {container = {key = "East Azerbaijan Province, Iran", placetype = "province"}}, -- 1,970,000 (Agglomeration)
["Shiraz"] = {container = {key = "Fars Province, Iran", placetype = "province"}}, -- 1,950,000 (Agglomeration)
["Ahvaz"] = {container = {key = "Khuzestan Province, Iran", placetype = "province"}}, -- 1,550,000 (Agglomeration)
["Qom"] = {container = {key = "Qom Province, Iran", placetype = "province"}}, -- 1,450,000 (City)
["Kermanshah"] = {container = {key = "Kermanshah Province, Iran", placetype = "province"}}, -- 1,130,000 (City)
["Baghdad"] = {container = "Iraq"}, -- 7,800,000 (Administrative Area (urban population))
["Basra"] = {container = "Iraq"}, -- 1,710,000 (Administrative Area (urban population))
["Mosul"] = {container = "Iraq"}, -- 1,550,000 (Administrative Area (urban population))
["Erbil"] = {container = "Iraq"}, -- 1,220,000 (Administrative Area (urban population))
["Kirkuk"] = {container = "Iraq"}, -- 1,160,000 (Administrative Area (urban population))
["Najaf"] = {container = "Iraq"}, -- 1,050,000 (Administrative Area (urban population))
["Tel Aviv"] = {container = "Israel"}, -- 3,000,000 (Agglomeration)
-- Jerusalem is not recognized internationally as part of either Israel or Palestine, but as a
-- [[w:corpus separatum]], so put the container as "châu Á" and list Israel and Palestine as additional parents for
-- categorization purposes.
["Jerusalem"] = {container = {key = "châu Á", placetype = "continent"},
addl_parents = {"Israel", "Palestine"}}, -- 1,080,000 (Agglomeration)
["Amman"] = {container = "Jordan"}, -- 6,150,000 (unindicated)
["Irbid"] = {container = "Jordan"}, -- 1,070,000 (unindicated)
["Almaty"] = {container = "Kazakhstan"}, -- 2,700,000 (Agglomeration)
["Alma-Ata"] = {alias_of = "Almaty"}, -- former name, sometimes still used; don't display-canonicalize
["Astana"] = {container = "Kazakhstan"}, -- 1,600,000 (Agglomeration)
["Shymkent"] = {container = "Kazakhstan"}, -- 1,370,000 (Agglomeration)
["Kuwait City"] = {container = "Kuwait"}, -- 5,050,000 (Agglomeration)
["Bishkek"] = {container = "Kyrgyzstan"}, -- 1,540,000 (Agglomeration)
["Beirut"] = {container = "Lebanon"}, -- 1,930,000 (unindicated; population of low reliability)
-- Kuala Lumpur is a federal capital city, not in any state
["Kuala Lumpur"] = {container = "Malaysia"}, -- 9,550,000 (Agglomeration)
-- there are various George Towns and Georgetowns
["George Town, Malaysia"] = {container = {key = "Penang, Malaysia", placetype = "state"}, wp = "%l, %c"}, -- 2,075,000 (Agglomeration)
["George Town"] = {alias_of = "George Town, Malaysia"},
["Ulaanbaatar"] = {container = "Mông Cổ"}, -- 1,610,000 (City)
["Ulan Bator"] = {alias_of = "Ulaanbaatar", display = true},
["Yangon"] = {container = "Myanmar"}, -- 5,650,000 (Municipality (urban population))
["Rangoon"] = {alias_of = "Yangon", display = true},
["Mandalay"] = {container = "Myanmar"}, -- 1,600,000 (Municipality (urban population))
["Kathmandu"] = {container = "Nepal"}, -- 3,175,000 (Agglomeration)
-- Pyongyang is a directly governed city, not in any province
["Pyongyang"] = {container = "Cộng hòa Dân chủ Nhân dân Triều Tiên"}, -- 3,025,000 (Administrative Area (urban population))
["Muscat"] = {container = "Oman"}, -- 1,620,000 (Agglomeration)
["Gaza"] = {container = "Palestine", wp = "Gaza City"}, -- 2,275,000 (unindicated)
["Gaza City"] = {alias_of = "Gaza"},
["Doha"] = {container = "Qatar"}, -- 2,650,000 (Agglomeration)
["Colombo"] = {container = "Sri Lanka"}, -- 4,975,000 (unindicated)
["Damascus"] = {container = "Syria"}, -- 3,975,000 (unindicated; population of low reliability)
["Aleppo"] = {container = "Syria"}, -- 1,980,000 (unindicated; population of low reliability)
["Dushanbe"] = {container = "Tajikistan"}, -- 1,270,000 (City)
["Bangkok"] = {container = "Thái Lan"}, -- 21,800,000 (Agglomeration)
-- Chiang Mai not in citypopulation.de, but 1,198,000 urban population in 2021 per Wikipedia
-- [[w:List_of_municipalities_in_Thailand#Largest_cities_by_urban_population]]
["Chiang Mai"] = {container = {key = "Chiang Mai Province, Thailand", placetype = "province"}},
["Chonburi"] = {container = {key = "Chonburi Province, Thailand", placetype = "province"}}, -- 1,570,000 (Agglomeration; including Pattaya)
-- metro area population stats from https://www.statista.com/statistics/255483/biggest-cities-in-turkey/ as of 2021;
-- second source is citypopulation.de reference date 2025-01-01.
["Istanbul"] = {placetype = {"thành phố", "province"}, divs = {"districts"}, container = "Thổ Nhĩ Kỳ"}, -- 15.2 million; 16,000,000 (Agglomeration)
["İstanbul"] = {alias_of = "Istanbul", display = true},
["Ankara"] = {container = {key = "Ankara Province, Turkey", placetype = "province"}}, -- 5.15 million; 5,200,000 (Agglomeration)
["Izmir"] = {container = {key = "İzmir Province, Turkey", placetype = "province"}, wp = "İzmir"}, -- 2.95 million; 3,025,000 (Agglomeration)
["İzmir"] = {alias_of = "Izmir", display = true},
["Bursa"] = {container = {key = "Bursa Province, Turkey", placetype = "province"}}, -- 2.02 million; 2,200,000 (Agglomeration)
["Adana"] = {container = {key = "Adana Province, Turkey", placetype = "province"}}, -- 1.77 million; 1,780,000 (Agglomeration)
["Gaziantep"] = {container = {key = "Gaziantep Province, Turkey", placetype = "province"}}, -- 1.71 million; 1,750,000 (Agglomeration)
["Antalya"] = {container = {key = "Antalya Province, Turkey", placetype = "province"}}, -- 1.3 million; 1,400,000 (Agglomeration)
["Konya"] = {container = {key = "Konya Province, Turkey", placetype = "province"}}, -- 1.35 million; 1,390,000 (Agglomeration)
["Diyarbakır"] = {container = {key = "Diyarbakır Province, Turkey", placetype = "province"}}, -- 1.07 million; 1,100,000 (Agglomeration)
-- Diyarbakır is more common per Ngrams and Google Scholar, but Diyarbakir is the Kurdish form, so we should not
-- display-canonicalize to the Turkish form Diyarbakır.
["Diyarbakir"] = {alias_of = "Diyarbakır"},
["Mersin"] = {container = {key = "Mersin Province, Turkey", placetype = "province"}}, -- 1.03 million; 1,060,000 (Agglomeration)
["Ashgabat"] = {container = "Turkmenistan"}, -- 1,150,000 (Agglomeration)
["Dubai"] = {container = "United Arab Emirates"}, -- 6,050,000 (Agglomeration; including Sharjah)
["Abu Dhabi"] = {container = "United Arab Emirates"}, -- 1,850,000 (City)
["Sharjah"] = {container = "United Arab Emirates"}, -- 1,800,000 (Metro area 2022-2023 per Wikipedia; separate from Dubai)
["Tashkent"] = {container = "Uzbekistan"}, -- 3,850,000 (unindicated)
["Sanaa"] = {container = "Yemen"}, -- 3,275,000 (City; population of low reliability)
["Sana'a"] = {alias_of = "Sanaa", display = true},
["Aden"] = {container = "Yemen"}, -- 1,079,060 (?; 2023 estimate from World Population Review per Wikipedia)
------------------ Europe or Europe-like (Caucasus etc.) ---------------------
["Yerevan"] = {container = "Armenia"}, -- 1,520,000 (Agglomeration)
["Vienna"] = {container = "Áo"}, -- 2,375,000 (Agglomeration)
["Minsk"] = {container = "Belarus"}, -- 2,100,000 (unindicated)
["Brussels"] = {container = "Bỉ"}, -- 2,800,000 (Consolidated Urban Area)
["Antwerp"] = {container = "Bỉ"}, -- 1,270,000 (Consolidated Urban Area)
["Sofia"] = {container = "Bulgaria"}, -- 1,260,000 (Agglomeration)
["Zagreb"] = {container = "Croatia"},
["Prague"] = {container = "Czech Republic"}, -- 1,470,000 (Agglomeration)
["Brno"] = {container = "Czech Republic"}, -- 729,405 (metro area per Wikipedia as of 2024-01-01 Czech Statistical Office)
["Olomouc"] = {container = "Czech Republic"}, -- 102,293 (city; included only because someone went crazy creating Olomouc-related terms)
["Copenhagen"] = {container = "Đan Mạch"}, -- 1,800,000 (Consolidated Urban Area)
["Helsinki"] = {container = {key = "Uusimaa, Finland", placetype = "region"}}, -- 1,560,000 (Consolidated Urban Area)
["Tbilisi"] = {container = "Georgia"}, -- 1,430,000 (Agglomeration)
["Athens"] = {container = "Hy Lạp"},
["Thessaloniki"] = {container = "Hy Lạp"},
["Budapest"] = {container = "Hungary"},
-- FIXME, per Wikipedia "County Dublin" is now the "Dublin Region"
["Dublin"] = {container = {key = "County Dublin, Ireland", placetype = "county"}},
["Riga"] = {container = "Latvia"},
["Amsterdam"] = {container = {key = "North Holland, Netherlands", placetype = "province"}},
["Rotterdam"] = {container = {key = "South Holland, Netherlands", placetype = "province"}},
["The Hague"] = {container = {key = "South Holland, Netherlands", placetype = "province"}},
-- Christchurch (metro 546,600) and Wellington (metro 439,800) are too small to make it.
["Auckland"] = {container = {key = "Auckland, New Zealand", placetype = "region"}},
["Oslo"] = {container = {key = "Oslo, Norway", placetype = "county"}},
["Warsaw"] = {container = {key = "Masovian Voivodeship, Poland", placetype = "voivodeship"}},
["Katowice"] = {container = {key = "Silesian Voivodeship, Poland", placetype = "voivodeship"}},
--- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Krakow" without accent.
["Krakow"] = {container = {key = "Lesser Poland Voivodeship, Poland", placetype = "voivodeship"}, wp = "Kraków"},
["Kraków"] = {alias_of = "Krakow", display = true},
["Cracow"] = {alias_of = "Krakow", display = true},
--- Ngrams (up through 2022) and Google Scholar (>= 2024) confirm "Gdańsk" and "Poznań" with accent.
["Gdańsk"] = {container = {key = "Pomeranian Voivodeship, Poland", placetype = "voivodeship"}},
["Gdansk"] = {alias_of = "Gdańsk", display = true},
["Poznań"] = {container = {key = "Greater Poland Voivodeship, Poland", placetype = "voivodeship"}},
["Poznan"] = {alias_of = "Poznań", display = true},
--- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Lodz" without accents.
["Lodz"] = {container = {key = "Lodz Voivodeship, Poland", placetype = "voivodeship"}, wp = "Łódź"},
["Łódź"] = {alias_of = "Lodz", display = true},
["Lisbon"] = {container = {key = "Lisbon District, Portugal", placetype = "district"}},
["Porto"] = {container = {key = "Porto District, Portugal", placetype = "district"}},
["Oporto"] = {alias_of = "Porto", display = true},
["Bucharest"] = {container = "Romania"},
["Belgrade"] = {container = "Serbia"},
["Stockholm"] = {container = "Thụy Điển"},
["Zurich"] = {container = "Switzerland"},
--- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Zurich" without umlaut.
--- Even Wikipedia uses the form without umlaut.
["Zürich"] = {alias_of = "Zurich", display = true},
["Kyiv"] = {container = "Ukraina"}, -- not in Kyiv Oblast
-- Don't display-canonicalize Kiev -> Kyiv because in ancient contexts, Kiev is still more common.
["Kiev"] = {alias_of = "Kyiv"},
["Kharkiv"] = {container = {key = "Kharkiv Oblast, Ukraine", placetype = "oblast"}},
["Odessa"] = {container = {key = "Odesa Oblast, Ukraine", placetype = "oblast"}, wp = "Odesa"},
-- Don't display-canonicalize Odesa -> Odessa because it may be interpreted as a political statement.
["Odesa"] = {alias_of = "Odessa"},
------------------ North America, South America ---------------------
-- Primary figures from citypopulation.de retrieved on 2025-04-26 (reference date 2025-01-01);
-- Wikipedia metropolitan figures from [[w:List of metropolitan areas in the Americas]] based on per-country data;
-- Wikipedia city limits figures from [[w:List of largest cities in the Americas]].
["Buenos Aires"] = {container = "Argentina"}, -- 16,800,000 (Consolidated Urban Area; 13,985,794 metropolitan area per Wikipedia)
["Córdoba, Argentina"] = {container = "Argentina", wp = "%l, %c"}, -- 1,810,000 (Consolidated Urban Area; 1,505,25 city limits per Wikipedia)
-- to avoid confusion with Córdoba in Spain
["Córdoba"] = {alias_of = "Córdoba, Argentina"},
["Cordoba"] = {alias_of = "Córdoba, Argentina", display = "Córdoba"},
["Rosario"] = {container = "Argentina", wp = "%l, Santa Fe"}, -- 1,510,000 (Consolidated Urban Area; 1,348,725 metropolitan area per Wikipedia)
["Mendoza"] = {container = "Argentina", wp = "%l, %c"}, -- 1,180,000 (Consolidated Urban Area)
["San Miguel de Tucumán"] = {container = "Argentina"}, -- 1,110,000 (Consolidated Urban Area)
["Tucumán"] = {alias_of = "San Miguel de Tucumán"},
["Tucuman"] = {alias_of = "San Miguel de Tucumán", display = "Tucumán"},
["Santa Cruz de la Sierra"] = {container = "Bolivia"}, -- 1,960,000 (Consolidated Urban Area); 1,606,671 (city limits per Wikipedia)
["Santa Cruz"] = {alias_of = "Santa Cruz de la Sierra"},
["La Paz"] = {container = "Bolivia"}, -- 1,870,000 (Consolidated Urban Area; composed of El Alto, now slightly larger, and La Paz)
["El Alto"] = {container = "Bolivia"},
["Cochabamba"] = {container = "Bolivia"}, -- 1,280,000 (Consolidated Urban Area)
["Santiago"] = {container = "Chile"}, -- 8,400,000 (Consolidated Urban Area; 6,903,479 city limits? per Wikipedia)
["Valparaíso"] = {container = "Chile"}, -- 1,060,000 (Consolidated Urban Area)
["Valparaiso"] = {alias_of = "Valparaíso"}, -- 1,060,000 (Consolidated Urban Area)
["Bogotá"] = {container = "Colombia"}, -- 10,600,000 (Agglomeration; 12,772,828 metropolitan area per Wikipedia)
["Bogota"] = {alias_of = "Bogotá", display = true},
["Medellín"] = {container = "Colombia"}, -- 4,350,000 (Agglomeration; 4,068,000 metropolitan area per Wikipedia)
["Medellin"] = {alias_of = "Medellín", display = true},
["Cali"] = {container = "Colombia"}, -- 2,975,000 (Agglomeration; 2,837,000 metropolitan area per Wikipedia)
["Barranquilla"] = {container = "Colombia"}, -- 2,375,000 (Agglomeration; 1,341,160 city limits per Wikipedia)
["Bucaramanga"] = {container = "Colombia"}, -- 1,380,000 (Agglomeration)
["Cartagena, Colombia"] = {container = "Colombia", wp = "%l, %c"}, -- 1,250,000 (Agglomeration)
-- to avoid confusion with Cartagena, Spain
["Cartagena"] = {alias_of = "Cartagena, Colombia"},
["Cúcuta"] = {container = "Colombia"}, -- 1,130,000 (Agglomeration)
["Cucuta"] = {alias_of = "Cúcuta", display = true},
-- to avoid conflict with San Jose, California
["San José, Costa Rica"] = {container = "Costa Rica", wp = "%l, %c"}, -- 2,450,000 (Municipality (urban population); 3,160,000 metropolitan area per Wikipedia)
["San José"] = {alias_of = "San José, Costa Rica"},
["San Jose"] = {alias_of = "San José, Costa Rica"}, -- display = "San José"; causes error due to San Jose alias for California city; FIXME
["Havana"] = {container = "Cuba"}, -- 2,150,000 (City; 2,137,847 city limits? per Wikipedia)
["Santo Domingo"] = {container = "Dominican Republic"}, -- 3,900,000 (Municipality (urban population); 4,274,651 ??? per Wikipedia)
["Guayaquil"] = {container = "Ecuador"}, -- 3,350,000 (Agglomeration; 3,092,000 metro area? per Wikipedia)
["Quito"] = {container = "Ecuador"}, -- 2,875,000 (Agglomeration; 2,889,703 metro area? per Wikipedia)
["San Salvador"] = {container = "El Salvador"}, -- 1,580,000 (Municipality (urban population))
["Guatemala City"] = {container = "Guatemala"}, -- 3,375,000 (Municipality (urban population); 3,160,000 metro area? per Wikipedia)
["Port-au-Prince"] = {container = "Haiti"}, -- 3,050,000 (Agglomeration; population of low reliability; 2,915,000 metro area? per Wikipedia)
["San Pedro Sula"] = {container = "Honduras"}, -- 1,330,000 (Consolidated Urban Area)
["Tegucigalpa"] = {container = "Honduras"}, -- 1,220,000 (Urban Area)
["Managua"] = {container = "Nicaragua"}, -- 1,400,000 (Consolidated Urban Area)
["Panama City"] = {container = "Panama"}, -- 1,430,000 (Urban Area)
["Asunción"] = {container = "Paraguay"}, -- 2,350,000 (Municipality (urban population))
["Lima"] = {container = "Peru"}, -- 12,000,000 (Agglomeration; 11,283,787 ??? per Wikipedia)
["Arequipa"] = {container = "Peru"}, -- 1,210,000 (Agglomeration)
["San Juan"] = {container = {key = "Puerto Rico", placetype = "commonwealth"}, wp = "%l, %c"}, -- 1,910,000 (Consolidated Urban Area)
["Montevideo"] = {container = "Uruguay"}, -- 1,810,000 (Agglomeration; 1,302,954 ??? per Wikipedia)
["Caracas"] = {container = "Venezuela"}, -- 3,850,000 (Consolidated Urban Area; 5,243,301 ??? per Wikipedia)
["Maracaibo"] = {container = "Venezuela"}, -- 2,825,000 (Consolidated Urban Area; 5,278,448 ??? per Wikipedia)
-- to avoid confusion with Valencia (city and autonomous community of Spain)
["Valencia, Venezuela"] = {container = "Venezuela", wp = "%l, %c"}, -- 2,100,000 (Consolidated Urban Area)
["Valencia"] = {alias_of = "Valencia, Venezuela"},
["Maracay"] = {container = "Venezuela"}, -- 1,480,000 (Consolidated Urban Area)
["Barquisimeto"] = {container = "Venezuela"}, -- 1,360,000 (Consolidated Urban Area)
}
export.misc_cities_group = {
canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"),
default_placetype = "thành phố",
data = export.misc_cities,
}
--[==[ var:
List of all known locations, in groups. The first group lists continents and continental regions, followed by three
groups listing top-level locations: countries, "country-like entities" (de-facto/unrecognized/etc. countries and
dependent territories) and former polities (countries, empires, etc.). After that come first-level subpolities
(administrative divisions) of several, mostly large, countries, followed by groups of cities. China and the United
Kingdom include second-level subpolities (in the case of China, only the largest ones as the full list runs in the
hundreds).
]==]
export.locations = {
export.continents_group,
export.countries_group,
export.country_like_entities_group,
export.former_countries_group,
export.australia_group,
export.austria_group,
export.bangladesh_group,
export.brazil_group,
export.bulgaria_group,
export.canada_group,
export.china_group,
export.china_prefecture_level_cities_group,
export.china_prefecture_level_cities_group_2,
export.egypt_group,
export.finland_group,
export.france_group,
export.france_departments_group,
export.germany_group,
export.greece_group,
export.india_group,
export.indonesia_group,
export.iran_group,
export.ireland_group,
export.italy_group,
export.japan_group,
export.laos_group,
export.lebanon_group,
export.malaysia_group,
export.malta_group,
export.mexico_group,
export.moldova_group,
export.morocco_group,
export.netherlands_group,
export.new_zealand_group,
export.nigeria_group,
export.north_korea_group,
export.norway_group,
export.pakistan_group,
export.philippines_group,
export.poland_group,
export.portugal_group,
export.romania_group,
export.russia_group,
export.saudi_arabia_group,
export.south_africa_group,
export.south_korea_group,
export.spain_group,
export.taiwan_group,
export.thailand_group,
export.turkey_group,
export.ukraine_group,
export.united_kingdom_group,
export.united_states_group,
export.england_group,
export.northern_ireland_group,
export.scotland_group,
export.wales_group,
export.vietnam_group,
export.australia_cities_group,
export.brazil_cities_group,
export.canada_cities_group,
export.france_cities_group,
export.germany_cities_group,
export.india_cities_group,
export.indonesia_cities_group,
export.italy_cities_group,
export.japan_cities_group,
export.mexico_cities_group,
export.nigeria_cities_group,
export.pakistan_cities_group,
export.philippines_cities_group,
export.russia_cities_group,
export.saudi_arabia_cities_group,
export.south_korea_cities_group,
export.spain_cities_group,
export.taiwan_cities_group,
export.united_kingdom_cities_group,
export.united_states_cities_group,
export.new_york_boroughs_group,
export.vietnam_cities_group,
export.misc_cities_group,
}
return export
jl289ot8bcy1zukdyi6odxx6l3zake5
abaare
0
287987
2573704
2116503
2026-10-26T15:59:31Z
Hiyuune
50834
2573704
wikitext
text/x-wiki
=={{langname|ssy}}==
==={{section|v}}===
{{head|ssy|Động từ}}
# [[nguyền rủa]].
==={{section|ref}}===
* Moreno Vergari; Roberta Vergari (2007), ''A basic Saho-English-Italian Dictionary'' (Từ điển cơ bản Saho-Anh-Ý)
9efamx6o1xn1wtooyjilcs27oql0m26
abayshe
0
287988
2573706
2116504
2026-10-26T16:13:03Z
Hiyuune
50834
2573706
wikitext
text/x-wiki
=={{langname|ssy}}==
==={{section|v}}===
{{head|ssy|Động từ}}
# [[hoàn thành]].
==={{section|ref}}===
* Moreno Vergari; Roberta Vergari (2007), ''A basic Saho-English-Italian Dictionary'' (Từ điển cơ bản Saho-Anh-Ý)
0auvjovsm645emhylv7uzxies3igila
abittodde ashishe
0
287990
2573711
2116506
2026-10-26T16:21:15Z
Hiyuune
50834
2573711
wikitext
text/x-wiki
=={{langname|ssy}}==
==={{section|v}}===
{{head|ssy|Động từ}}
# [[đầu tư]].
==={{section|ref}}===
* Moreno Vergari; Roberta Vergari (2007), ''A basic Saho-English-Italian Dictionary'' (Từ điển cơ bản Saho-Anh-Ý)
hu2f8cvatddcqaem5izsr21ys013jj0
äbermek
0
288497
2573707
2117763
2026-10-26T16:14:38Z
Hiyuune
50834
2573707
wikitext
text/x-wiki
=={{langname|tk}}==
{{tk-variant|c=әбермек|l=äbermek|a=ابیرمک}}
==={{section|v}}===
{{tk-verb}}
# [[mang]].
# [[mua]], [[lấy]].
ejfsl9wqj5d2o4w7sh3ppiqvldx3b8w
2573708
2573707
2026-10-26T16:15:01Z
Hiyuune
50834
2573708
wikitext
text/x-wiki
=={{langname|tk}}==
{{tk-variant|c=әбермек|l=äbermek|a=ابیرمک}}
==={{section|v}}===
{{tk-verb}}
# [[mang]].
# [[mua]], [[lấy]].
===={{section|conj}}====
{{tk-conj-c|äber|e}}
c1xoeneosgl07g8fnk9ipi38kkivgot
2573709
2573708
2026-10-26T16:15:16Z
Hiyuune
50834
/* {{section|conj}} */
2573709
wikitext
text/x-wiki
=={{langname|tk}}==
{{tk-variant|c=әбермек|l=äbermek|a=ابیرمک}}
==={{section|v}}===
{{tk-verb}}
# [[mang]].
# [[mua]], [[lấy]].
===={{section|conjug}}====
{{tk-conj-c|äber|e}}
ix7x8e8yz9hgurksynq26pb58gfdnan
Thảo luận Thành viên:Nhacaisin88art
3
289474
2573763
2121436
2026-10-27T04:00:35Z
TienMinh-mun6xnChing
57893
/* Thông báo cấm */ Tác vụ: Ghi nhận
2573763
wikitext
text/x-wiki
== Thông báo cấm ==
<div class="user-block" style="background:#FFE2E0; border:1px solid #CC0000; padding:0.5em; margin:0.5em auto; min-height: 40px">
[[File:OOjs UI icon block-destructive.svg|40px|left|alt=Stop icon]] Bạn đã bị '''cấm sửa đổi vô hạn''' theo [[Wiktionary:Quy định cấm thành viên|quy định cấm của Wiktionary]] vì lý do nào đó. Nếu bạn tin rằng lần cấm này là không công bằng, bạn có thể chống lại quyết định cấm bằng cách thêm đoạn: <code><nowiki>{{Bỏ cấm|1=lý do của bạn ~~~~}}</nowiki></code></div>
Bạn bị cấm vô hạn vì tên vi phạm quy định về tên người dùng + sử dụng Wiktionary với mục đích spam hoặc quảng cáo. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:36, ngày 22 tháng 8 năm 2023 (UTC)
g1mkux1q7i2s7az3fe7oc4obk1tg0v5
aaramaa
0
289857
2573702
2122620
2026-10-26T15:52:07Z
Hiyuune
50834
2573702
wikitext
text/x-wiki
=={{langname|gag}}==
==={{section|etym}}===
Từ {{inh|gag|trk-pro|*ārka-|t=tìm kiếm}}. Cùng gốc với {{cog|az|aramaq}}, {{cog|tr|aramak}}, {{cog|tk|āramak}}.
==={{section|v}}===
{{head|gag|Động từ}}
# [[tìm kiếm]].
===={{section|drv}}====
* {{l|gag|aaraştırmaa}}
===={{section|ref}}====
* {{R:gag:trBaskakov|page=2}}
* Doğan, Levent; Erdin, Ceyda. (2019). Gagauz Atasözlerinin Sentaksı Üzerine Bir Değerlendirme. Turkish Studies - Language and Literature 14(3):1159-1187. [https://www.researchgate.net/publication/359469647_GAGAUZ_ATASOZLERININ_SENTAKSI_UZERINE_BIR_DEGERLENDIRME]
p88d0g53ahopjuwkdc6y8d66uv65dep
rạp hát
0
299267
2573737
2146173
2026-10-26T23:29:14Z
TienMinh-mun6xnChing
57893
/* */
2573737
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron}}
{{-noun-}}
{{pn}}
# {{context|ít dùng|ng1}} {{like-entry|nhà hát}}
{{-ref-}}
{{R:Tratu}}
{{catname|Danh từ|tiếng Việt}}
djbtm2q97f5gbcq66h6k0kgi819uj7t
2573738
2573737
2026-10-26T23:29:46Z
TienMinh-mun6xnChing
57893
/* */
2573738
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron}}
{{-noun-}}
{{pn}}
# {{context|ít dùng|ng1}} {{like-entry|nhà hát}}.
#: {{ux|vi|Đi xem ca nhạc ở '''rạp hát'''.}}
{{-ref-}}
{{R:Tratu}}
{{catname|Danh từ|tiếng Việt}}
eqjffab4czzces6jihvi69lm8fi31yy
2573810
2573738
2026-10-27T06:32:40Z
Hiyuune
50834
2573810
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|etym}}===
{{com|vi|rạp|hát}}
==={{section|n}}===
{{vi-noun}}
# {{like-entry|nhà hát}}.
#: {{ux|vi|Đi xem ca nhạc ở '''rạp hát'''.}}
==={{section|ref}}===
* {{R:Tratu}}
4ot39du35geqdg1ga4mmsfu3jn0pnqn
フィリピン
0
308074
2573622
2170788
2026-10-26T13:05:28Z
Hiyuune
50834
/* */
2573622
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-kanjitab|alt=比律賓:obsolete,菲律賓:obsolete}}
{{wp|ja:}}
==={{section|alt}}===
* {{q|không còn dùng}} {{ja-r|^フィリッピン}}, {{ja-r|^ヒリピン}}, {{ja-r|^ヒリッピン}}
* {{q|viết tắt}} {{ja-r|比|ひ|caps=y}}
==={{section|etym}}===
Dạng chính tả [[Katakana]] của {{ja-r|比律賓|^フィリピン|Philippines}}, có thể từ {{der|ja|zh|菲律賓}}, từ {{der|ja|en|Philippines}}, từ {{der|ja|fr|Philippines}}, từ {{der|ja|es|Filipinas}}.
==={{section|pron}}===
{{ja-pron|acc=a|acc_ref=SMK5}}{{rfap|ja}}
==={{section|pr-noun}}===
{{ja-pos|proper}}
# {{tcl|ja|Philippines|id=Q928}}
===={{section|syn}}====
* {{ja-r|比国|^ひこく}}
* {{ja-r|フィリピン諸島|^フィリピン しょとう}}
** {{ja-r|比律賓諸島|^フィリピン しょとう}}
*** {{ja-r|比島|^ひ とう}}
* {{ja-r|非利皮那|^フィリピーナ}} {{q|không còn dùng}}
* {{ja-r|呂宋|^ルソン}}
==={{section|see}}===
{{list:quốc gia của châu Á/ja}}
==={{section|ref}}===
{{reflist}}
cw7gl3ptjzlkg4kpv6y2hitalcv9kms
Thành viên:TienMinh-mun6xnChing/Các mục từ đã tạo
2
317919
2573739
2572672
2026-10-26T23:32:13Z
TienMinh-mun6xnChing
57893
/* */
2573739
wikitext
text/x-wiki
Dưới đây là danh sách các mục từ tôi đã tạo. Tôi xin phép gọi đây là '''Từ Điển Tiến Minh''', tôi đã dày công biên soạn đầy đủ, có 2 tập, tập 1 gồm có 223 từ!
Có thể xem đầy đủ tại:
[https://xtools.wmcloud.org/pages/vi.wiktionary.org/Renamed_user_3b0ac64b1d74ce1fbe5382d087ed3d0b Tài khoản cũ] (cũ, 223 mục từ)
[https://xtools.wmcloud.org/pages/vi.wiktionary.org/TienMinh-mun6xnChing Hiện tại] (mới, tập 2)
Các mục từ Tiếng Việt được chắt lọc trong từ điển của tôi bao gồm:
#tinh linh
#ấn triện
#phong ấn
#phỏng tác
#tấu sớ
#cố tổng
#mơ mẩn
#trí huệ
#huyền thuật
#ấn chương
#mạn họa
#vệ úy
#ái kỷ (bệnh lý)
#trừ độc
#hạ độc
#nhiều người
#biến âm
#bồ chính
#đại họa
#Lạc dân
#Lạc tướng
#(c)ương ngạnh
#cây nhỡ (chỉ loài cây khó nhận biết)
#cối tẩu
#lai hóa
#Nhơn đạo
#đạo Khổng
#đạo Nho
#sứ đồ
#thánh tông đồ
#nghìn trùng (cách viết khác)
#quan hệ họ hàng (cách viết khác)
#xuất nguồn
#hồi tỵ
#kỹ trị
#uổng công
#bình thủy
#mất mật
#bươn trải
#khôn tả
#ngẫn ngờ
#lấy vợ
#hạ gục
#ế độ (từ lóng)
#gượng sống
#đồ họa
#chính ủy
#ma pháp
#huyền thuật
#cương thi
#thủy quái
#lốc xoáy
#lùm xùm
#bêu rếu
#thủy tổ
#Hà Đồng
#long ỷ
#tháng nhuận
#muôn loài
#muôn vật
#đại (trùng) tu
#uyên thúy
#chia trí
#công đạo
#hưng cảm
#tiểu hành tinh
#cha đời (thông tục)
#xị mặt (thông tục)
#miễn thị thực
#Mỹ Lợi Kiên (danh từ riêng)
#Hợp chúng quốc Hoa Kỳ (danh từ riêng)
#Anh ngữ
#Mỹ quốc (danh từ riêng)
#miễn nhiễm
#tia số
#trục số
#bén rễ
#đại siêu thị
#tạm ngừng
#tạm hoãn
#chấp điếu
#cúng điếu
#song tiện
#cạn phước
#phước đức
#phước báu
#công đức vô lượng
#tích đức
#khăn tang
#lễ tang
#kết trái
#ươm mầm
#hưu miên
#tùy miên
#kỳ án
#tạo phước
#phước lành
#trai tân
#xì trây (từ lóng)
#dương hoà
#ngồng tỏi
#nhân tướng học
#bá khí
#miễn tội
#miễn truy tố
#miễn tố
#lãnh án
#lĩnh án
#tép tỏi
#búp măng
#đại thánh
#độ lớn
#tam giác vuông cân
#đun sôi
#trại ca
#tót vót
#song ca
#hòa ca
#khúc ca
#khúc nhạc
#điệp từ
#điệp cấu trúc
#tốc độ căn quân phương
#hoạt náo
#làm công ăn lương
#gầm cầu
#trụ cầu
#phạt nóng
#phạt nguội
#tin nóng
#đại án
#lực lượng chức năng
#người lính
#người xem
#hình thoi
#vị thần
#đại nhân
#viên quan
#lương sư
#hưng quốc
#quy án
#láo liếng
#bố đời (từ lóng)
#trật khớp
#khuỷu tay
#khớp gối
#khuỷu chân
#chia hết
#nhân tử
#ước (số) chung lớn nhất
#bội (số) chung nhỏ nhất
#gia tốc trọng trường
#mu bàn tay
#mu bàn chân
#lòng bàn chân
#lòng se điếu
#chèo bẻo đen
#viêm da cơ địa
#chàm thể tạng
#bù giờ
#ngũ vị hương
#diệt khẩu
#cửu vĩ hồ
#tụ đề
#tụ ngậm
#vát cạnh
#vát góc
#chặt góc
#bo góc
#cường kinh
#thống kinh
#bế kinh
#mạng nội bộ
#toàn thư
#biên độ dao động
#độ lệch chuẩn
#độ lệch tiêu chuẩn
#tân sinh viên
#tân thủ
#mất tiêu
#láo lường
#phông bạt
#khẩu ước
#kiếm sĩ
#máy kiểm kho
#nợ công
#vốn mồi
#mồi xả
#kim bài
#xá lị
#Mê Kông (danh từ riêng)
#Cửu Long (danh từ riêng)
#người đồng mình (văn chương, từ không chính thức)
#đại đội
#phó đại đội trưởng
#đại đội phó
#thăng cấp
#truyền chức
#loa phóng thanh
#loa phát thanh
#ảo ma Canada (từ lóng)
#áng văn
#thiên cổ kỳ bút
#áng thiên cổ kỳ bút
#thiên cổ hùng văn
#phòng vệ chính đáng
#tình thế cấp thiết
#dân quân tự vệ
#dân quân thường trực
#đại tướng
#Đảng
#long ngai
#ngai hoàng đế
#ân trạch
#ơn trạch (cách viết khác)
#xử nghiêm
#canh y
#cảm tử quân
#quyết tử quân
#quân cảm tử
#ngai vua
#long thai
#quản ngục
#cua hoàng đế
#chuối tiến vua
#rau tiến vua
#rau cần biển (cách viết khác)
#rau công sôi (cách viết khác)
#Tháp Hà Nội (danh từ riêng)
#Vinh Quang (danh từ riêng)
#chí phải
#rau cống (cách viết khác)
#kiến chúa
#kiến thợ
#kiến lính
#khó đoán
#khó lường
#kiến thợ mộc
#giáp mối
#mũi khoan
#mũi vát
#sắc nhọn
#trại giáo dưỡng
#trại cải tạo
#khu đô thị
#chủ đầu tư
#ngân lượng
#quỹ mở
#quỹ đóng
#nhà đầu tư
#mại vô
#cục nợ (từ lóng)
#nhào vô
#gánh nặng
#xoáy thuận
#xoáy tụ
#giông lốc
#giông tố
#mái lợp
#gạch ngói (cách viết khác)
#thấm dột
#mái ngói (cách viết khác)
#mái tôn (cách viết khác)
#mí tôn (từ không chính thức, cách viết khác)
#xì nách
#mỳ gói
#cá viên
#hằng đẳng thức
#báo đời (thông tục)
#sang chảnh (thông tục)
#mắng yêu (thông tục)
#khinh công
#chân ái
#lối sống (cách viết khác)
#lối ra (cách viết khác)
#đa nhân cách
#vĩ cuồng
#ái nhi (bệnh lý)
#cấm cữ (cách viết khác)
#kiêng húy
#kỵ nhật
#tỵ húy
#bộ định tuyến
#trực tuần
#đại hiệp
#sánh kịp
#vận tốc căn quân phương
#đường trung bình
#đường trung tuyến
#cạnh bên
#kề bù
#tia đối
#so le trong
#góc trong cùng phía
#đối đỉnh
#phép chiếu
#đường đẳng sâu
#lũy đẳng
#lũy linh
#đới ôn hòa (cách viết khác)
#đảng chính trị
#xung đột lợi ích
#kỳ vương
#tai trong
#vo tròn
#vây quanh
#trót lỡ
#lở mép (bệnh lý)
#chốc mép (cách viết khác)
#vát mép (cách viết khác)
#bo tròn (cách viết khác)
#làm lụm (cách viết khác)
#mãn nhãn (thông tục)
#sang vành (thông tục)
#gội đầu
#khóe miệng
#đau rát (cách viết khác)
#nhúng chàm
#ảo ma Canada (thông tục)
#Cát Kỵ (danh từ riêng)
#đứng quanh
#kiêng tránh (cách viết khác)
#ngớ người (thông tục)
#chồng sóng (chồng mí, chồng mái) (từ không chính thức, cách viết khác)
#lợn cưới (từ không chính thức)
#hôi của (thông tục)
#hưởng lợi
#ngoài giờ
#tăng ca
#tan ca
#nặm pịa
#nậm pịa (cách viết khác)
#quây quanh
#pịa
#Tiểu Cường (danh từ riêng)
#Quốc xã
#thua trận (cách viết khác)
#đệt mợ (từ lóng, thô tục)
0ozbn1skk5r4twyo5kfcaatj5ajyap2
2573760
2573739
2026-10-27T03:54:51Z
TienMinh-mun6xnChing
57893
/* */
2573760
wikitext
text/x-wiki
Dưới đây là danh sách các mục từ tôi đã tạo. Tôi xin phép gọi đây là '''Từ Điển Tiến Minh''', tôi đã dày công biên soạn đầy đủ, có 2 tập, tập 1 gồm có 223 từ!
Có thể xem đầy đủ tại:
[https://xtools.wmcloud.org/pages/vi.wiktionary.org/Renamed_user_3b0ac64b1d74ce1fbe5382d087ed3d0b Tài khoản cũ] (cũ, 223 mục từ)
[https://xtools.wmcloud.org/pages/vi.wiktionary.org/TienMinh-mun6xnChing Hiện tại] (mới, tập 2)
Các mục từ Tiếng Việt được chắt lọc trong từ điển của tôi bao gồm:
#tinh linh
#tánh tình
#ấn triện
#phong ấn
#phỏng tác
#tấu sớ
#cố tổng
#mơ mẩn
#trí huệ
#huyền thuật
#ấn chương
#mạn họa
#vệ úy
#ái kỷ (bệnh lý)
#trừ độc
#hạ độc
#hạ độc thủ
#nhiều người
#biến âm
#bồ chính
#đại họa
#Lạc dân
#Lạc tướng
#(c)ương ngạnh
#cây nhỡ (chỉ loài cây khó nhận biết)
#cối tẩu
#kiếp số
#lai hóa
#Nhơn đạo
#đạo Khổng
#đạo Nho
#sứ đồ
#thánh tông đồ
#nghìn trùng (cách viết khác)
#quan hệ họ hàng (cách viết khác)
#xuất nguồn
#hồi tỵ
#kỹ trị
#uổng công
#bình thủy
#mất mật
#bươn trải
#khôn tả
#ngẫn ngờ
#lấy vợ
#hạ gục
#ế độ (từ lóng)
#gượng sống
#đồ họa
#chính ủy
#ma pháp
#huyền thuật
#cương thi
#thủy quái
#lốc xoáy
#lùm xùm
#bêu rếu
#thủy tổ
#Hà Đồng
#long ỷ
#tháng nhuận
#muôn loài
#muôn vật
#đại (trùng) tu
#uyên thúy
#chia trí
#công đạo
#hưng cảm
#tiểu hành tinh
#cha đời (thông tục)
#xị mặt (thông tục)
#miễn thị thực
#Mỹ Lợi Kiên (danh từ riêng)
#Hợp chúng quốc Hoa Kỳ (danh từ riêng)
#Anh ngữ
#Mỹ quốc (danh từ riêng)
#miễn nhiễm
#tia số
#trục số
#bén rễ
#đại siêu thị
#tạm ngừng
#tạm hoãn
#chấp điếu
#cúng điếu
#song tiện
#cạn phước
#phước đức
#phước báu
#nhập đồng
#khấu kiến
#dân phu
#chân nhân
#chơn chánh
#căn quả
#căn đồng
#công đức vô lượng
#tích đức
#khăn tang
#lễ tang
#kết trái
#ươm mầm
#hưu miên
#tùy miên
#kỳ án
#tạo phước
#phước lành
#trai tân
#xì trây (từ lóng)
#dương hoà
#ngồng tỏi
#nhân tướng học
#bá khí
#miễn tội
#miễn truy tố
#miễn tố
#lãnh án
#lĩnh án
#tép tỏi
#búp măng
#đại thánh
#độ lớn
#tam giác vuông cân
#đun sôi
#trại ca
#tót vót
#song ca
#hòa ca
#khúc ca
#khúc nhạc
#điệp từ
#điệp cấu trúc
#tốc độ căn quân phương
#hoạt náo
#làm công ăn lương
#gầm cầu
#trụ cầu
#phạt nóng
#phạt nguội
#tin nóng
#đại án
#lực lượng chức năng
#người lính
#người xem
#hình thoi
#vị thần
#đại nhân
#viên quan
#lương sư
#hưng quốc
#quy án
#láo liếng
#bố đời (từ lóng)
#trật khớp
#khuỷu tay
#khớp gối
#khuỷu chân
#chia hết
#nhân tử
#ước (số) chung lớn nhất
#bội (số) chung nhỏ nhất
#gia tốc trọng trường
#mu bàn tay
#mu bàn chân
#lòng bàn chân
#lòng se điếu
#chèo bẻo đen
#viêm da cơ địa
#chàm thể tạng
#bù giờ
#ngũ vị hương
#diệt khẩu
#cửu vĩ hồ
#tụ đề
#tụ ngậm
#vát cạnh
#vát góc
#chặt góc
#bo góc
#cường kinh
#thống kinh
#bế kinh
#mạng nội bộ
#toàn thư
#biên độ dao động
#độ lệch chuẩn
#độ lệch tiêu chuẩn
#tân sinh viên
#tân thủ
#mất tiêu
#láo lường
#phông bạt
#khẩu ước
#kiếm sĩ
#máy kiểm kho
#nợ công
#vốn mồi
#mồi xả
#kim bài
#xá lị
#Mê Kông (danh từ riêng)
#Cửu Long (danh từ riêng)
#người đồng mình (văn chương, từ không chính thức)
#đại đội
#phó đại đội trưởng
#đại đội phó
#thăng cấp
#truyền chức
#loa phóng thanh
#loa phát thanh
#ảo ma Canada (từ lóng)
#áng văn
#thiên cổ kỳ bút
#áng thiên cổ kỳ bút
#thiên cổ hùng văn
#phòng vệ chính đáng
#tình thế cấp thiết
#dân quân tự vệ
#dân quân thường trực
#đại tướng
#Đảng
#long ngai
#ngai hoàng đế
#ân trạch
#ơn trạch (cách viết khác)
#xử nghiêm
#canh y
#cảm tử quân
#quyết tử quân
#quân cảm tử
#ngai vua
#long thai
#quản ngục
#cua hoàng đế
#chuối tiến vua
#rau tiến vua
#rau cần biển (cách viết khác)
#rau công sôi (cách viết khác)
#Tháp Hà Nội (danh từ riêng)
#Vinh Quang (danh từ riêng)
#chí phải
#rau cống (cách viết khác)
#kiến chúa
#kiến thợ
#kiến lính
#khó đoán
#khó lường
#kiến thợ mộc
#giáp mối
#mũi khoan
#mũi vát
#sắc nhọn
#trại giáo dưỡng
#trại cải tạo
#khu đô thị
#chủ đầu tư
#ngân lượng
#quỹ mở
#quỹ đóng
#nhà đầu tư
#mại vô
#cục nợ (từ lóng)
#nhào vô
#gánh nặng
#xoáy thuận
#xoáy tụ
#giông lốc
#giông tố
#mái lợp
#gạch ngói (cách viết khác)
#thấm dột
#mái ngói (cách viết khác)
#mái tôn (cách viết khác)
#mí tôn (từ không chính thức, cách viết khác)
#xì nách
#mỳ gói
#cá viên
#hằng đẳng thức
#báo đời (thông tục)
#sang chảnh (thông tục)
#mắng yêu (thông tục)
#khinh công
#chân ái
#lối sống (cách viết khác)
#lối ra (cách viết khác)
#đa nhân cách
#vĩ cuồng
#ái nhi (bệnh lý)
#cấm cữ (cách viết khác)
#kiêng húy
#kỵ nhật
#tỵ húy
#bộ định tuyến
#trực tuần
#đại hiệp
#sánh kịp
#vận tốc căn quân phương
#đường trung bình
#đường trung tuyến
#cạnh bên
#kề bù
#tia đối
#so le trong
#góc trong cùng phía
#đối đỉnh
#phép chiếu
#đường đẳng sâu
#lũy đẳng
#lũy linh
#đới ôn hòa (cách viết khác)
#đảng chính trị
#xung đột lợi ích
#kỳ vương
#tai trong
#vo tròn
#vây quanh
#trót lỡ
#lở mép (bệnh lý)
#chốc mép (cách viết khác)
#vát mép (cách viết khác)
#bo tròn (cách viết khác)
#làm lụm (cách viết khác)
#mãn nhãn (thông tục)
#sang vành (thông tục)
#gội đầu
#khóe miệng
#đau rát (cách viết khác)
#nhúng chàm
#ảo ma Canada (thông tục)
#Cát Kỵ (danh từ riêng)
#đứng quanh
#kiêng tránh (cách viết khác)
#ngớ người (thông tục)
#chồng sóng (chồng mí, chồng mái) (từ không chính thức, cách viết khác)
#lợn cưới (từ không chính thức)
#hôi của (thông tục)
#hưởng lợi
#ngoài giờ
#tăng ca
#tan ca
#nặm pịa
#nậm pịa (cách viết khác)
#quây quanh
#pịa
#Tiểu Cường (danh từ riêng)
#Quốc xã
#thua trận (cách viết khác)
#đệt mợ (từ lóng, thô tục)
i2yd6zdb2b7qo8fdmt8775x6y6zqvmf
2573771
2573760
2026-10-27T04:17:47Z
TienMinh-mun6xnChing
57893
/* */
2573771
wikitext
text/x-wiki
Dưới đây là danh sách các mục từ tôi đã tạo. Tôi xin phép gọi đây là '''Từ Điển Tiến Minh''', tôi đã dày công biên soạn đầy đủ, có 2 tập, tập 1 gồm có 223 từ!
Có thể xem đầy đủ tại:
[https://xtools.wmcloud.org/pages/vi.wiktionary.org/Renamed_user_3b0ac64b1d74ce1fbe5382d087ed3d0b Tài khoản cũ] (cũ, 223 mục từ)
[https://xtools.wmcloud.org/pages/vi.wiktionary.org/TienMinh-mun6xnChing Hiện tại] (mới, tập 2)
Các mục từ Tiếng Việt được chắt lọc trong từ điển của tôi bao gồm:
#tinh linh
#tánh tình
#ấn triện
#phong ấn
#phỏng tác
#tấu sớ
#cố tổng
#mơ mẩn
#trí huệ
#huyền thuật
#ấn chương
#mạn họa
#vệ úy
#ái kỷ (bệnh lý)
#trừ độc
#hạ độc
#hạ độc thủ
#nhiều người
#biến âm
#bồ chính
#đại họa
#Lạc dân
#Lạc tướng
#(c)ương ngạnh
#cây nhỡ (chỉ loài cây khó nhận biết)
#cối tẩu
#kiếp số
#lai hóa
#Nhơn đạo
#đạo Khổng
#đạo Nho
#chư tiên
#sứ đồ
#thánh tông đồ
#nghìn trùng (cách viết khác)
#quan hệ họ hàng (cách viết khác)
#xuất nguồn
#hồi tỵ
#kỹ trị
#uổng công
#bình thủy
#mất mật
#bươn trải
#khôn tả
#ngẫn ngờ
#lấy vợ
#hạ gục
#ế độ (từ lóng)
#gượng sống
#đồ họa
#chính ủy
#ma pháp
#huyền thuật
#cương thi
#thủy quái
#lốc xoáy
#lùm xùm
#bêu rếu
#thủy tổ
#Hà Đồng
#long ỷ
#tháng nhuận
#muôn loài
#muôn vật
#đại (trùng) tu
#uyên thúy
#chia trí
#công đạo
#hưng cảm
#tiểu hành tinh
#cha đời (thông tục)
#xị mặt (thông tục)
#miễn thị thực
#Mỹ Lợi Kiên (danh từ riêng)
#Hợp chúng quốc Hoa Kỳ (danh từ riêng)
#Anh ngữ
#Mỹ quốc (danh từ riêng)
#miễn nhiễm
#tia số
#trục số
#bén rễ
#đại siêu thị
#tạm ngừng
#tạm hoãn
#chấp điếu
#cúng điếu
#song tiện
#cạn phước
#phước đức
#phước báu
#nhập đồng
#khấu kiến
#dân phu
#chân nhân
#chơn chánh
#căn quả
#căn đồng
#công đức vô lượng
#tích đức
#khăn tang
#lễ tang
#kết trái
#ươm mầm
#hưu miên
#tùy miên
#kỳ án
#tạo phước
#phước lành
#trai tân
#xì trây (từ lóng)
#dương hoà
#ngồng tỏi
#nhân tướng học
#bá khí
#miễn tội
#miễn truy tố
#miễn tố
#lãnh án
#lĩnh án
#tép tỏi
#búp măng
#đại thánh
#độ lớn
#tam giác vuông cân
#đun sôi
#trại ca
#tót vót
#song ca
#hòa ca
#khúc ca
#khúc nhạc
#điệp từ
#điệp cấu trúc
#tốc độ căn quân phương
#hoạt náo
#làm công ăn lương
#gầm cầu
#trụ cầu
#phạt nóng
#phạt nguội
#tin nóng
#đại án
#lực lượng chức năng
#người lính
#người xem
#hình thoi
#vị thần
#đại nhân
#viên quan
#lương sư
#hưng quốc
#quy án
#láo liếng
#bố đời (từ lóng)
#trật khớp
#khuỷu tay
#khớp gối
#khuỷu chân
#chia hết
#nhân tử
#ước (số) chung lớn nhất
#bội (số) chung nhỏ nhất
#gia tốc trọng trường
#mu bàn tay
#mu bàn chân
#lòng bàn chân
#lòng se điếu
#chèo bẻo đen
#viêm da cơ địa
#chàm thể tạng
#bù giờ
#ngũ vị hương
#diệt khẩu
#cửu vĩ hồ
#tụ đề
#tụ ngậm
#vát cạnh
#vát góc
#chặt góc
#bo góc
#cường kinh
#thống kinh
#bế kinh
#mạng nội bộ
#toàn thư
#biên độ dao động
#độ lệch chuẩn
#độ lệch tiêu chuẩn
#tân sinh viên
#tân thủ
#mất tiêu
#láo lường
#phông bạt
#khẩu ước
#kiếm sĩ
#máy kiểm kho
#nợ công
#vốn mồi
#mồi xả
#kim bài
#xá lị
#Mê Kông (danh từ riêng)
#Cửu Long (danh từ riêng)
#người đồng mình (văn chương, từ không chính thức)
#đại đội
#phó đại đội trưởng
#đại đội phó
#thăng cấp
#truyền chức
#loa phóng thanh
#loa phát thanh
#ảo ma Canada (từ lóng)
#áng văn
#thiên cổ kỳ bút
#áng thiên cổ kỳ bút
#thiên cổ hùng văn
#phòng vệ chính đáng
#tình thế cấp thiết
#dân quân tự vệ
#dân quân thường trực
#đại tướng
#Đảng
#long ngai
#ngai hoàng đế
#ân trạch
#ơn trạch (cách viết khác)
#xử nghiêm
#canh y
#cảm tử quân
#quyết tử quân
#quân cảm tử
#ngai vua
#long thai
#quản ngục
#cua hoàng đế
#chuối tiến vua
#rau tiến vua
#rau cần biển (cách viết khác)
#rau công sôi (cách viết khác)
#Tháp Hà Nội (danh từ riêng)
#Vinh Quang (danh từ riêng)
#chí phải
#rau cống (cách viết khác)
#kiến chúa
#kiến thợ
#kiến lính
#khó đoán
#khó lường
#kiến thợ mộc
#giáp mối
#mũi khoan
#mũi vát
#sắc nhọn
#trại giáo dưỡng
#trại cải tạo
#khu đô thị
#chủ đầu tư
#ngân lượng
#quỹ mở
#quỹ đóng
#nhà đầu tư
#mại vô
#cục nợ (từ lóng)
#nhào vô
#gánh nặng
#xoáy thuận
#xoáy tụ
#giông lốc
#giông tố
#mái lợp
#gạch ngói (cách viết khác)
#thấm dột
#mái ngói (cách viết khác)
#mái tôn (cách viết khác)
#mí tôn (từ không chính thức, cách viết khác)
#xì nách
#mỳ gói
#cá viên
#hằng đẳng thức
#báo đời (thông tục)
#sang chảnh (thông tục)
#mắng yêu (thông tục)
#khinh công
#chân ái
#lối sống (cách viết khác)
#lối ra (cách viết khác)
#đa nhân cách
#vĩ cuồng
#ái nhi (bệnh lý)
#cấm cữ (cách viết khác)
#kiêng húy
#kỵ nhật
#tỵ húy
#bộ định tuyến
#trực tuần
#đại hiệp
#sánh kịp
#vận tốc căn quân phương
#đường trung bình
#đường trung tuyến
#cạnh bên
#kề bù
#tia đối
#so le trong
#góc trong cùng phía
#đối đỉnh
#phép chiếu
#đường đẳng sâu
#lũy đẳng
#lũy linh
#đới ôn hòa (cách viết khác)
#đảng chính trị
#xung đột lợi ích
#kỳ vương
#tai trong
#vo tròn
#vây quanh
#trót lỡ
#lở mép (bệnh lý)
#chốc mép (cách viết khác)
#vát mép (cách viết khác)
#bo tròn (cách viết khác)
#làm lụm (cách viết khác)
#mãn nhãn (thông tục)
#sang vành (thông tục)
#gội đầu
#khóe miệng
#đau rát (cách viết khác)
#nhúng chàm
#ảo ma Canada (thông tục)
#Cát Kỵ (danh từ riêng)
#đứng quanh
#kiêng tránh (cách viết khác)
#ngớ người (thông tục)
#chồng sóng (chồng mí, chồng mái) (từ không chính thức, cách viết khác)
#lợn cưới (từ không chính thức)
#hôi của (thông tục)
#hưởng lợi
#ngoài giờ
#tăng ca
#tan ca
#nặm pịa
#nậm pịa (cách viết khác)
#quây quanh
#pịa
#Tiểu Cường (danh từ riêng)
#Quốc xã
#thua trận (cách viết khác)
#đệt mợ (từ lóng, thô tục)
o9lk46v7a1dprnq56wrva12slz8lnyf
nonagenarios
0
322571
2573819
2197133
2026-10-27T07:20:15Z
Hiyuune
50834
2573819
wikitext
text/x-wiki
=={{langname|la}}==
==={{section|pron}}===
* {{la-IPA|nōnāgēnāriōs}}
==={{section|adj}}===
{{head|la|Biến thể hình thái tính từ|head=nōnāgēnāriōs}}
# {{inflection of|la|nōnāgēnārius||acc|m|p}}
=={{langname|es}}==
==={{section|pron}}===
{{es-pr}}
==={{section|adj}}===
{{head|es|Biến thể hình thái tính từ}}
# {{adj form of|es|nonagenario||m|p}}
==={{section|n}}===
{{head|es|Biến thể hình thái danh từ}}
# {{plural of|es|nonagenario}}
mfqn0ytbxj530a3wg6ep0ilgtn501tl
minoritarios
0
322572
2573820
2197137
2026-10-27T07:20:17Z
Hiyuune
50834
2573820
wikitext
text/x-wiki
{{also|minoritários}}
=={{langname|es}}==
==={{section|pron}}===
{{es-pr}}
==={{section|adj}}===
{{head|es|Biến thể hình thái tính từ}}
# {{adj form of|es|minoritario||m|p}}
im9v1j9kc64a0yf5x9cfhtb032tygns
tö-lam-rī-tu ta-neūi-sö-mat
0
324896
2573678
2207390
2026-10-26T15:20:24Z
WhoAlone
40420
2573678
wikitext
text/x-wiki
== {{langname|caq}} ==
=== {{ĐM|noun}} ===
{{head|caq|Danh từ}}
# [[sao chổi|Sao chổi]].
=== {{ĐM|ref}} ===
* G. Whitehead (1925). ''Dictionary of the Car Nicobarese Language''.
{{c|caq|Thiên thể}}
l2ov9m3jx0s7lkecnjgldoi2cbilqzu
dak-ta-karū
0
328231
2573655
2210462
2026-10-26T15:07:23Z
WhoAlone
40420
2573655
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/dak-ta-karu/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[sông]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Sông}}
nnzxhg6gxva9qvytfdg4lygrgaluupw
hanòk-ngôa
0
328239
2573646
2210470
2026-10-26T15:00:42Z
WhoAlone
40420
2573646
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/hanɔk-ŋoa/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[tôm hùm]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Ngành Chân đốt}}
21qi6m4k72poz5ii7dhalf5zf80lewi
yōm yööng ki-kānö
0
331554
2573661
2338040
2026-10-26T15:13:15Z
WhoAlone
40420
2573661
wikitext
text/x-wiki
=={{langname|caq}}==
==={{ĐM|pron}}===
* {{IPA4|caq|/joˑm jəˑŋ kikɑːnə/}}
==={{ĐM|noun}}===
{{head|caq|Danh từ}}
# [[bà]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|caq|Thành viên nữ trong gia đình}}
bwbpvbn2m331b68qaj923noixgxr6sr
en-koin
0
332077
2573652
2216711
2026-10-26T15:06:35Z
WhoAlone
40420
2573652
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔen-koɲ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[cằm]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Khuôn mặt}}
0e7wct1qot6e8yf7jw2d309kr4vgw8w
hâṅsh-kapâ
0
332083
2573643
2216718
2026-10-26T14:55:04Z
WhoAlone
40420
2573643
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/hãʃ-kapa/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[gió bắc]].
#:{{synonym|ncb|kabâ}}
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Hiện tượng khí quyển}}
pwcbhrxl942b7zesv72rahpfor92v04
hâṅsh-kapâ-shohōng
0
332085
2573639
2216720
2026-10-26T14:52:31Z
WhoAlone
40420
2573639
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/hãʃ-kapa-ʃohɔŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[gió]] [[tây bắc]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Hiện tượng khí quyển}}
bk5nvl20rhfncrishxehv6oy3kdxkzm
hâṅsh-fūl-tā
0
332086
2573644
2216721
2026-10-26T14:55:17Z
WhoAlone
40420
2573644
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/hãʃ-ful-ta/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[gió]] [[đông bắc]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Hiện tượng khí quyển}}
itzo864knh54w83pm1jbhh146ao9mvn
heṅ-heng
0
332219
2573637
2216941
2026-10-26T14:50:43Z
WhoAlone
40420
2573637
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|alternative form}}===
* {{alter|ncb|hē-heng}}
==={{ĐM|pron}}===
* {{IPA4|ncb|/hẽ-heŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[ban ngày]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian}}
425lnsuwxuphgrb0t3avx6ph9wj2bo1
hē-heng
0
332220
2573638
2216942
2026-10-26T14:52:21Z
WhoAlone
40420
2573638
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/he-heŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} {{alternative spelling of|ncb|heṅ-heng}}.
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian}}
39iv12aeofazcp51q5i0z4awrtp9z0s
henpak-ngaich
0
332281
2573636
2217037
2026-10-26T14:50:02Z
WhoAlone
40420
2573636
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/henpak-ŋac/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[nồi]] [[nấu]] [[ăn]].
#:{{synonym|ncb|panòkenlait}}
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer
{{c|ncb|Dụng cụ nhà bếp}}
bnyugypaam5wjiunqb4d5b6mgld9fgc
dak-wuashe
0
332284
2573651
2217044
2026-10-26T15:06:23Z
WhoAlone
40420
2573651
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[thác nước]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer
{{c|ncb|Vùng nước}}
2s24yu2koi9dkws2kdlwvpcq5kfow8b
dâk
0
332285
2573650
2217045
2026-10-26T15:05:13Z
WhoAlone
40420
2573650
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[nước]].
#:{{synonym|ncb|râk}}
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer
{{c|ncb|Nước}}
r4z6gk23fzhc3g78u9pmjr2vdy39z09
ām
0
332290
2573658
2217102
2026-10-26T15:07:57Z
WhoAlone
40420
2573658
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔɑˑm/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[chó]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Chó}}
gobvdvvuql1xl6hco50b6vu63ky8gz0
anāṅh-tö-sĕ
0
332312
2573657
2217088
2026-10-26T15:07:49Z
WhoAlone
40420
2573657
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔɑnãˑxtɑsɛ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[đám cưới]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Hôn nhân}}
be7vj3pksbkcvz78ku3wk8qzw1jd6zo
hin-sīṅch
0
332317
2573633
2217084
2026-10-26T14:48:47Z
WhoAlone
40420
2573633
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|etym}}===
So sánh {{cognate|caq|in-sëny}}, {{cognate|tef|in-sëny}}, {{cognate|nik|in-sēch}}.
==={{ĐM|pron}}===
* {{IPA4|ncb|/xinsĩˑc/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} Một loại [[trái cây]] ăn được.
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Trái cây}}
9vii6e84rs5if87a46sysg6ynla05iw
tö-hëm-mak
0
332887
2573679
2218046
2026-10-26T15:20:47Z
WhoAlone
40420
2573679
wikitext
text/x-wiki
== {{langname|caq}} ==
=== {{ĐM|pron}} ===
* {{IPA4|caq|/t̪ɑxɛˑm mɑˑk/}}
=== {{ĐM|noun}} ===
{{head|caq|Danh từ}}
# [[sông]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|caq|Sông}}
8x6x74junjj1mo7ijcb0ewyav5wzgm8
Bản mẫu:pl-adecl
10
338109
2573723
2275888
2026-10-26T16:39:43Z
Hiyuune
50834
2573723
wikitext
text/x-wiki
{{#invoke:zlw-lch-decl|adjective|lang=pl}}<!--
--><noinclude>{{documentation}}</noinclude>
iv9v3wfee8yjwpoibqdusmur68tuvi6
u-hööḵ
0
340328
2573665
2230485
2026-10-26T15:15:06Z
WhoAlone
40420
2573665
wikitext
text/x-wiki
=={{langname|caq}}==
==={{ĐM|pron}}===
* {{IPA4|caq|/ʔuxəˑʔ/}}
==={{ĐM|noun}}===
{{head|caq|Danh từ}}
# [[trứng]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|caq|Trứng}}
3wzpxaedwy5qtpds5icmie6qc55a6ib
uk alāha
0
340331
2573663
2230488
2026-10-26T15:13:38Z
WhoAlone
40420
2573663
wikitext
text/x-wiki
=={{langname|caq}}==
==={{ĐM|pron}}===
* {{IPA4|caq|/ʔuˑk ʔɑlɑːxɑ/}}
==={{ĐM|noun}}===
{{head|caq|Danh từ}}
# [[da]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|caq|Bộ phận cơ thể}}
08jttd08687aol8wmdhtavpf5c9act6
płaskodenny
0
363452
2573728
2283581
2026-10-26T16:51:07Z
Hiyuune
50834
/* Tiếng Ba Lan */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2573728
wikitext
text/x-wiki
=={{langname|pl}}==
==={{ĐM|etym}}===
{{ety|pl|:af|płaski|-o-|dno|-ny|text=+|tree=1}}
==={{ĐM|pron}}===
{{pl-pr|a=LL-Q809 (pol)-Olaf-płaskodenny.wav}}
==={{ĐM|adj}}===
{{pl-adj|-|adv=-}}
# Có [[đáy]] [[phẳng]].
===={{ĐM|decl}}====
{{pl-adecl}}
==={{ĐM|further}}===
* {{R:pl:PWN}}
d9xq7ngs9ahyhm8pjjri1c8mgvpfohq
trzysta
0
374587
2573726
2310082
2026-10-26T16:48:30Z
Hiyuune
50834
2573726
wikitext
text/x-wiki
=={{langname|pl}}==
{{number box|pl}}
==={{ĐM|etym}}===
{{dercat|pl|sla-pro|inh=1}}
{{inh+|pl|zlw-opl|trzysta}}. {{surf|+univ|pl|trzy|sto|alt2=sta}}.
==={{ĐM|pron}}===
{{pl-pr|a=Pl-trzysta.ogg;Pl-trzysta-2.ogg|mp=#}}
==={{ĐM|numeral}}===
{{head|pl|Số từ}}
# [[ba|Ba]] [[trăm]].
===={{ĐM|decl}}====
{{pl-adecl|<num>}}
==={{ĐM|further}}===
* {{R:pl:WSJP}}
* {{R:pl:PWN}}
* {{R:pl:SXVI|+|100173}}
* {{R:pl:SXVII|TRZYSTA|48039|ER|22.02.2022}}
* {{R:pl:SJP1807}}
* {{R:pl:SJP1861}}
* {{R:pl:SJP1900||161|7}}
{{cln|pl|Số đếm}}
{{C|pl|Ba}}
=={{langname|zlw-opl}}==
==={{ĐM|etym}}===
{{inh+|zlw-opl|sla-pro|*tri sъta}}. {{surf|+univ|zlw-opl|trzy|sto|alt2=sta}}. {{etydate|thế kỉ thứ 13}}.
==={{ĐM|pron}}===
* {{zlw-opl-IPA}}
==={{ĐM|numeral}}===
{{head|zlw-opl|Số từ}}
# [[ba|Ba]] [[trăm]].
===={{ĐM|desc}}====
* {{desc|pl|trzysta}}
* {{desc|szl|trzista}}
==={{ĐM|n}}===
{{zlw-opl-noun|nv-p}}
# {{ng|mức phạt thấp nhất trong hệ thống [[tiền]] phạt thời [[trung cổ]], ban đầu là ba trăm đồng [[muối]], sau này có [[giá trị]] thực khác.}}
==={{ĐM|ref}}===
* {{R:pl:Boryś}}
* {{R:pl:Mańczak}}
* {{R:zlw-opl:SPJSP}}
{{cln|zlw-opl|Số đếm}}
{{C|zlw-opl|Ba}}
20plpxp71vnao2w8j6ujcgmf4tf5e3e
wartogłowy
0
395470
2573727
2349680
2026-10-26T16:50:34Z
Hiyuune
50834
/* Từ nguyên */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2573727
wikitext
text/x-wiki
=={{langname|pl}}==
==={{section|etym}}===
{{ety|pl|:af|wart<id:hiện tại>|-o-|głowa|-y|text=+|tree=1}}
==={{section|pron}}===
{{pl-pr}}
==={{section|adj}}===
{{pl-adj}}
# {{lb|pl|poetic}} [[liều lĩnh|Liều lĩnh]] một cách [[dại dột]], [[vô ích]] và [[điên rồ]].
===={{section|decl}}====
{{pl-adecl}}
===={{section|drv}}====
{{col|pl|title=danh từ|wartogłowa|wartogłowie|wartogłów}}
==={{section|further}}===
* {{R:pl:WSJP}}
* {{R:pl:PWN}}
c695gmc3s7nzktdqt1vhteyhtziumip
Bản mẫu:normalized
10
420751
2573719
2572004
2026-10-26T16:31:50Z
Hiyuune
50834
Thay cả nội dung bằng “{{#invoke:normalized|show}}<noinclude>{{documentation}}</noinclude>”
2573719
wikitext
text/x-wiki
{{#invoke:normalized|show}}<noinclude>{{documentation}}</noinclude>
eq1ofq5pa3kdefuh64ergvgpw4uh7kk
Mô đun:zlw-lch-decl
828
421108
2573724
2573583
2026-10-26T16:47:28Z
Hiyuune
50834
2573724
Scribunto
text/plain
--[==[ intro:
This module implements the declension tables of the Lechitic languages: {{tl|pl-ndecl}} for Polish nouns and
{{tl|pl-adecl}} for Polish adjectives (both with their Middle Polish, Standard Kurpie and dialectal tables), and
{{tl|zlw-opl-ndecl}} for Old Polish nouns.
The following terminology is helpful to understand:
* The '''lemma''' is the word being declined, normally the nominative singular, or the nominative plural of a plurale
tantum. In a call it's followed by an inline spec of indicators in angle brackets, e.g.
`{{pl-ndecl|<m.anml.*.datu>}}` (the page name as an animal noun with a mobile ''e'' and the dative in ''-u'') or
`{{pl-ndecl|Morze<n.sg> Bałtyckie<+>}}`.
* A '''slot''' is a particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a
table.
* The '''stem''' is the lemma minus its nominative ending. A '''group''' is the set of nouns that share one set of
rules; a '''rule''' gives the forms of a slot for the stems that end in particular letters; and a '''copy''' is a
slot that takes its forms from another one. See [[Module:zlw-lch-decl/data/pl]] for the details.
* An '''alternation''' is a change to the stem that a rule asks for: dropping or inserting the mobile ''e'', ''ó''/''o''
and ''ą''/''ę'', and the palatalizations.
* A '''base''' is what [[Module:inflection utilities]] calls the parsed spec of a single word: its lemma, indicators and
overrides, plus its forms once it has been declined.
Authorship: [[User:Fenakhay]]
]==]
local export = {}
local M = require("Module:module loader").init {
require = {
accel = "Module:accel",
form_of = "Module:form of",
inflection_table = "Module:inflection-table",
inflection_utilities = "Module:inflection utilities",
JSON = "Module:JSON",
labels = "Module:labels",
languages = "Module:languages",
links = "Module:links",
parameters = "Module:parameters",
parse_utilities = "Module:parse utilities",
table = "Module:table",
template_parser = "Module:template parser",
utilities = "Module:utilities",
},
loadData = {
data = "Module:zlw-lch-decl/data",
headword_data = "Module:headword/data",
},
}
-- Return the data module of the language `code` (`Module:zlw-lch-decl/data/CODE`) and its language object. `entry` is
-- the entry point being invoked (`noun` or `adjective`); throw an error if `languages` in [[Module:zlw-lch-decl/data]]
-- doesn't list that entry for the language.
local function language_of(code, entry)
local language = code and M.data.languages[code]
if not language or not language[entry] then
local codes = {}
for known, entries in pairs(M.data.languages) do
if entries[entry] then
table.insert(codes, known)
end
end
table.sort(codes)
error(("The #invoke needs lang= with one of %s"):format(table.concat(codes, ", ")), 0)
end
return mw.loadData("Module:zlw-lch-decl/data/" .. code), M.languages.getByCode(code)
end
------------------------------------------------------------------------------------------------------------------------
-- Spec --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the indicators of a single word, i.e. the `<...>` after its lemma, e.g. `<m.anml.*.datu>`. `Spec.parse`
is the `parse_indicator_spec` callback passed to [[Module:inflection utilities]]; it returns the base of the word, with
its indicators by group and its overrides by slot. The indicators each template knows are listed under `indicators` in
the language's data module, and an unknown one is an error that lists the known ones.
]==]
local Spec = {}
Spec.__index = Spec
local function spec_error(message, text)
error(message .. " in the spec '" .. text .. "'.", 0)
end
-- Return the footnotes in a group that `split_alternating_runs` produced from a bracketed run, i.e. the bracketed
-- segments after the first segment. Throw an error if any text follows a footnote.
local function fetch_footnotes(group, text)
local footnotes
for i = 2, #group - 1, 2 do
if group[i + 1] ~= "" then
spec_error("Only another footnote can follow a footnote", text)
end
footnotes = footnotes or {}
table.insert(footnotes, group[i])
end
return footnotes
end
--[==[
Parse an override of one or more slots of a noun. There are two kinds of overrides:
* Endings, written `CASE[pl]ENDING:ENDING...`, e.g. `genu` or `insplami:mi`. These go on the stem that the slot's rule
uses; an ending that starts with an apostrophe goes after the whole lemma (`gen'a` on ''Google'' gives ''Google'a''),
and with `r:`, endings are written on the lemma like the rules' own (''Barthes'a'').
* Whole forms, written `CASE[pl]:FORM:FORM...`, e.g. `voc:człowiecze:człowieku`.
`CASE+CASE...` sets several cases at once, and `du` in place of `pl` names a dual slot (`nomdu`). Among endings, `+`
stands for the forms the rules give, so that e.g. `nomplowie:+` adds ''-owie'' to them. `-` stands for no ending (among
endings) or no form (among forms), and a footnote can follow any value. `depr` is the deprecative nominative plural of
a masculine personal noun. Return two values: the slots the override applies to, and an object describing it.
]==]
local Overrides = {}
function Overrides.parse(group, text)
local part = group[1]
local slots = {}
while true do
if mw.ustring.sub(part, 1, 4) == "depr" then
table.insert(slots, "depr_p")
part = mw.ustring.sub(part, 5)
else
local case = mw.ustring.sub(part, 1, 3)
if not M.data.case_codes[case] then
spec_error(("Unrecognized case '%s' in an override"):format(case), text)
end
part = mw.ustring.sub(part, 4)
if mw.ustring.find(part, "^pl") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_p")
elseif mw.ustring.find(part, "^du") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_d")
else
table.insert(slots, case .. "_s")
end
end
if mw.ustring.find(part, "^%+[a-z]") then
part = mw.ustring.sub(part, 2)
else
break
end
end
local override = {values = {}}
if mw.ustring.find(part, "^:") then
override.full = true
part = mw.ustring.sub(part, 2)
end
group[1] = part
for _, value_group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")) do
local value = value_group[1]
if value == "" then
spec_error("Use - for an empty ending or no form", text)
end
table.insert(override.values, {
form = value == "-" and "" or value,
default = not override.full and value == "+" or nil,
footnotes = fetch_footnotes(value_group, text),
})
end
return slots, override
end
-- The slots of an adjective table, which an override of {{tl|pl-adecl}} can name, with their accelerator tags (using the
-- codes in [[Module:form of/data]], `nv` = non-virile).
local ADJECTIVE_ACCEL = {
nom_m = "nom|m|s", nom_f = "nom|f|s", nom_n = "nom|n|s", nom_mp_pers = "vr|nom|p", nom_p_not_mp_pers = "nv|nom|p",
nom_mp_npers = "nv|nom|m|p", nom_fp = "nom|f|p", nom_np = "nom|n|p",
gen_mn = "gen|m//n|s", gen_f = "gen|f|s", gen_p = "gen|p",
dat_mn = "dat|m//n|s", dat_f = "dat|f|s", dat_p = "dat|p",
acc_m_an = "an|acc|m|s", acc_m_in = "in|acc|m|s", acc_f = "acc|f|s", acc_n = "acc|n|s",
acc_mp_pers = "vr|acc|p", acc_p_not_mp_pers = "nv|acc|p", acc_mp_npers = "nv|acc|m|p", acc_fp = "acc|f|p",
acc_np = "acc|n|p",
ins_mn = "ins|m//n|s", ins_f = "ins|f|s", ins_p = "ins|p", ins_mnp = "ins|m//n|p", ins_fp = "ins|f|p",
loc_mn = "loc|m//n|s", loc_f = "loc|f|s", loc_p = "loc|p",
nom_m_d = "nom|m|d", nom_fn_d = "nom|f//n|d", gen_d = "gen|d", dat_d = "dat|d", acc_m_d = "acc|m|d",
acc_fn_d = "acc|f//n|d", ins_d = "ins|d", loc_d = "loc|d",
short = "short",
}
--[==[
Parse an override of {{tl|pl-adecl}}, in the format of the former [[Module:pl-adjective]]: `SLOT[+SLOT...]:FORM:FORM...`
with the slot names of the adjective, e.g. `nom_mp_pers:weseli` or `gen_p+loc_p:...`. Only whole forms are allowed.
Return the same two values as `Overrides.parse`.
]==]
function Overrides.parseAdjective(group, text)
local slots = {}
local value_groups = M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")
if #value_groups[1] > 1 then
spec_error("A footnote can't follow the slot name of an override", text)
end
for slot in mw.text.gsplit(value_groups[1][1], "+", true) do
if not ADJECTIVE_ACCEL[slot] then
spec_error(("Unrecognized slot '%s' in an override"):format(slot), text)
end
table.insert(slots, slot)
end
local override = {values = {}, full = true}
for i = 2, #value_groups do
local value = value_groups[i][1]
if value == "" then
spec_error("Use - for no form", text)
end
table.insert(override.values, {form = value == "-" and "" or value, footnotes = fetch_footnotes(value_groups[i], text)})
end
return slots, override
end
-- Return the definition of the indicator `name` for `template`, or nil if there isn't one.
local function indicator_definition(data, template, name)
return data.indicators[template][name]
end
-- Return true if `part` of a spec is an override, i.e. it begins with a case code (or `depr`) and isn't an indicator.
local function is_override(data, template, part)
local name = mw.ustring.match(part, "^([^:]*)") or part
if indicator_definition(data, template, name) then
return false
end
return M.data.case_codes[mw.ustring.sub(part, 1, 3)] ~= nil or mw.ustring.sub(part, 1, 4) == "depr"
end
-- Return true if `part` (`NAME:VALUE`) is an indicator that takes a value (e.g. `decllemma:dń` or `lect:skur`) rather
-- than an override.
local function takes_value(data, template, part)
local definition = indicator_definition(data, template, mw.ustring.match(part, "^([^:]+):"))
return definition and definition.value ~= nil
end
function Spec.parse(angle_bracket_spec, template, data, lang)
local inside = mw.ustring.match(angle_bracket_spec, "^<(.*)>$")
local base = setmetatable({overrides = {}, indicators = {}, groups = {}, template = template, data = data,
lang = lang, text = angle_bracket_spec}, Spec)
if inside == "" then
return base
end
local segments = M.parse_utilities.parse_balanced_segment_run(inside, "[", "]")
for _, group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(segments, "%.")) do
local part = group[1]
if part == "" then
if #group == 1 then
spec_error("Empty indicator (two periods in a row, or a period at an end)", angle_bracket_spec)
end
base.footnotes = fetch_footnotes(group, angle_bracket_spec)
elseif template == "adjective" and mw.ustring.find(part, ":") and not takes_value(data, template, part)
or template ~= "adjective" and is_override(data, template, part) then
local slots, override
if template == "adjective" then
slots, override = Overrides.parseAdjective(group, angle_bracket_spec)
else
slots, override = Overrides.parse(group, angle_bracket_spec)
end
for _, slot in ipairs(slots) do
if base.overrides[slot] then
spec_error(("Two overrides for the slot '%s'"):format(slot), angle_bracket_spec)
end
base.overrides[slot] = override
end
else
if #group > 1 then
spec_error("A footnote can only follow an override or stand alone", angle_bracket_spec)
end
local name, value = mw.ustring.match(part, "^([^:]+):(.*)$")
name = name or part
local definition = indicator_definition(data, template, name)
if not definition then
local names = {}
for known in pairs(data.indicators[template]) do
table.insert(names, known)
end
table.sort(names)
spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")),
angle_bracket_spec)
end
if definition.value and (value == nil or value == "") then
spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), angle_bracket_spec)
elseif not definition.value and value ~= nil then
spec_error(("The indicator '%s' takes no value"):format(name), angle_bracket_spec)
end
if base.indicators[name] ~= nil then
spec_error(("The indicator '%s' is given twice"):format(name), angle_bracket_spec)
end
local key = definition.group or name
if base.groups[key] then
spec_error(("The indicators '%s' and '%s' can't be used together"):format(base.groups[key], name),
angle_bracket_spec)
end
base.groups[key] = name
base.indicators[name] = value or true
end
end
return base
end
-- Return the value set by a group of indicators (e.g. "m" for `gender`), or nil if none of the group was given.
function Spec:group(group)
local name = self.groups[group]
if not name then
return nil
end
return indicator_definition(self.data, self.template, name).sets or name
end
------------------------------------------------------------------------------------------------------------------------
-- Stem --
------------------------------------------------------------------------------------------------------------------------
--[==[
Functions to find the stem of a lemma and apply the alternations of the language's data module to it.
]==]
local Stem = {}
-- Split a lemma into its stem and nominative ending. The ending is the first of the `nominative_endings` of its gender
-- (`m`, `f` or `n`, or `plural` for a plurale tantum) that the lemma ends in with something before it, unless the
-- ending is one of the gender's `nominative_after_consonant` and a vowel precedes it; if there's none, the lemma is its
-- own stem and the ending is empty.
function Stem.split(data, lemma, gender, plural)
local after_consonant = not plural and data.nominative_after_consonant[gender] or {}
for _, ending in ipairs(data.nominative_endings[plural and "plural" or gender]) do
local stem = mw.ustring.match(lemma, "^(.+)" .. ending .. "$")
if stem and not (after_consonant[ending] and mw.ustring.find(mw.ustring.sub(stem, -1), "[" .. data.vowels .. "]")) then
return stem, ending
end
end
return lemma, ""
end
-- Replace the last letters of `stem` according to `map`, trying the longest keys first (up to three letters). Return
-- nil if the stem ends in none of the keys.
local function replace_final(stem, map)
for _, length in ipairs({3, 2, 1}) do
if mw.ustring.len(stem) >= length then
local final = mw.ustring.sub(stem, -length)
if map[final] then
return mw.ustring.sub(stem, 1, -length - 1) .. map[final]
end
end
end
return nil
end
-- Remove the mobile vowel from `stem`, i.e. the first of the data's `mobile_vowels` that it has before its final
-- consonants. Return nil if it has none.
local function reduce(data, stem)
local vowels = data.vowels
for _, mobile in ipairs(data.mobile_vowels) do
local head, final = mw.ustring.match(stem, "^(.-)" .. mobile[1] .. "([^" .. vowels .. "]+)$")
if head and head ~= "" and not (mobile.after_consonant
and mw.ustring.find(mw.ustring.sub(head, -1), "[" .. vowels .. "]")) then
return (mobile.soften and replace_final(head, data[mobile.soften]) or head) .. final
end
end
return nil
end
-- Join a stem and an ending as the language spells them. Before a vowel, a final soft consonant is written with the
-- data's `soft_vowel` (''koń'' + ''-a'' → ''konia''). After it, an ending's first vowel goes if it is one of
-- `soft_vowel_absorbs` (''goleń'' + ''-i'' → ''goleni''), as it does after a softening of the stem that ends in the
-- soft vowel (`softened`: ''Herodzi-'' + ''-y'' → ''Herodzi''). After a stem's own soft vowel, the ending's
-- `hard_vowel` is dropped if that vowel spells a soft consonant (''niuni-'' + ''-y'' → ''niuni'') and written as the
-- soft vowel if not (''Ili-'' + ''-y'' → ''Ilii'').
local function join(data, stem, ending, softened)
if not mw.ustring.find(mw.ustring.sub(ending, 1, 1), "[" .. data.vowels .. "]") then
return stem .. ending
end
local spelled = replace_final(stem, data.soft)
local vowel = data.soft_vowel
local after_vowel = mw.ustring.sub(stem, -mw.ustring.len(vowel)) == vowel
if not spelled and not (softened and after_vowel) then
local hard = data.hard_vowel
if after_vowel and mw.ustring.sub(ending, 1, mw.ustring.len(hard)) == hard then
local rest = mw.ustring.sub(ending, mw.ustring.len(hard) + 1)
return stem .. (replace_final(stem, data.final_soft) and rest or vowel .. rest)
end
return stem .. ending
end
stem = spelled or stem
for _, absorbed in ipairs(data.soft_vowel_absorbs) do
local length = mw.ustring.len(absorbed)
if mw.ustring.sub(ending, 1, length) == absorbed then
return stem .. mw.ustring.sub(ending, length + 1)
end
end
return stem .. ending
end
-- Insert `vowel` before the last consonant of `stem`, spelling a soft consonant before it as before any vowel
-- (''bańk-'' → ''baniek''). Return nil if the stem doesn't end in two consonants.
local function insert(data, stem, vowel)
local vowels = data.vowels
local head, final = mw.ustring.match(stem, "^(.-[^" .. vowels .. "])([^" .. vowels .. "])$")
return head and join(data, head, vowel) .. final or nil
end
-- Change the vowel of the last syllable of `stem`, whose vowels are the letters of `vowels`, according to `map`
-- (`shorten`, `lengthen` or `front` in the data, or `clear` of a lect's paradigm). Return nil if that vowel isn't one
-- of the keys of `map`.
local function alternate(vowels, stem, map)
local letters = ""
for vowel in pairs(map) do
letters = letters .. vowel
end
local head, vowel, tail = mw.ustring.match(stem, "^(.*)([" .. letters .. "])([^" .. vowels .. "]*)$")
return head and head .. map[vowel] .. tail or nil
end
-- Return the stem that `label` names, which is either `plain` or a set of alternations joined with "+" (e.g.
-- `reduced+palatal`). Return nil if one of the alternations doesn't apply to `stem`.
function Stem.apply(data, stem, label)
local text = stem
for part in mw.text.gsplit(label, "+", true) do
if not text then
return nil
end
if part == "reduced" then
text = reduce(data, text)
elseif mw.ustring.find(part, "^inserted_") then
-- `inserted_VOWEL` puts the mobile vowel VOWEL in.
text = insert(data, text, mw.ustring.sub(part, 10))
elseif part == "truncated" then
text = replace_final(text, data.truncate)
elseif part == "spelled" then
text = replace_final(text, data.spelled)
elseif part == "shortened" then
text = alternate(data.vowels, text, data.shorten)
elseif part == "lengthened" then
text = alternate(data.vowels, text, data.lengthen)
elseif part == "fronted" then
text = alternate(data.vowels, text, data.front)
elseif part == "soft" or part == "final_soft" then
-- This is only a spelling, so leave the stem alone if it has no such letter.
text = replace_final(text, data[part]) or text
elseif part == "palatal" or part == "virile" then
text = replace_final(text, data[part])
elseif part == "irregular" then
text = ""
elseif part ~= "plain" then
error(("Internal error: unknown alternation '%s'"):format(part))
end
end
return text
end
------------------------------------------------------------------------------------------------------------------------
-- Noun rules --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the rules of one word's group, with the word's indicators applied. `NounRules.new(base)` finds the group
from the word's gender, kind, number and nominative ending, and `:forms(slot)` returns the forms of a slot by the rule
of the longest matching stem ending, as form objects `{form = ..., footnotes = {...}}`.
]==]
local NounRules = {}
NounRules.__index = NounRules
local function group_key(rule_gender, kind, plural, nominative)
return ("%s %s %s %s"):format(rule_gender, kind, plural and "pl" or "sg", nominative)
end
function NounRules.new(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy]
end
local plural = base.number == "pl"
-- A plurale tantum is either masculine personal (m-pr) or not, and the non-personal ones share the groups of the
-- neuter.
if plural and rule_gender ~= "m-pr" then
rule_gender = "n"
end
if not rule_gender then
spec_error(("The noun '%s' needs a gender (m, f or n)"):format(word), base.text)
end
local stem, nominative = Stem.split(data, word, rule_gender:sub(1, 1), plural)
local kind = base.kind or "common"
local group = data.noun_groups[group_key(rule_gender, kind, plural, nominative)]
or kind ~= "common" and data.noun_groups[group_key(rule_gender, "common", plural, nominative)]
if not group then
error(("No rules for %s nouns in -%s ('%s'); give the forms with overrides and <!>"):format(
rule_gender, nominative, word), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
labels = {}, head_slot = plural and "nom_p" or "nom_s"}, NounRules)
end
-- Return the rule of `slot` for this stem, i.e. the rule of the longest stem ending (up to three letters) that has one.
function NounRules:rule(slot)
local rules = self.group.rules
for size = math.min(3, mw.ustring.len(self.stem)), 0, -1 do
local suffix = size == 0 and "" or mw.ustring.sub(self.stem, -size)
local by_slot = rules[suffix]
if by_slot and by_slot[slot] then
return by_slot[slot]
end
end
return nil
end
-- Return true if a part of an alternation label is about the mobile vowel, i.e. it's `reduced` or `inserted_VOWEL`.
local function is_mobile(part)
return part == "reduced" or mw.ustring.find(part, "^inserted_") ~= nil
end
-- Return the alternation label of an ending of a rule, with the word's indicators applied. `-*` takes out the mobile
-- vowel and `*` puts it in: for a lemma ending in a consonant it's dropped before an ending, and for one ending in a
-- vowel it's inserted into a bare stem (as `inserted_vowel` in the data says). `-#` and `#` do the same for ''ó''/''o''
-- and ''ą''/''ę''. A bare form of a lemma ending in a consonant is the lemma itself (e.g. the accusative of an
-- inanimate noun) and takes neither.
function NounRules:label(label, ending)
local base = self.base
local parts = {}
for part in mw.text.gsplit(label, "+", true) do
parts[part] = true
end
local mobile = false
for part in pairs(parts) do
mobile = mobile or is_mobile(part)
end
local consonant_final = self.nominative == ""
if base.reducible == false then
for part in pairs(parts) do
if is_mobile(part) then
parts[part] = nil
end
end
elseif base.reducible and not mobile then
if consonant_final and ending ~= "" then
parts.reduced = true
elseif ending == "" then
local inserted = self.data.inserted_vowel
parts["inserted_" .. (inserted.after[mw.ustring.sub(self.stem, -2, -2)] or inserted.default)] = true
end
end
if base.quantity == "none" then
parts.shortened, parts.lengthened = nil, nil
elseif base.quantity == "full" and not (parts.shortened or parts.lengthened) then
if consonant_final and ending ~= "" then
parts.shortened = true
elseif ending == "" then
parts.lengthened = true
end
end
-- Put the parts in the order they apply in, with the mobile vowel first.
local ordered = {}
if parts.reduced then
table.insert(ordered, "reduced")
end
local inserted = {}
for part in pairs(parts) do
if mw.ustring.find(part, "^inserted_") then
table.insert(inserted, part)
end
end
table.sort(inserted)
for _, part in ipairs(inserted) do
table.insert(ordered, part)
end
for _, name in ipairs({"truncated", "spelled", "shortened", "lengthened", "fronted", "soft", "final_soft", "palatal",
"virile", "irregular"}) do
if parts[name] then
table.insert(ordered, name)
end
end
return ordered[1] and table.concat(ordered, "+") or "plain"
end
-- Return the last consonant of a stem, which is either one of the data's `digraphs` or a single letter.
local function final_consonant(data, stem)
local last_two = mw.ustring.sub(stem, -2)
return data.digraphs[last_two] and last_two or mw.ustring.sub(stem, -1)
end
-- Return `lemma` followed by `ending`, with an apostrophe between them if the ending starts with a vowel. This is how a
-- form of a word read as another (`r:`) is written (''Barthes'a'', ''Kennedy'ego'', ''Kennedym'').
local function written_form(data, lemma, ending)
if ending == "" then
return lemma
end
return lemma .. (mw.ustring.find(mw.ustring.sub(ending, 1, 1), "[" .. data.vowels .. "]") and "'" or "") .. ending
end
function NounRules:form(label, ending, note)
local footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil
local written = self.base.indicators.r and self.base.lemma
-- An apostrophe keeps the lemma whole before the ending (''Google'' → ''Google'a'').
if mw.ustring.sub(ending, 1, 1) == "'" then
return {form = (written or self.word) .. ending, footnotes = footnotes}
end
local full = self:label(label, ending)
local stem = Stem.apply(self.data, self.stem, full) or self.stem
local form = join(self.data, stem, ending, stem ~= self.stem)
-- With `r:`, the forms are written on the lemma. For a word read with a nominative ending (''Kennedi''), what follows
-- that ending in each ending goes after the lemma (''Kennedy'ego''). For one read with none (''Bart''), a form that
-- changes the stem is written as it's built (''Barcie''), and the other forms put the ending after the lemma without
-- the ''i'' that spells a velar before a vowel (''Jakiem'', but ''Jacques'em'').
if written and self.nominative ~= "" then
local length = mw.ustring.len(self.nominative)
form = written_form(self.data, written,
mw.ustring.sub(ending, 1, length) == self.nominative and mw.ustring.sub(ending, length + 1) or ending)
elseif written and stem == self.stem then
local rest = ending
if self.data.stem_types.velar[final_consonant(self.data, stem)]
and mw.ustring.find(rest, "^i[" .. self.data.vowels .. "]") then
rest = mw.ustring.sub(rest, 2)
end
form = written_form(self.data, written, rest)
end
-- Keep the form's alternations: the table's categories come from the forms it shows.
local object = {form = form, footnotes = footnotes}
self.labels[object] = full
return object
end
-- Return the endings of a rule's cell as a list of `{ending, stem = ..., note = ...}`. A cell is an ending (a string),
-- one ending with a stem or note (e.g. `{ "e", stem = "palatal" }`), or a list of either (e.g. `{ "i", "ów" }`).
local function cell_endings(cell)
if type(cell) == "string" then
return {{cell}}
elseif type(cell[1]) == "string" and cell[2] == nil then
return {cell}
end
local list = {}
for _, ending in ipairs(cell) do
table.insert(list, type(ending) == "string" and {ending} or ending)
end
return list
end
-- Return the forms of `slot` according to its rule, or nil if the group has no rule for the slot.
function NounRules:forms(slot)
local cell = self:rule(slot)
if not cell then
return nil
end
local list = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(list, self:form(ending.stem or "plain", ending[1], ending.note))
end
return list
end
-- Return the alternation label for an ending given in an override of `slot`. If the ending is one of the rule's own
-- endings, use that ending's label; otherwise use the label of the rule's first ending minus the softening that its
-- ending brings (`palatal` before ''-e'', `virile` before the virile ''-i''/''-y''). This way ''dom'' with the locative
-- ''-u'' gives ''domu'', and ''Polak'' with the nominative plural ''-owie'' gives ''Polakowie''.
function NounRules:overrideLabel(slot, ending)
local cell = self:rule(slot)
local endings = cell and cell_endings(cell) or {}
for _, item in ipairs(endings) do
if item[1] == ending then
return item.stem or "plain"
end
end
local kept = {}
for part in mw.text.gsplit(endings[1] and endings[1].stem or "plain", "+", true) do
if part ~= "palatal" and part ~= "virile" and part ~= "irregular" and part ~= "plain" then
table.insert(kept, part)
end
end
return kept[1] and table.concat(kept, "+") or "plain"
end
--[==[
Object holding the rules of an adjective, with the methods of `NounRules`. The group comes from `adjective_groups`
according to the ending of the lemma (one of `adjective_nominatives`). Adjectives take no stem indicators.
]==]
local AdjectiveRules = setmetatable({}, {__index = NounRules})
AdjectiveRules.__index = AdjectiveRules
function AdjectiveRules.new(base, word)
local data = base.data
local stem, nominative, group
for _, ending in ipairs(data.adjective_nominatives) do
stem = mw.ustring.match(word, "^(.+)" .. ending .. "$")
if stem then
nominative = ending
group = data.adjective_groups["adj common sg " .. ending]
break
end
end
if not group then
local endings = {}
for _, ending in ipairs(data.adjective_nominatives) do
table.insert(endings, "-" .. ending)
end
error(("'%s' doesn't end in %s; an irregular adjective takes <irreg>"):format(word,
table.concat(endings, " or ")), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
head_slot = "nom_m", labels = {}}, AdjectiveRules)
end
--[==[
Object holding the rules of a lect's paradigm, i.e. an entry of `lect_tables` with `table = "paradigm"`, such as
Standard Kurpie (`lect:skur`). The paradigm is the table in the data named by the entry's `rules`. Its `types` decide
the type of a lemma, and each type has one ending per slot. It answers the same calls from `decline_word` as
`NounRules`.
]==]
local ParadigmRules = {}
ParadigmRules.__index = ParadigmRules
-- Return the stem, type and declension (the gender whose endings it takes) of a lemma in `paradigm`, decided by its
-- gender and ending (see `types` in the data). With `soft`, a stem whose last consonant can come from mazuration takes
-- its entry's soft type. `name` is the name of the lect, for the error messages.
local function paradigm_type(data, paradigm, name, word, gender, soft, text)
for _, entry in ipairs(gender and paradigm.types[gender] or {}) do
local stem = entry.ending == "" and word or mw.ustring.match(word, "^(.+)" .. entry.ending .. "$")
if stem and not (entry.consonant_final and mw.ustring.find(word, "[" .. paradigm.vowels .. "]$")) then
local final = final_consonant(data, stem)
local type = entry.default
for _, class in ipairs(entry.by_final or {}) do
if paradigm[class[1]][final] then
type = class[2]
break
end
end
if soft then
if not entry.soft then
spec_error(("In the %s rules, a %s noun like '%s' can't take 'soft'"):format(name,
M.data.genders[gender].name, word), text)
elseif type == entry.soft then
spec_error(("The stem '%s' is soft already, so 'soft' isn't needed"):format(stem), text)
elseif not paradigm.mazurated[final] then
local finals = {}
for consonant in pairs(paradigm.mazurated) do
table.insert(finals, consonant)
end
table.sort(finals)
spec_error(("'soft' needs a stem that ends in a consonant from mazuration (%s), unlike '%s'"):format(
table.concat(finals, ", "), stem), text)
end
type = entry.soft
end
return stem, type, entry.declension or gender
end
end
spec_error(("The %s rules have no %s noun like '%s'; give its forms as overrides"):format(name,
gender and M.data.genders[gender].name or "genderless", word), text)
end
-- Return `stem` with the slanted vowel of its last syllable made clear by the `clear` table of `paradigm`, or by
-- `clear_before_nasal` when one of its `nasals` follows the vowel. Return nil if that vowel isn't slanted.
local function clear_vowel(paradigm, stem)
local vowels = paradigm.vowels
local following = mw.ustring.match(stem, "[" .. vowels .. "]([^" .. vowels .. "]?)[^" .. vowels .. "]*$")
local before_nasal = paradigm.nasals and paradigm.nasals[following] and paradigm.clear_before_nasal
return alternate(vowels, stem, before_nasal or paradigm.clear)
end
function ParadigmRules.new(base, word, paradigm, name)
local data = base.data
local plural = base.number == "pl"
local stem, type, declension
if plural then
-- A plurale tantum is declined from its nominative plural, with the plural endings of its gender's hard stems.
if not paradigm.plural_nominatives then
spec_error(("The %s rules have no pluralia tantum"):format(name), base.text)
end
for _, ending in ipairs(paradigm.plural_nominatives) do
stem = stem or mw.ustring.match(word, "^(.+)" .. ending .. "$")
end
if not stem then
spec_error(("The %s rules have no plurale tantum like '%s'"):format(name, word), base.text)
end
if base.indicators.soft then
spec_error(("In the %s rules, a plurale tantum can't take 'soft'"):format(name), base.text)
end
type, declension = "cứng", base.gender or "n"
else
stem, type, declension = paradigm_type(data, paradigm, name, word, base.gender, base.indicators.soft, base.text)
end
local consonant_final = not plural and stem == word
if declension == "m" and base.animacy ~= "inan" and paradigm.animate_types and paradigm.animate_types[type] then
type = paradigm.animate_types[type]
end
if base.reducible then
stem = reduce(data, stem) or spec_error(("The stem '%s' has no mobile e"):format(stem), base.text)
end
-- With `#`, the forms with an ending have the clear vowel of `clear_stem`.
local clear_stem
if base.quantity == "none" then
spec_error(("The %s rules have no vowel alternation for '-#' to remove"):format(name), base.text)
elseif base.quantity == "full" then
if not paradigm.clear then
spec_error(("The %s rules have no vowel alternation for '#'"):format(name), base.text)
elseif not consonant_final then
spec_error(("In the %s rules, '#' needs a lemma that ends in a consonant"):format(name), base.text)
end
clear_stem = clear_vowel(paradigm, stem)
or spec_error(("The stem '%s' has no slanted vowel for '#' to make clear"):format(stem), base.text)
end
local endings = paradigm.nouns[declension][type]
if plural then
local plural_endings = {}
for slot, ending in pairs(endings) do
if mw.ustring.find(slot, "_p$") then
plural_endings[slot] = ending
end
end
endings = plural_endings
end
local copies = {}
for slot, source in pairs(paradigm.copies[declension]) do
copies[slot] = source
end
if base.gender == "m" then
for slot, source in pairs(paradigm.animate_copies[base.animacy]) do
copies[slot] = source
end
end
return setmetatable({base = base, data = data, paradigm = paradigm, word = word, stem = stem, clear_stem = clear_stem,
endings = endings, group = {copies = copies}, head_slot = plural and "nom_p" or "nom_s"}, ParadigmRules)
end
-- Return one form: the stem (with its clear vowel before an ending, under `#`), palatalized if `label` is `palatal` (by
-- the paradigm's own `palatal` table), followed by the ending. After a hardened consonant, the first letter of the
-- ending is respelled by `hardened_spelling`.
function ParadigmRules:form(label, ending, note)
local paradigm = self.paradigm
local stem = self.clear_stem and ending ~= "" and self.clear_stem or self.stem
if label == "palatal" then
stem = replace_final(stem, paradigm.palatal) or stem
end
if paradigm.hardened and paradigm.hardened[final_consonant(self.data, stem)] then
local respelled = paradigm.hardened_spelling and paradigm.hardened_spelling[mw.ustring.sub(ending, 1, 1)]
if respelled then
ending = respelled .. mw.ustring.sub(ending, 2)
end
end
return {form = stem .. ending, footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil}
end
function ParadigmRules:forms(slot)
local cell = self.endings[slot]
if not cell then
return {}
end
if type(cell) == "string" then
return {self:form("plain", cell)}
end
return {self:form(cell.stem or "plain", cell[1], cell.note)}
end
-- Return the stem label of a slot's rule. An ending given for the slot in an override goes on that stem.
function ParadigmRules:overrideLabel(slot)
local cell = self.endings[slot]
return type(cell) == "table" and cell.stem or "plain"
end
------------------------------------------------------------------------------------------------------------------------
-- Declension --
------------------------------------------------------------------------------------------------------------------------
-- Return the forms of a noun from the lexicon (`<irreg>`) or of an indeclinable noun (`<indecl>`).
local function lexicon_forms(base, word)
local forms = {}
if base.indicators.irreg then
local list = base.data.irregular_nouns[word]
if not list then
error(("'%s' is not one of the irregular nouns"):format(word), 0)
end
for i, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = list[i]}}
end
elseif base.indicators.indecl then
for _, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = word}}
end
end
return forms
end
-- Return the masculine nominative singular of an adjectival word given in another gender, using `adjective_lemma` in
-- the data, e.g. ''teściowa'' → ''teściowy'', ''tania'' → ''tani'', ''bykowe'' → ''bykowy'', ''wielkie'' →
-- ''wielki''. A plural such as ''Zjednoczone'' works the same way.
local function adjective_lemma(data, word, rule_gender, plural)
local lemma = data.adjective_lemma
for _, ending in ipairs(lemma.endings[plural and "plural" or rule_gender] or {}) do
local stem = mw.ustring.match(word, "^(.+)" .. ending[1] .. "$")
if stem then
return stem .. ((ending.soft or lemma.soft_after[mw.ustring.sub(stem, -1)]) and lemma.soft or lemma.hard)
end
end
return word
end
--[==[
Return the masculine nominative singular that goes with a virile plural, e.g. ''krewni'' → ''krewny'', ''polscy'' →
''polski''. We try each word that the data's `palatal` table could have softened into the plural (before one of the
`virile_endings`) and return the one whose virile nominative plural, as the adjective rules give it, is that plural.
Return {nil} if there's none.
]==]
local function virile_lemma(data, word)
local adjective = {indicators = {}, overrides = {}, data = data}
for final, softened in pairs(data.palatal) do
for _, ending in ipairs(data.virile_endings) do
local stem = mw.ustring.match(word, "^(.+)" .. softened .. ending .. "$")
if stem then
for _, nominative in ipairs(data.adjective_nominatives) do
local lemma = stem .. final .. nominative
local ok, rules = pcall(AdjectiveRules.new, adjective, lemma)
if ok then
for _, form in ipairs(rules:forms("nom_mp_pers")) do
if form.form == word then
return lemma
end
end
end
end
end
end
end
return nil
end
-- Return the forms of an adjective in a lect's paradigm (`lect:skur`): the endings of the paradigm's `adjective` added
-- to the lemma minus its last letter, with the slots shared as for every adjective (`adjective_shared` in the data).
local function paradigm_adjective_forms(data, paradigm, word)
local stem = mw.ustring.sub(word, 1, -2)
local forms = {nom_m = {{form = word}}}
for slot, ending in pairs(paradigm.adjective) do
forms[slot] = {{form = stem .. ending}}
end
for source, targets in pairs(data.adjective_shared) do
for _, target in ipairs(targets) do
forms[target] = forms[source]
end
end
return forms
end
-- Return the forms of an adjectival word (`+`) in a lect's paradigm (`lect:skur`), in noun slots. Its masculine comes from
-- the word as given: the word minus the paradigm's nominative ending for its gender and number, with ''-ï'' after one of
-- the paradigm's `adjective_soft` consonants and ''-y'' otherwise.
local function paradigm_adjectival_forms(base, word, rule_gender, plural)
local data = base.data
local paradigm = data[base.lect_table.rules]
if not paradigm.adjective then
spec_error(("The %s rules have no adjective declension"):format(base.lect_name), base.text)
end
local masculine = word
if plural or rule_gender == "f" or rule_gender == "n" then
local ending = paradigm.adjective[plural and (rule_gender == "m-pr" and "nom_mp_pers" or "nom_p_not_mp_pers")
or "nom_" .. rule_gender]
local stem = mw.ustring.match(word, "^(.+)" .. ending .. "$")
or spec_error(("The adjectival word '%s' doesn't end in -%s"):format(word, ending), base.text)
masculine = stem .. (paradigm.adjective_soft and paradigm.adjective_soft[final_consonant(data, stem)] and "ï" or "y")
end
local adjective = paradigm_adjective_forms(data, paradigm, masculine)
for _, pair in ipairs(data.adjective_accusatives) do
adjective[pair[2]] = adjective[pair[2]] or adjective[pair[1]]
end
local forms = {}
for slot, adjective_slot in pairs(data.adjectival_slots[rule_gender]) do
forms[slot] = adjective[adjective_slot] or {}
end
if rule_gender ~= "m-pr" then
for slot, adjective_slot in pairs(data.adjectival_slots.plural) do
forms[slot] = adjective[adjective_slot] or {}
end
end
forms[plural and "nom_p" or "nom_s"] = {{form = word}}
return forms
end
-- Return the forms of an adjectival word (`+`) in noun slots, using `adjectival_slots` in the data.
local function adjectival_forms(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy or "inan"]
end
local plural = base.number == "pl"
if base.lect_table and base.lect_table.table == "paradigm" then
return paradigm_adjectival_forms(base, word, rule_gender, plural)
end
local lemma = plural and rule_gender == "m-pr" and virile_lemma(data, word) or adjective_lemma(data, word, rule_gender, plural)
local adjective = {lemma = lemma, indicators = {}, overrides = {}, data = data}
local rules = AdjectiveRules.new(adjective, adjective.lemma)
local function forms_of(slot)
if slot == "nom_m" then
return {{form = adjective.lemma}}
end
local source = rules.group.copies[slot]
while source and rules.group.copies[source] do
source = rules.group.copies[source]
end
if source == "nom_m" then
return {{form = adjective.lemma}}
end
return rules:forms(source or slot) or {}
end
local forms = {}
for slot, adjective_slot in pairs(data.adjectival_slots[rule_gender]) do
forms[slot] = forms_of(adjective_slot)
end
if rule_gender ~= "m-pr" then
for slot, adjective_slot in pairs(data.adjectival_slots.plural) do
forms[slot] = forms_of(adjective_slot)
end
end
-- The word as given heads its table.
forms[plural and "nom_p" or "nom_s"] = {{form = word}}
return forms
end
--[==[
Resolve the lect of a `lect:` indicator or a `[lect:CODE:PLACE]` tag through the aliases in the data module of the lects
(`lect_module` in the language's data, which is [[Module:zlw-lch-IPA/data/pl]] for Polish). Return the code and the
name of the lect.
]==]
local function lect_of(data, code, text)
local lects = mw.loadData(data.lect_module)
code = lects.lect_aliases[code] or code
local lect = lects.lects[code]
if not lect then
local codes = {}
for known in pairs(lects.lects) do
table.insert(codes, known)
end
table.sort(codes)
spec_error(("Unrecognized lect '%s'; the lects are %s"):format(code, table.concat(codes, ", ")), text)
end
return code, lect.name
end
-- Return a footnote `[lect:CODE]` or `[lect:CODE:PLACE]` of a word of `base` as it's shown (the name of the lect,
-- formatted as its label is, i.e. linked to the article on the dialect, followed by the place), along with the name of
-- the lect. Return nil if the footnote isn't a lect tag.
local function lect_footnote(base, footnote)
local code, place = mw.ustring.match(footnote, "^%[lect:([^:%]]+):?(.-)%]$")
if not code then
return nil
end
local _, name = lect_of(base.data, code, base.text)
local label = M.labels.get_label_info{label = name, lang = base.lang, nocat = true}.label
return "[" .. label .. (place ~= "" and " (" .. place .. ")" or "") .. "]", name
end
-- Return the link target of a form of an attested lect, i.e. its modern spelling according to `respelling` (e.g.
-- ''ptåka'' → ''ptaka''). Return nil if it's spelled the same.
local function respelled(respelling, form)
local target = mw.ustring.gsub(form, ".", respelling)
return target ~= form and target or nil
end
-- Return a `generate_link` function for `show_forms` for the table of `spec`, which links a respelled form (one with a
-- `target`) to its modern spelling.
local function respelled_link(spec)
return function(data)
if data.form.target then
return M.links.full_link{lang = spec.lang, term = data.form.target, alt = data.form.formval_for_link,
tr = "-"} .. M.inflection_utilities.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
end
--[==[
Return the forms of an attested table (Middle Polish `lect:mpl`, the `dialectal` table and every Old Polish table),
which are the cells given, exactly as given, and nothing else. In a dialectal table, every form must have a lect,
either from its own `[lect:...]` tag or from a tag given for the whole word.
]==]
local function attested_forms(base)
local forms = {}
local word_lect, word_lect_name
local word_footnotes = {}
for _, note in ipairs(base.footnotes or {}) do
local shown, name = lect_footnote(base, note)
word_lect, word_lect_name = word_lect or shown, word_lect_name or name
table.insert(word_footnotes, shown or note)
end
-- the forms with a lect tag of their own, which the lect tag of the word doesn't go on
local own_lect = {}
local respelling = base.lect_table and base.lect_table.respelling and base.data[base.lect_table.respelling]
for slot, override in pairs(base.overrides) do
if not override.full then
spec_error(("An attested table takes whole forms: '%s:FORM'"):format(slot), base.text)
end
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
local footnotes, lect, lect_name = {}, nil, nil
for _, note in ipairs(value.footnotes or {}) do
local shown, name = lect_footnote(base, note)
lect, lect_name = lect or shown, lect_name or name
table.insert(footnotes, shown or note)
end
if base.indicators.dialectal then
if not lect and not word_lect then
spec_error(("The dialectal form '%s' needs [lect:CODE]"):format(value.form), base.text)
end
end
-- `lect` is the name of the form's lect, which labels the form's definition line (see `form_tag_sets`).
local form = {
form = value.form,
target = respelling and respelled(respelling, value.form) or nil,
footnotes = footnotes[1] and footnotes or nil,
lect = lect_name or word_lect_name,
}
own_lect[form] = lect and true or nil
table.insert(list, form)
end
end
forms[slot] = list
end
if base.footnotes then
base.footnotes, base.word_lect, base.own_lect = word_footnotes, word_lect, own_lect
end
return forms
end
-- Return the entry of a pronoun in the data's `pronouns` along with the ending its forms take. This is the lemma's own
-- entry (with no ending), or the entry of the pronoun it's made from plus one of the `pronoun_suffixes` (e.g.
-- ''cośkolwiek'' is ''co'' plus ''-śkolwiek'').
local function pronoun_entry(data, lemma)
local pronouns = data.pronouns
if pronouns[lemma] then
return pronouns[lemma], ""
end
for _, suffix in ipairs(data.pronoun_suffixes or {}) do
local head = mw.ustring.match(lemma, "^(.+)" .. suffix .. "$")
if head and pronouns[head] then
return pronouns[head], suffix
end
end
return nil
end
-- Return the forms of a pronoun (`<pron>`) with their notes. In an attested table (Old Polish), the forms given in the
-- spec go on top of them.
local function pronoun_forms(base, word)
local data = base.data
local pronoun, suffix = pronoun_entry(data, word)
if not pronoun then
local lemmas = {}
for lemma in pairs(data.pronouns) do
table.insert(lemmas, lemma)
end
table.sort(lemmas)
local message = ("No pronoun '%s'; the pronouns are %s"):format(word, table.concat(lemmas, ", "))
if data.pronoun_suffixes then
local suffixes = {}
for _, item in ipairs(data.pronoun_suffixes) do
table.insert(suffixes, "-" .. item)
end
message = message .. ", and these with " .. table.concat(suffixes, ", ")
end
spec_error(message, base.text)
end
base.pronoun = pronoun
local forms = {}
for slot, list in pairs(pronoun) do
if slot ~= "numbers" and slot ~= "numberless" then
forms[slot] = {}
for _, item in ipairs(list) do
local form = {form = (type(item) == "table" and item[1] or item) .. suffix}
if type(item) == "table" then
form.footnotes = {}
for _, note in ipairs(item.notes) do
table.insert(form.footnotes, "[" .. data.notes[note] .. "]")
end
end
table.insert(forms[slot], form)
end
end
end
if base.attested then
for slot, list in pairs(attested_forms(base)) do
forms[slot] = list
end
end
return forms
end
-- Return the rule of a numeral in `rules` (`numeral_rules` or `collective_rules` in the data), i.e. the rule of the
-- longest key that the lemma ends in, along with the lemma minus that key.
local function numeral_rule(rules, word, text)
for length = mw.ustring.len(word), 0, -1 do
local key = length == 0 and "" or mw.ustring.sub(word, -length)
if rules[key] then
return rules[key], mw.ustring.sub(word, 1, mw.ustring.len(word) - length)
end
end
spec_error(("No numeral declines like '%s'"):format(word), text)
end
-- Return the forms of a numeral (`<num>`), i.e. the endings of its rule added to its stem.
local function numeral_forms(rules, base, word)
local rule, stem = numeral_rule(rules, word, base.text)
local forms = {}
for slot, cell in pairs(rule) do
forms[slot] = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(forms[slot], {form = stem .. ending[1],
footnotes = ending.note and {"[" .. base.data.notes[ending.note] .. "]"} or nil})
end
end
return forms
end
--[==[
Add the footnotes given for the whole word (`base.footnotes`) after the footnotes of every form, as new form objects,
since a copied slot shares the form objects of its source. In an attested table the word's lect tag
(`base.word_lect`) only goes on the forms without a lect tag of their own (`base.own_lect`). Return the forms.
]==]
local function add_word_footnotes(base, forms)
if not base.footnotes then
return forms
end
for slot, list in pairs(forms) do
local copy = {}
for _, form in ipairs(list) do
local footnotes = {}
for _, note in ipairs(form.footnotes or {}) do
table.insert(footnotes, note)
end
for _, note in ipairs(base.footnotes) do
if not (note == base.word_lect and base.own_lect[form]) then
table.insert(footnotes, note)
end
end
table.insert(copy, {form = form.form, footnotes = footnotes, target = form.target})
end
forms[slot] = copy
end
return forms
end
--[==[
Decline a single word. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]]. First the
rules fill every slot they cover. Then the overrides apply (an ending goes on the stem that the slot's rule uses, and a
form replaces the cell), followed by the copies (unless a copy is overridden itself), the deprecative forms of a
masculine personal noun (after its nominative plural, with a footnote) and finally the footnote for the whole word.
]==]
local function decline_word(base)
local word = base.indicators.decllemma or base.indicators.r or base.lemma
local forms, rules
if base.attested then
base.forms = add_word_footnotes(base, base.indicators.pron and pronoun_forms(base, word) or attested_forms(base))
return
elseif base.indicators.pron then
forms = pronoun_forms(base, word)
elseif base.indicators.num then
forms = numeral_forms(base.data.collective_rules, base, word)
elseif base.indicators.irreg or base.indicators.indecl then
forms = lexicon_forms(base, word)
elseif base.indicators["!"] then
-- A manual table has only the forms its overrides give.
forms = {}
elseif base.indicators["+"] then
forms = adjectival_forms(base, word)
else
rules = base.lect_table and base.lect_table.table == "paradigm"
and ParadigmRules.new(base, word, base.data[base.lect_table.rules], base.lect_name) or NounRules.new(base, word)
-- The lemma heads the table, even when another word is declined in its place (`decllemma`).
forms = {[rules.head_slot] = {{form = base.lemma}}}
-- The rules give the singular and the plural; only an attested table has the dual.
for _, entry in ipairs(M.data.noun_slots) do
local slot = entry.slot
if entry.number ~= "d" and slot ~= rules.head_slot and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
-- A form that is the declined word itself (e.g. an inanimate accusative) belongs to the lemma.
for _, form in ipairs(forms[slot] or {}) do
if form.form == word then
form.form = base.lemma
end
end
end
end
-- In a phrase the deprecative forms would agree with nothing (''pany młodzi''), so only a single word shows
-- them.
if not base.in_phrase then
forms.depr_p = rules:forms("depr_p")
end
end
for slot, override in pairs(base.overrides) do
local list = {}
local rule_forms = forms[slot] or {}
for _, value in ipairs(override.values) do
if value.default then
for _, form in ipairs(rules and rules:forms(slot) or {}) do
table.insert(list, form)
end
elseif override.full then
if value.form ~= "" then
local shown = {form = value.form, footnotes = value.footnotes}
-- A whole form that the rules also give keeps their alternations for the categories (''ojca'' on
-- ''ojciec'').
for _, rule_form in ipairs(rule_forms) do
if rule_form.form == value.form and rules and rules.labels then
rules.labels[shown] = rules.labels[rule_form]
end
end
table.insert(list, shown)
end
else
local form = rules and rules:form(rules:overrideLabel(slot, value.form), value.form) or {form = word .. value.form}
form.footnotes = value.footnotes
table.insert(list, form)
end
end
forms[slot] = list
end
if rules then
-- A copy can copy another copy (e.g. the vocative of a feminine consonant-stem noun is its locative, which is
-- its dative). Fill each one from the slot at the end of its chain, unless a slot along the way is overridden.
local copies = rules.group.copies
for slot in pairs(copies) do
if not base.overrides[slot] then
local source = copies[slot]
while copies[source] and not base.overrides[source] do
source = copies[source]
end
local list = {}
for _, form in ipairs(forms[source] or {}) do
table.insert(list, form)
end
forms[slot] = list
end
end
end
if forms.depr_p then
forms.nom_p = forms.nom_p or {}
-- A deprecative form that's the same as a virile form (e.g. ''zaklinacze'') isn't a separate form, so don't
-- show it twice.
local virile = {}
for _, form in ipairs(forms.nom_p) do
virile[form.form] = true
end
for _, form in ipairs(forms.depr_p) do
if not virile[form.form] then
local shown = {form = form.form, footnotes = form.footnotes or {"[" .. base.data.notes.deprecative .. "]"}}
if rules and rules.labels then
rules.labels[shown] = rules.labels[form]
end
table.insert(forms.nom_p, shown)
end
end
forms.depr_p = nil
end
if rules and rules.labels then
-- Collect the alternations of the forms the table shows, for its categories. A rule's form that an override
-- replaced doesn't count, and neither does a form of a number the table doesn't show.
rules.used = {}
for slot, list in pairs(forms) do
if not base.number or mw.ustring.sub(slot, -1) == mw.ustring.sub(base.number, 1, 1) then
for _, form in ipairs(list) do
for part in mw.text.gsplit(rules.labels[form] or "plain", "+", true) do
rules.used[part] = true
end
end
end
end
end
base.forms = add_word_footnotes(base, forms)
-- Keep the rules the forms came from, and the alternations they used, for the categories.
base.rules = rules
end
-- Join an adjective stem and an ending. If the data's `adjective_dropped` says the last letter of the stem drops before
-- the first letter of the ending, drop it (e.g. ''moj-'' + ''-ich'' → ''moich'').
local function adjective_form(data, stem, ending)
local before = data.adjective_dropped[mw.ustring.sub(stem, -1)]
if before and mw.ustring.sub(ending, 1, mw.ustring.len(before)) == before then
return mw.ustring.sub(stem, 1, -2) .. ending
end
return stem .. ending
end
-- Return the forms of an irregular adjective from `irregular_adjectives`, along with the layout of the table it needs
-- (nil, `dwa` or `plonly`).
local function irregular_adjective_forms(base, word)
local data = base.data
for _, entry in ipairs(data.irregular_adjectives) do
local captured = mw.ustring.match(word, entry.pattern)
if captured or entry.stem and mw.ustring.find(word, entry.pattern) then
local forms = {}
local function add(slot, stem, endings, note)
if type(endings) == "string" then
endings = {endings}
end
for _, ending in ipairs(endings or {}) do
forms[slot] = forms[slot] or {}
local form = ending == "-" and base.lemma or adjective_form(data, stem, ending)
table.insert(forms[slot], {form = form, footnotes = note and {"[" .. note .. "]"} or nil})
end
end
if entry.table ~= "dwa" then
add("nom_m", nil, "-")
end
for _, set in ipairs(entry.sets) do
local stem = (entry.stem or captured) .. (set.add or "")
for slot, endings in pairs(set.endings or {}) do
add(slot, stem, endings, set.note)
for _, target in ipairs(data.adjective_shared[slot] or {}) do
add(target, stem, endings, set.note)
end
end
for slot, endings in pairs(set.own or {}) do
add(slot, stem, endings, set.note)
end
if set.archaic_dative and base.indicators.archdat then
add("dat_mn", stem, set.archaic_dative, data.notes[data.archaic_dative.note])
end
end
return forms, entry.table
end
end
error(("Unrecognized irregular adjective '%s'"):format(word), 0)
end
--[==[
Decline a single adjective. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]] for
{{tl|pl-adecl}}. The rules (or the lexicon of irregular adjectives) fill the slots; then the overrides apply, followed
by the accusatives taken from other slots (unless overridden) and the footnote for the whole word. An attested table
has the cells given and nothing else.
]==]
local function decline_adjective_word(base)
local data = base.data
local word = base.indicators.decllemma or base.lemma
local forms, layout
if base.attested then
-- The cells given and nothing else, with the dual columns if `du` is given.
forms, layout = attested_forms(base), base.indicators.du and "dual" or nil
elseif base.indicators.irreg then
forms, layout = irregular_adjective_forms(base, word)
elseif base.indicators.lect then
local paradigm = data[data.lect_tables[base.indicators.lect].rules]
if not paradigm.adjective then
spec_error(("The %s rules have no adjective declension"):format(base.lect_name), base.text)
end
forms = paradigm_adjective_forms(data, paradigm, word)
-- With `decllemma`, the lemma itself heads the table (''båbcyn'' declined as ''båbcyny'').
forms.nom_m = {{form = base.lemma}}
elseif base.indicators.num then
forms, layout = numeral_forms(data.numeral_rules, base, word), "plonly"
else
local rules = AdjectiveRules.new(base, word)
-- With `decllemma`, the lemma itself still heads the table (''wart'' declined as ''warty'').
forms = {nom_m = {{form = base.lemma}}}
for _, slot in ipairs(data.adjective_slots) do
if slot ~= "nom_m" and slot ~= "short" and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
end
end
if base.indicators.archdat then
local archaic = data.archaic_dative
table.insert(forms.dat_mn, {form = rules.stem .. archaic[1], footnotes = {"[" .. data.notes[archaic.note] .. "]"}})
end
-- Keep the slots that every adjective shares as copies, so that an override of the source carries over.
for slot, source in pairs(rules.group.copies) do
local accusative = mw.ustring.find(slot, "^acc")
if not accusative and not base.overrides[slot] then
forms[slot] = forms[source]
end
end
end
if not base.attested then
for slot, override in pairs(base.overrides) do
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
table.insert(list, {form = value.form, footnotes = value.footnotes})
end
end
forms[slot] = list
end
for _, pair in ipairs(data.adjective_accusatives) do
local source, target = pair[1], pair[2]
if not base.overrides[target] and forms[source] and not (base.indicators.irreg and forms[target]) then
forms[target] = forms[source]
end
end
end
base.forms = add_word_footnotes(base, forms)
base.layout = layout
end
-- Return the attested tables there are for `template` (`noun` or `adjective`), for the error messages: those of the
-- language's attested lects and its dialectal table, plus the templates of the languages whose tables of that kind are
-- all attested.
local function attested_tables(data, template)
local tables = {}
local codes = {}
for code, lect_table in pairs(data.lect_tables or {}) do
if lect_table.table == "attested" then
table.insert(codes, code)
end
end
table.sort(codes)
for _, code in ipairs(codes) do
table.insert(tables, "<lect:" .. code .. ">")
end
if data.indicators[template].dialectal then
table.insert(tables, "<dialectal>")
end
local languages = {}
for code, language in pairs(M.data.languages) do
if language[template] then
table.insert(languages, code)
end
end
table.sort(languages)
for _, code in ipairs(languages) do
if mw.loadData("Module:zlw-lch-decl/data/" .. code).attested then
table.insert(tables, "{{" .. M.data.languages[code][template] .. "}}")
end
end
return table.concat(tables, ", ")
end
-- Work out the table a base is for: its lect (`lect:CODE`), and whether the table is attested, i.e. has only the cells
-- given (for an attested lect, the dialectal table, or a language whose tables are all attested). Throw an error if
-- `recon` or `du` is given for a table that isn't attested, `soft` for a table without its lect's own rules, if a lect
-- tag appears outside the dialectal table, or if a dual slot is given without `du`.
local function resolve_table(base)
local data = base.data
if base.indicators.lect then
base.indicators.lect, base.lect_name = lect_of(data, base.indicators.lect, base.text)
base.lect_table = data.lect_tables[base.indicators.lect]
if not base.lect_table then
local codes = {}
for code in pairs(data.lect_tables) do
table.insert(codes, code)
end
table.sort(codes)
spec_error(("The lect '%s' has no table of its own (the lects with one are %s); give its forms in a "
.. "<dialectal> table"):format(base.indicators.lect, table.concat(codes, ", ")), base.text)
end
end
base.attested = data.attested or base.indicators.dialectal
or base.lect_table and base.lect_table.table == "attested" or nil
for _, name in ipairs({"recon", "du"}) do
if base.indicators[name] and not base.attested then
spec_error(("Only an attested table (%s) takes '%s'"):format(attested_tables(data, base.template), name),
base.text)
end
end
if base.indicators.soft and not (base.lect_table and base.lect_table.table == "paradigm") then
local codes = {}
for code, lect_table in pairs(data.lect_tables) do
if lect_table.table == "paradigm" then
table.insert(codes, "<lect:" .. code .. ">")
end
end
table.sort(codes)
spec_error(("Only a lect with rules of its own (%s) takes 'soft'"):format(table.concat(codes, ", ")), base.text)
end
-- A form of a lect can only be tagged in the dialectal table, so that none ends up among the standard forms.
if not base.indicators.dialectal then
local function check(footnotes)
for _, footnote in ipairs(footnotes or {}) do
if mw.ustring.find(footnote, "^%[lect:") then
spec_error(("A lect's form (%s) belongs in a <dialectal> table"):format(footnote), base.text)
end
end
end
check(base.footnotes)
for _, override in pairs(base.overrides) do
for _, value in ipairs(override.values) do
check(value.footnotes)
end
end
end
if not base.indicators.du then
for slot in pairs(base.overrides) do
if mw.ustring.find(slot, "_d$") then
spec_error(("The dual slot '%s' needs the indicator 'du'"):format(slot), base.text)
end
end
end
end
-- Set the fields of a base that the rules use, based on its indicators.
local function normalize_base(base)
base.gender = base:group("gender")
base.animacy = base:group("animacy")
base.number = base:group("number")
base.kind = base:group("kind")
if base.indicators["*"] then
base.reducible = true
elseif base.indicators["-*"] then
base.reducible = false
end
base.quantity = base.indicators["#"] and "full" or base.indicators["-#"] and "none" or nil
if base.gender == "m" and not base.animacy then
base.animacy = "inan"
end
resolve_table(base)
-- `r:` gives the rules the word as it's read, so it needs a noun that the rules decline.
if base.indicators.r and (base:group("type") or base.attested or base.lect_table) then
spec_error("The indicator 'r' needs a noun that the rules decline", base.text)
end
end
------------------------------------------------------------------------------------------------------------------------
-- Output --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object to render the declined words as a table with [[Module:inflection-table]], with a column for each number shown and
a row for each case. Each row has a `data-case` attribute so that scripts can reorder the cases. The cells come from
`show_forms` in [[Module:inflection utilities]], linked with accelerators for the lemma, and the footnotes go under the
table.
]==]
local TableRenderer = {}
TableRenderer.__index = TableRenderer
function TableRenderer.new(spec)
return setmetatable({spec = spec}, TableRenderer)
end
function TableRenderer:numbers()
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.spec.numbers[number.code] then
table.insert(numbers, number)
end
end
return numbers
end
-- Return the title of a table: `title=` if given, otherwise what the table is (e.g. "Declension of " or "Attested
-- Middle Polish forms of ") followed by its head, unlinked. `suffix` follows the default title (`default_kind` and the
-- lemma), e.g. the declension kinds of an adjective.
function TableRenderer:title(default_kind, suffix)
local spec = self.spec
if spec.title then
return spec.title
end
local kind, head = default_kind, spec.forms.lemma
if spec.kind_title then
kind, head, suffix = spec.kind_title[1], spec.kind_title[2] or head, nil
end
return kind .. M.links.full_link({lang = spec.lang, alt = head}, "term") .. (suffix or "")
end
-- Return the first lines of a table titled `title`: the frame from [[Module:inflection-table]], with its first row
-- opened.
function TableRenderer:top(title)
return {M.inflection_table.make_top{
title = title,
palette = "blue",
tall = "yes",
lang = self.spec.lang:getCode(),
}}
end
-- Close the table in `lines` with its footnotes and categories, and return its wikitext.
function TableRenderer:finish(lines)
local spec = self.spec
table.insert(lines, M.inflection_table.make_bottom{notes = spec.forms.footnote or ""})
if spec.categories[1] and not spec.nocat then
table.insert(lines, M.utilities.format_categories(spec.categories, spec.lang))
end
return table.concat(lines, "\n")
end
function TableRenderer:render()
local spec = self.spec
local numbers = self:numbers()
local slot_list = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(numbers) do
-- A table with one number doesn't name it in its accelerators, and an attested or lect table has none
-- ("-").
local accel = (spec.attested or spec.lect) and "-" or #numbers > 1 and case.accel .. "|" .. number.accel or case.accel
table.insert(slot_list, {case.code .. "_" .. number.code, accel})
end
end
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
-- A Middle Polish form links to its modern spelling.
generate_link = respelled_link(spec),
})
local lines = self:top(self:title("Biến cách của "))
-- make_top has already opened the first row.
table.insert(lines, '! class="outer" |')
for _, number in ipairs(numbers) do
-- A numberless pronoun (e.g. ''siebie'') has an empty header over its one column.
table.insert(lines, '! class="outer" | ' .. (spec.numberless and "" or number.name))
end
for _, case in ipairs(M.data.cases) do
table.insert(lines, ('|- data-case="%s"'):format(case.code))
table.insert(lines, ('! title="%s" | %s'):format(spec.data.case_titles[case.code], case.name))
for _, number in ipairs(numbers) do
local cell = spec.forms[case.code .. "_" .. number.code]
table.insert(lines, "| " .. (cell or "—"))
end
end
return self:finish(lines)
end
--[==[
The rows of an adjective table, by layout. Each row is a case and its cells, and each cell is a slot and the number of
columns it spans. The regular table has the masculine animate, masculine inanimate, feminine and neuter singular, then
the virile and non-virile plural, as in the former [[Module:pl-adjective]]. The dual table (an attested table with `du`)
puts the dual, masculine and feminine/neuter, between them.
]==]
local ADJECTIVE_LAYOUTS = {
regular = {
columns = {
{"số ít", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_p", 2}}},
{"acc", "đối cách", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_mp_pers"},
{"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_p", 2}}},
},
},
plonly = {
columns = {
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_p", 2}}},
{"acc", "đối cách", {{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_p", 2}}},
},
},
-- an attested table with the dual (`du`), between the singular and the plural
dual = {
columns = {
{"số ít", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
{"số đôi", 2, {"giống đực", "giống cái/<wbr />giống trung"}},
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_m_d"}, {"nom_fn_d"},
{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_d", 2}, {"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_d", 2}, {"dat_p", 2}}},
{"acc", "đối cách", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_m_d"}, {"acc_fn_d"},
{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_d", 2}, {"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_d", 2}, {"loc_p", 2}}},
},
},
dwa = {
columns = {
{"plural", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_mp_pers"}, {"nom_mp_npers"}, {"nom_fp"}, {"nom_np"}}},
{"gen", "sinh cách", {{"gen_p", 4}}},
{"dat", "dữ cách", {{"dat_p", 4}}},
{"acc", "đối cách", {{"acc_mp_pers"}, {"acc_mp_npers"}, {"acc_fp"}, {"acc_np"}}},
{"ins", "cách công cụ", {{"ins_mnp", 2}, {"ins_fp"}, {"ins_mnp"}}},
{"loc", "định vị cách", {{"loc_p", 4}}},
},
},
}
function TableRenderer:renderAdjective()
local spec = self.spec
local layout = ADJECTIVE_LAYOUTS[spec.layout]
local slot_list = {}
for slot, accel in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, (spec.lect or spec.attested) and "-" or accel})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
generate_link = respelled_link(spec),
})
local lines = self:top(self:title("Biến cách của ",
spec.kinds[1] and " (" .. table.concat(spec.kinds, " // ") .. ")" or nil))
-- make_top has already opened the first row. Add the number headers, then the gender headers.
table.insert(lines, '! class="outer" rowspan="2" |')
for _, column in ipairs(layout.columns) do
table.insert(lines, ('! class="outer" colspan="%d" | %s'):format(column[2], column[1]))
end
table.insert(lines, "|- class=\"secondary\"")
for _, column in ipairs(layout.columns) do
for _, header in ipairs(column[3]) do
table.insert(lines, "! " .. header)
end
end
for _, row in ipairs(layout.rows) do
table.insert(lines, ('|- data-case="%s"'):format(row[1]))
table.insert(lines, "! " .. row[2])
for _, cell in ipairs(row[3]) do
local span = cell[2] and ('colspan="%d" | '):format(cell[2]) or ""
table.insert(lines, "| " .. span .. (spec.forms[cell[1]] or "—"))
end
end
if spec.forms.short and spec.forms.short ~= "—" then
table.insert(lines, '|- data-case="short"')
table.insert(lines, "! dạng ngắn")
table.insert(lines, '| colspan="2" | ' .. spec.forms.short)
end
return self:finish(lines)
end
------------------------------------------------------------------------------------------------------------------------
-- The call --
------------------------------------------------------------------------------------------------------------------------
--[==[
Decline a noun call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl` or `zlw-opl`). Return the
alternant multiword spec from [[Module:inflection utilities]], with the fields `forms` (a table mapping each slot to a
list of form objects), `numbers` (a set of `s`, `d` and `p`), `categories`, `title` and `nocat`.
]==]
function export.decline_noun(args, pagename, lang_code)
local data, lang = language_of(lang_code, "noun")
-- The angle brackets are omittable, so a bare word would be read as an indicator; with no spec, decline the page
-- name with no indicators.
local spec_text = args[1] or ""
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
local base = Spec.parse(angle_bracket_spec, "noun", data, lang)
normalize_base(base)
return base
end,
allow_blank_lemma = true,
angle_brackets_omittable = true,
}
local spec = M.inflection_utilities.parse_inflected_text(spec_text, parse_props)
local number, noun
local word_count = 0
M.inflection_utilities.map_word_specs(spec, function()
word_count = word_count + 1
end)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
-- An irregular noun has the gender and animacy of its lexicon entry. They're used if the spec gives none, and
-- giving others is an error.
local irregular = base.indicators.irreg and data.irregular_nouns[base.indicators.decllemma or base.lemma]
if irregular then
if base.gender and (base.gender ~= irregular.gender or base.animacy ~= irregular.animacy) then
spec_error(("The irregular noun '%s' is <%s>"):format(base.lemma,
irregular.gender .. (irregular.animacy and "." .. irregular.animacy or "")), base.text)
end
base.gender, base.animacy = irregular.gender, irregular.animacy
end
base.in_phrase = word_count > 1 and #spec.alternant_or_word_specs > 1 or nil
number = number or base.number
if not base.indicators["+"] and base.gender then
noun = noun or base
end
end)
-- An adjectival word (`+`) agrees with the noun of the phrase, taking whatever gender, animacy and number it
-- doesn't give itself.
M.inflection_utilities.map_word_specs(spec, function(base)
if base.indicators["+"] and noun then
base.gender = base.gender or noun.gender
if base.gender == noun.gender then
base.animacy = base.animacy or noun.animacy
end
base.number = base.number or noun.number
end
if base.indicators["+"] and not base.gender then
error(("The adjectival word '%s' needs a gender, or a noun in the phrase"):format(base.lemma), 0)
end
end)
local slot_list = {}
for _, entry in ipairs(M.data.noun_slots) do
table.insert(slot_list, {entry.slot, entry.slot})
end
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_word,
})
local first
M.inflection_utilities.map_word_specs(spec, function(base)
first = first or base
end)
spec.lang = lang
spec.data = data
spec.numbers = number == "sg" and {s = true} or number == "pl" and {p = true} or {s = true, p = true}
if first.indicators.du then
spec.numbers.d = true
end
-- A collective numeral has only the plural.
if first.indicators.num then
spec.numbers = {p = true}
end
if first.pronoun then
spec.numbers = {}
for _, number_code in ipairs(first.pronoun.numbers) do
spec.numbers[number_code] = true
end
spec.numberless = first.pronoun.numberless
end
spec.categories = {}
-- Only a table of the standard language is categorized; for the lects, the labels of the entry do that.
if not first.attested and not first.indicators.lect then
local function add(name, ...)
table.insert(spec.categories, data.categories[name]:format(...) .. " " .. lang:getCanonicalName())
end
if number == "sg" then
add("singularia_tantum")
elseif number == "pl" then
add("pluralia_tantum")
end
if word_count == 1 then
local indicators = first.indicators
if indicators.irreg then
add("irregular")
elseif indicators.indecl then
add("indeclinable")
elseif indicators["+"] then
add("adjectival")
elseif first.rules and first.rules.used then
local final = final_consonant(data, first.rules.stem)
local stem_type = data.stem_types.velar[final] and "âm vòm" or data.stem_types.soft[final] and "mềm"
or "cứng"
local gender = data.category_genders[first.gender]
if type(gender) == "table" then
gender = gender[first.animacy]
end
-- A plurale tantum has no gender to tell apart, except for a personal one.
if gender and (number ~= "pl" or first.animacy == "pr") then
add("stem", stem_type, gender)
end
local reducible = false
for part in pairs(first.rules.used) do
reducible = reducible or is_mobile(part)
end
if reducible then
add("reducible")
end
local used = first.rules.used
if used.shortened or used.lengthened then
add("quantitative")
end
end
end
end
-- An attested table says what it attests in its title. Its head is the nominative given, or the reconstructed one
-- starred.
spec.attested = first.attested
local head
if first.attested then
local nominative = spec.forms[number == "pl" and "nom_p" or "nom_s"]
head = first.indicators.recon and "*" .. first.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil
end
spec.lect = first.indicators.lect
if first.indicators.lect then
-- A paradigm's table is headed by the lemma, and an attested one by its nominative.
spec.kind_title = {data.lect_titles[first.indicators.lect], first.attested and head or nil}
elseif first.indicators.dialectal then
spec.kind_title = {data.lect_titles.dialectal, head}
elseif data.attested then
spec.kind_title = {"Biến cách của ", head}
end
spec.title = args.title
spec.nocat = args.nocat
spec.lemmas = {pagename}
return spec
end
-- Return the kind of declension of an adjective, for its title and category: `irregular`, or the kind of the first
-- entry in the data's `adjective_kinds` that its lemma matches (hard ''-y'', velar ''-ki'' and ''-gi'', or soft).
local function adjective_kind(base)
if base.indicators.irreg then
return "irregular"
end
local word = base.indicators.decllemma or base.lemma
for _, kind in ipairs(base.data.adjective_kinds) do
if mw.ustring.find(word, kind[1]) then
return kind[2]
end
end
end
--[==[
Decline an adjective call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl`). Return the alternant
multiword spec from [[Module:inflection utilities]], with the fields `forms`, `layout` (`regular`, `plonly`, `dwa` or
`dual`), `kinds` (the declension kinds of its words), `pos` (the part of speech of the table, from `pos:` on one of its
words), `categories`, `title` and `nocat`.
]==]
function export.decline_adjective(args, pagename, lang_code)
local data, lang = language_of(lang_code, "adjective")
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
return Spec.parse(angle_bracket_spec, "adjective", data, lang)
end,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local spec = M.inflection_utilities.parse_inflected_text(args[1] or pagename, parse_props)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
base.lemma = M.links.remove_links(base.lemma)
-- The part of speech belongs to the whole table, so only one word may give it.
local pos = base.indicators.pos
if pos then
if not data.parts_of_speech[pos] then
local names = {}
for name in pairs(data.parts_of_speech) do
table.insert(names, name)
end
table.sort(names)
spec_error(("Unrecognized part of speech '%s'; the parts of speech are %s"):format(pos,
table.concat(names, ", ")), base.text)
elseif spec.pos then
spec_error("The part of speech ('pos:') is given on more than one word", base.text)
end
spec.pos = pos
end
resolve_table(base)
end)
local slot_list = {}
for slot in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, slot})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_adjective_word,
})
spec.pos = spec.pos or "adjective"
local plural_pos = data.parts_of_speech[spec.pos]
spec.layout, spec.kinds, spec.categories = "regular", {}, {}
local seen = {}
M.inflection_utilities.map_word_specs(spec, function(base)
-- A lect's table names its lect and isn't categorized, and neither is a numeral's. An attested table is headed
-- by the masculine nominative given, or the reconstructed lemma starred.
if base.attested then
local nominative = spec.forms.nom_m
spec.attested = true
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect or "dialectal"], base.indicators.recon and "*" .. base.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil}
spec.layout = base.layout or base.indicators.plonly and "plonly" or spec.layout
return
elseif base.indicators.lect then
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect]}
return
elseif base.indicators.num then
spec.layout = base.layout
return
end
local function add(name, ...)
table.insert(spec.categories, data.categories[name]:format(...) .. " " .. lang:getCanonicalName())
end
local kind = adjective_kind(base)
if not seen[kind] then
seen[kind] = true
table.insert(spec.kinds, kind)
add("adjective_kind", kind, plural_pos)
end
if base.overrides.short then
add("short_forms", plural_pos)
end
if base.indicators.decllemma then
add("irregular_stem", plural_pos)
end
if base.layout or base.indicators.plonly then
spec.layout = base.layout or "plonly"
end
end)
spec.title = args.title
spec.nocat = args.nocat
spec.lang = lang
spec.lemmas = {pagename}
return spec
end
-- For each part of speech of a form template such as {{tl|pl-head}}, the entry points whose tables give its forms.
local FORM_ENTRIES = {
["noun forms"] = {"danh từ"},
["proper noun forms"] = {"danh từ"},
["adjective forms"] = {"tính từ"},
["participle forms"] = {"tính từ"},
["pronoun forms"] = {"danh từ", "tính từ"},
["numeral forms"] = {"danh từ", "tính từ"},
}
-- Return the templates whose tables give the forms of the part of speech `pos` (e.g. `noun forms`) in the language
-- `lang_code`, each with its entry point (`noun` or `adjective`).
local function form_templates(pos, lang_code)
local entries = FORM_ENTRIES[pos] or error(("Unrecognized part of speech '%s'"):format(pos), 0)
local entry_templates = M.data.languages[lang_code] or error(("Unrecognized language '%s'"):format(lang_code), 0)
local templates = {}
for _, entry in ipairs(entries) do
local template = entry_templates[entry]
if template then
templates[template] = entry
end
end
return templates
end
--[==[
Return the tag sets of `pagename` as a form of `lemma` in the language `lang_code`, from the declension calls on the
lemma's page. `calls` is a list of `{template = NAME, args = ARGS}`, and `pos` is the part of speech of the form (e.g.
`noun forms`), which determines the templates to read: those of its entry points in `FORM_ENTRIES`, as named in
`languages` in [[Module:zlw-lch-decl/data]]. `slots` and `noslots`, if given, are sets of slot names to keep or leave
out. A call that doesn't decline is skipped.
Each form object in a slot that the table shows and whose form is `pagename` gives one tag set
`{tags = {...}, labels = {...}}`, in the order of the table. For a noun, the tags are the case and number of the slot;
for an adjective, the tags of the slot in `ADJECTIVE_ACCEL`, and a nominative slot gives a vocative tag set as well,
after all the others, since the table shows the two cases as one row. The labels are the lect of the table or of the
form, followed by the form's usage notes (`notes` in the language's data module). So a form that is plain in one slot
and labelled in another gives tag sets with different labels.
]==]
function export.form_tag_sets(pagename, lemma, calls, pos, lang_code, slots, noslots)
local templates = form_templates(pos, lang_code)
local language = mw.loadData("Module:zlw-lch-decl/data/" .. lang_code)
local usage_notes = {}
for _, note in pairs(language.notes or {}) do
usage_notes["[" .. note .. "]"] = note
end
local tag_sets = {}
local function add(slot, form, tags, table_lect)
if form.form ~= pagename or slots and not slots[slot] or noslots and noslots[slot] then
return
end
local labels = {}
if table_lect then
table.insert(labels, table_lect)
end
if form.lect and form.lect ~= table_lect then
table.insert(labels, form.lect)
end
for _, footnote in ipairs(form.footnotes or {}) do
if usage_notes[footnote] then
table.insert(labels, usage_notes[footnote])
end
end
table.insert(tag_sets, {tags = tags, labels = labels})
end
for _, call in ipairs(calls) do
local entry = templates[call.template]
local ok, spec = false, nil
if entry == "noun" then
ok, spec = pcall(export.decline_noun, call.args, lemma, lang_code)
elseif entry == "adjective" then
ok, spec = pcall(export.decline_adjective, call.args, lemma, lang_code)
end
if ok then
local table_lect
M.inflection_utilities.map_word_specs(spec, function(base)
table_lect = table_lect or base.lect_name
end)
if entry == "noun" then
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
-- Only the numbers that the table shows: a singulare tantum still has plural forms, which it
-- doesn't show.
local slot = case.code .. "_" .. number.code
for _, form in ipairs(spec.numbers[number.code] and spec.forms[slot] or {}) do
add(slot, form, {case.accel, number.accel}, table_lect)
end
end
end
else
-- Only the slots that the table's layout shows.
local shown, seen = {}, {}
for _, row in ipairs(ADJECTIVE_LAYOUTS[spec.layout].rows) do
for _, cell in ipairs(row[3]) do
if not seen[cell[1]] then
seen[cell[1]] = true
table.insert(shown, cell[1])
end
end
end
table.insert(shown, "short")
local vocatives = {}
for _, slot in ipairs(shown) do
for _, form in ipairs(spec.forms[slot] or {}) do
local tags = mw.text.split(ADJECTIVE_ACCEL[slot], "|", true)
add(slot, form, tags, table_lect)
for i, tag in ipairs(tags) do
if tag == "nom" then
local vocative = mw.clone(tags)
vocative[i] = "voc"
table.insert(vocatives, {slot, form, vocative})
end
end
end
end
for _, vocative in ipairs(vocatives) do
add(vocative[1], vocative[2], vocative[3], table_lect)
end
end
end
end
return tag_sets
end
-- Return the section of the wikitext `text` for the language named `name` (its level-two heading), or {nil} if there
-- is none.
local function language_section(text, name)
local lines, inside = {}, false
for line in mw.text.gsplit(text, "\n", true) do
if mw.ustring.find(line, "^==[^=].*[^=]==%s*$") then
inside = mw.ustring.match(line, "^==%s*(.-)%s*==%s*$") == name
elseif inside then
table.insert(lines, line)
end
end
return lines[1] and table.concat(lines, "\n") or nil
end
--[==[
Return the definition lines of the page `pagename` as a form of each lemma in `lemmas`, for the form template of the
language `lang` (a code), e.g. {{tl|pl-head}}. For each lemma, the tag sets come from the declension calls in the
language's section of the lemma's page (see `form_tag_sets`, for the part of speech `pos`). They are grouped by their
labels, the unlabelled group first; the tag sets of each group are combined into multipart tags by [[Module:accel]]
and written as one line by [[Module:form of]], with the labels in front. The lines are joined by `"\n# "`. `slots`
and `noslots` are comma-separated slot names to keep or leave out, and `gloss` is a gloss of the lemma. Throw an error
if `pagename` is not a form of any of the lemmas.
]==]
function export.form_definition(args)
local lang = M.languages.getByCode(args.lang)
local function slot_set(list)
return list and M.table.listToSet(mw.text.split(list, "%s*,%s*")) or nil
end
local slots, noslots = slot_set(args.slots), slot_set(args.noslots)
local singular_pos = mw.ustring.gsub(args.pos, "s$", "")
local templates = form_templates(args.pos, args.lang)
local lines = {}
for _, lemma in ipairs(args.lemmas) do
local title = mw.title.new(lemma)
local section = title and title:getContent() and language_section(title:getContent(), lang:getCanonicalName())
if not section then
error(("[[%s]] has no %s section"):format(lemma, lang:getCanonicalName()), 0)
end
local calls = {}
for template in M.template_parser.find_templates(section) do
local name = template:get_name()
if templates[name] then
table.insert(calls, {template = name, args = template:get_arguments()})
end
end
local groups, order = {}, {}
for _, tag_set in ipairs(export.form_tag_sets(args.pagename, lemma, calls, args.pos, args.lang, slots, noslots)) do
local key = table.concat(tag_set.labels, "|")
if not groups[key] then
groups[key] = {labels = tag_set.labels, tag_sets = {}, seen = {}}
table.insert(order, key == "" and 1 or #order + 1, key)
end
local tags = table.concat(tag_set.tags, "|")
if not groups[key].seen[tags] then
groups[key].seen[tags] = true
table.insert(groups[key].tag_sets, {tags = tag_set.tags})
end
end
for _, key in ipairs(order) do
local group = groups[key]
local line = M.form_of.tagged_inflections {
lang = lang,
tag_sets = M.accel.combine_tag_sets_into_multipart(group.tag_sets, lang, singular_pos),
lemmas = {{lang = lang, term = lemma}},
lemma_face = "term",
t = args.gloss,
}
if group.labels[1] then
line = M.labels.show_labels {labels = group.labels, lang = lang} .. " " .. line
end
table.insert(lines, line)
end
end
if not lines[1] then
error(("'%s' is not a form of [[%s]]"):format(args.pagename, table.concat(args.lemmas, "]], [[")), 0)
end
return table.concat(lines, "\n# ")
end
-- Process the arguments of a call of the template of `entry` (`noun` or `adjective`). On the template's own page, a call
-- with no arguments declines the language's example (`examples` in [[Module:zlw-lch-decl/data]]) instead of the page
-- name.
local function process_args(frame, entry)
local language = M.data.languages[frame.args.lang]
return M.parameters.process(frame:getParent().args, {
[1] = {template_default = language and language.examples[entry]},
title = {},
nocat = {type = "boolean"},
json = {type = "boolean"},
pagename = {},
})
end
-- Run the template entry point `entry` (`noun` or `adjective`) on the call of `frame`: decline it with `decline`
-- (`export.decline_noun` or `export.decline_adjective`) and return its table, made by the `TableRenderer` method
-- `render`, or with json=1 the table's data, as `json_data` gives it from the declined spec.
local function run_entry(frame, entry, decline, render, json_data)
local args = process_args(frame, entry)
local spec = decline(args, args.pagename or M.headword_data.pagename, frame.args.lang)
if args.json then
return M.JSON.toJSON(json_data(spec))
end
local renderer = TableRenderer.new(spec)
return renderer[render](renderer)
end
--[==[
Entry point for {{tl|pl-ndecl}} and {{tl|zlw-opl-ndecl}}. Template-callable function to parse and decline a noun given
user-specified arguments and generate a displayable table of the declined forms, or the table's data as JSON with
{{para|json|1}}.
]==]
function export.noun(frame)
return run_entry(frame, "noun", export.decline_noun, "render", function(spec)
return {forms = spec.forms, numbers = spec.numbers, categories = spec.categories, title = spec.title}
end)
end
--[==[
Entry point for {{tl|pl-adecl}}. Template-callable function to parse and decline an adjective given user-specified
arguments and generate a displayable table of the declined forms, or the table's data as JSON with {{para|json|1}}.
]==]
function export.adjective(frame)
return run_entry(frame, "adjective", export.decline_adjective, "renderAdjective", function(spec)
return {forms = spec.forms, layout = spec.layout, kinds = spec.kinds, categories = spec.categories,
title = spec.title}
end)
end
return export
6nezzcnxjbu0fcfi617bqs0p9lbzyfc
2573730
2573724
2026-10-26T16:57:57Z
Hiyuune
50834
2573730
Scribunto
text/plain
--[==[ intro:
This module implements the declension tables of the Lechitic languages: {{tl|pl-ndecl}} for Polish nouns and
{{tl|pl-adecl}} for Polish adjectives (both with their Middle Polish, Standard Kurpie and dialectal tables), and
{{tl|zlw-opl-ndecl}} for Old Polish nouns.
The following terminology is helpful to understand:
* The '''lemma''' is the word being declined, normally the nominative singular, or the nominative plural of a plurale
tantum. In a call it's followed by an inline spec of indicators in angle brackets, e.g.
`{{pl-ndecl|<m.anml.*.datu>}}` (the page name as an animal noun with a mobile ''e'' and the dative in ''-u'') or
`{{pl-ndecl|Morze<n.sg> Bałtyckie<+>}}`.
* A '''slot''' is a particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a
table.
* The '''stem''' is the lemma minus its nominative ending. A '''group''' is the set of nouns that share one set of
rules; a '''rule''' gives the forms of a slot for the stems that end in particular letters; and a '''copy''' is a
slot that takes its forms from another one. See [[Module:zlw-lch-decl/data/pl]] for the details.
* An '''alternation''' is a change to the stem that a rule asks for: dropping or inserting the mobile ''e'', ''ó''/''o''
and ''ą''/''ę'', and the palatalizations.
* A '''base''' is what [[Module:inflection utilities]] calls the parsed spec of a single word: its lemma, indicators and
overrides, plus its forms once it has been declined.
Authorship: [[User:Fenakhay]]
]==]
local ucfirst = require("Module:string utilities").ucfirst
local export = {}
local M = require("Module:module loader").init {
require = {
accel = "Module:accel",
form_of = "Module:form of",
inflection_table = "Module:inflection-table",
inflection_utilities = "Module:inflection utilities",
JSON = "Module:JSON",
labels = "Module:labels",
languages = "Module:languages",
links = "Module:links",
parameters = "Module:parameters",
parse_utilities = "Module:parse utilities",
table = "Module:table",
template_parser = "Module:template parser",
utilities = "Module:utilities",
},
loadData = {
data = "Module:zlw-lch-decl/data",
headword_data = "Module:headword/data",
},
}
-- Return the data module of the language `code` (`Module:zlw-lch-decl/data/CODE`) and its language object. `entry` is
-- the entry point being invoked (`noun` or `adjective`); throw an error if `languages` in [[Module:zlw-lch-decl/data]]
-- doesn't list that entry for the language.
local function language_of(code, entry)
local language = code and M.data.languages[code]
if not language or not language[entry] then
local codes = {}
for known, entries in pairs(M.data.languages) do
if entries[entry] then
table.insert(codes, known)
end
end
table.sort(codes)
error(("The #invoke needs lang= with one of %s"):format(table.concat(codes, ", ")), 0)
end
return mw.loadData("Module:zlw-lch-decl/data/" .. code), M.languages.getByCode(code)
end
------------------------------------------------------------------------------------------------------------------------
-- Spec --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the indicators of a single word, i.e. the `<...>` after its lemma, e.g. `<m.anml.*.datu>`. `Spec.parse`
is the `parse_indicator_spec` callback passed to [[Module:inflection utilities]]; it returns the base of the word, with
its indicators by group and its overrides by slot. The indicators each template knows are listed under `indicators` in
the language's data module, and an unknown one is an error that lists the known ones.
]==]
local Spec = {}
Spec.__index = Spec
local function spec_error(message, text)
error(message .. " in the spec '" .. text .. "'.", 0)
end
-- Return the footnotes in a group that `split_alternating_runs` produced from a bracketed run, i.e. the bracketed
-- segments after the first segment. Throw an error if any text follows a footnote.
local function fetch_footnotes(group, text)
local footnotes
for i = 2, #group - 1, 2 do
if group[i + 1] ~= "" then
spec_error("Only another footnote can follow a footnote", text)
end
footnotes = footnotes or {}
table.insert(footnotes, group[i])
end
return footnotes
end
--[==[
Parse an override of one or more slots of a noun. There are two kinds of overrides:
* Endings, written `CASE[pl]ENDING:ENDING...`, e.g. `genu` or `insplami:mi`. These go on the stem that the slot's rule
uses; an ending that starts with an apostrophe goes after the whole lemma (`gen'a` on ''Google'' gives ''Google'a''),
and with `r:`, endings are written on the lemma like the rules' own (''Barthes'a'').
* Whole forms, written `CASE[pl]:FORM:FORM...`, e.g. `voc:człowiecze:człowieku`.
`CASE+CASE...` sets several cases at once, and `du` in place of `pl` names a dual slot (`nomdu`). Among endings, `+`
stands for the forms the rules give, so that e.g. `nomplowie:+` adds ''-owie'' to them. `-` stands for no ending (among
endings) or no form (among forms), and a footnote can follow any value. `depr` is the deprecative nominative plural of
a masculine personal noun. Return two values: the slots the override applies to, and an object describing it.
]==]
local Overrides = {}
function Overrides.parse(group, text)
local part = group[1]
local slots = {}
while true do
if mw.ustring.sub(part, 1, 4) == "depr" then
table.insert(slots, "depr_p")
part = mw.ustring.sub(part, 5)
else
local case = mw.ustring.sub(part, 1, 3)
if not M.data.case_codes[case] then
spec_error(("Unrecognized case '%s' in an override"):format(case), text)
end
part = mw.ustring.sub(part, 4)
if mw.ustring.find(part, "^pl") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_p")
elseif mw.ustring.find(part, "^du") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_d")
else
table.insert(slots, case .. "_s")
end
end
if mw.ustring.find(part, "^%+[a-z]") then
part = mw.ustring.sub(part, 2)
else
break
end
end
local override = {values = {}}
if mw.ustring.find(part, "^:") then
override.full = true
part = mw.ustring.sub(part, 2)
end
group[1] = part
for _, value_group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")) do
local value = value_group[1]
if value == "" then
spec_error("Use - for an empty ending or no form", text)
end
table.insert(override.values, {
form = value == "-" and "" or value,
default = not override.full and value == "+" or nil,
footnotes = fetch_footnotes(value_group, text),
})
end
return slots, override
end
-- The slots of an adjective table, which an override of {{tl|pl-adecl}} can name, with their accelerator tags (using the
-- codes in [[Module:form of/data]], `nv` = non-virile).
local ADJECTIVE_ACCEL = {
nom_m = "nom|m|s", nom_f = "nom|f|s", nom_n = "nom|n|s", nom_mp_pers = "vr|nom|p", nom_p_not_mp_pers = "nv|nom|p",
nom_mp_npers = "nv|nom|m|p", nom_fp = "nom|f|p", nom_np = "nom|n|p",
gen_mn = "gen|m//n|s", gen_f = "gen|f|s", gen_p = "gen|p",
dat_mn = "dat|m//n|s", dat_f = "dat|f|s", dat_p = "dat|p",
acc_m_an = "an|acc|m|s", acc_m_in = "in|acc|m|s", acc_f = "acc|f|s", acc_n = "acc|n|s",
acc_mp_pers = "vr|acc|p", acc_p_not_mp_pers = "nv|acc|p", acc_mp_npers = "nv|acc|m|p", acc_fp = "acc|f|p",
acc_np = "acc|n|p",
ins_mn = "ins|m//n|s", ins_f = "ins|f|s", ins_p = "ins|p", ins_mnp = "ins|m//n|p", ins_fp = "ins|f|p",
loc_mn = "loc|m//n|s", loc_f = "loc|f|s", loc_p = "loc|p",
nom_m_d = "nom|m|d", nom_fn_d = "nom|f//n|d", gen_d = "gen|d", dat_d = "dat|d", acc_m_d = "acc|m|d",
acc_fn_d = "acc|f//n|d", ins_d = "ins|d", loc_d = "loc|d",
short = "short",
}
--[==[
Parse an override of {{tl|pl-adecl}}, in the format of the former [[Module:pl-adjective]]: `SLOT[+SLOT...]:FORM:FORM...`
with the slot names of the adjective, e.g. `nom_mp_pers:weseli` or `gen_p+loc_p:...`. Only whole forms are allowed.
Return the same two values as `Overrides.parse`.
]==]
function Overrides.parseAdjective(group, text)
local slots = {}
local value_groups = M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")
if #value_groups[1] > 1 then
spec_error("A footnote can't follow the slot name of an override", text)
end
for slot in mw.text.gsplit(value_groups[1][1], "+", true) do
if not ADJECTIVE_ACCEL[slot] then
spec_error(("Unrecognized slot '%s' in an override"):format(slot), text)
end
table.insert(slots, slot)
end
local override = {values = {}, full = true}
for i = 2, #value_groups do
local value = value_groups[i][1]
if value == "" then
spec_error("Use - for no form", text)
end
table.insert(override.values, {form = value == "-" and "" or value, footnotes = fetch_footnotes(value_groups[i], text)})
end
return slots, override
end
-- Return the definition of the indicator `name` for `template`, or nil if there isn't one.
local function indicator_definition(data, template, name)
return data.indicators[template][name]
end
-- Return true if `part` of a spec is an override, i.e. it begins with a case code (or `depr`) and isn't an indicator.
local function is_override(data, template, part)
local name = mw.ustring.match(part, "^([^:]*)") or part
if indicator_definition(data, template, name) then
return false
end
return M.data.case_codes[mw.ustring.sub(part, 1, 3)] ~= nil or mw.ustring.sub(part, 1, 4) == "depr"
end
-- Return true if `part` (`NAME:VALUE`) is an indicator that takes a value (e.g. `decllemma:dń` or `lect:skur`) rather
-- than an override.
local function takes_value(data, template, part)
local definition = indicator_definition(data, template, mw.ustring.match(part, "^([^:]+):"))
return definition and definition.value ~= nil
end
function Spec.parse(angle_bracket_spec, template, data, lang)
local inside = mw.ustring.match(angle_bracket_spec, "^<(.*)>$")
local base = setmetatable({overrides = {}, indicators = {}, groups = {}, template = template, data = data,
lang = lang, text = angle_bracket_spec}, Spec)
if inside == "" then
return base
end
local segments = M.parse_utilities.parse_balanced_segment_run(inside, "[", "]")
for _, group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(segments, "%.")) do
local part = group[1]
if part == "" then
if #group == 1 then
spec_error("Empty indicator (two periods in a row, or a period at an end)", angle_bracket_spec)
end
base.footnotes = fetch_footnotes(group, angle_bracket_spec)
elseif template == "adjective" and mw.ustring.find(part, ":") and not takes_value(data, template, part)
or template ~= "adjective" and is_override(data, template, part) then
local slots, override
if template == "adjective" then
slots, override = Overrides.parseAdjective(group, angle_bracket_spec)
else
slots, override = Overrides.parse(group, angle_bracket_spec)
end
for _, slot in ipairs(slots) do
if base.overrides[slot] then
spec_error(("Two overrides for the slot '%s'"):format(slot), angle_bracket_spec)
end
base.overrides[slot] = override
end
else
if #group > 1 then
spec_error("A footnote can only follow an override or stand alone", angle_bracket_spec)
end
local name, value = mw.ustring.match(part, "^([^:]+):(.*)$")
name = name or part
local definition = indicator_definition(data, template, name)
if not definition then
local names = {}
for known in pairs(data.indicators[template]) do
table.insert(names, known)
end
table.sort(names)
spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")),
angle_bracket_spec)
end
if definition.value and (value == nil or value == "") then
spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), angle_bracket_spec)
elseif not definition.value and value ~= nil then
spec_error(("The indicator '%s' takes no value"):format(name), angle_bracket_spec)
end
if base.indicators[name] ~= nil then
spec_error(("The indicator '%s' is given twice"):format(name), angle_bracket_spec)
end
local key = definition.group or name
if base.groups[key] then
spec_error(("The indicators '%s' and '%s' can't be used together"):format(base.groups[key], name),
angle_bracket_spec)
end
base.groups[key] = name
base.indicators[name] = value or true
end
end
return base
end
-- Return the value set by a group of indicators (e.g. "m" for `gender`), or nil if none of the group was given.
function Spec:group(group)
local name = self.groups[group]
if not name then
return nil
end
return indicator_definition(self.data, self.template, name).sets or name
end
------------------------------------------------------------------------------------------------------------------------
-- Stem --
------------------------------------------------------------------------------------------------------------------------
--[==[
Functions to find the stem of a lemma and apply the alternations of the language's data module to it.
]==]
local Stem = {}
-- Split a lemma into its stem and nominative ending. The ending is the first of the `nominative_endings` of its gender
-- (`m`, `f` or `n`, or `plural` for a plurale tantum) that the lemma ends in with something before it, unless the
-- ending is one of the gender's `nominative_after_consonant` and a vowel precedes it; if there's none, the lemma is its
-- own stem and the ending is empty.
function Stem.split(data, lemma, gender, plural)
local after_consonant = not plural and data.nominative_after_consonant[gender] or {}
for _, ending in ipairs(data.nominative_endings[plural and "plural" or gender]) do
local stem = mw.ustring.match(lemma, "^(.+)" .. ending .. "$")
if stem and not (after_consonant[ending] and mw.ustring.find(mw.ustring.sub(stem, -1), "[" .. data.vowels .. "]")) then
return stem, ending
end
end
return lemma, ""
end
-- Replace the last letters of `stem` according to `map`, trying the longest keys first (up to three letters). Return
-- nil if the stem ends in none of the keys.
local function replace_final(stem, map)
for _, length in ipairs({3, 2, 1}) do
if mw.ustring.len(stem) >= length then
local final = mw.ustring.sub(stem, -length)
if map[final] then
return mw.ustring.sub(stem, 1, -length - 1) .. map[final]
end
end
end
return nil
end
-- Remove the mobile vowel from `stem`, i.e. the first of the data's `mobile_vowels` that it has before its final
-- consonants. Return nil if it has none.
local function reduce(data, stem)
local vowels = data.vowels
for _, mobile in ipairs(data.mobile_vowels) do
local head, final = mw.ustring.match(stem, "^(.-)" .. mobile[1] .. "([^" .. vowels .. "]+)$")
if head and head ~= "" and not (mobile.after_consonant
and mw.ustring.find(mw.ustring.sub(head, -1), "[" .. vowels .. "]")) then
return (mobile.soften and replace_final(head, data[mobile.soften]) or head) .. final
end
end
return nil
end
-- Join a stem and an ending as the language spells them. Before a vowel, a final soft consonant is written with the
-- data's `soft_vowel` (''koń'' + ''-a'' → ''konia''). After it, an ending's first vowel goes if it is one of
-- `soft_vowel_absorbs` (''goleń'' + ''-i'' → ''goleni''), as it does after a softening of the stem that ends in the
-- soft vowel (`softened`: ''Herodzi-'' + ''-y'' → ''Herodzi''). After a stem's own soft vowel, the ending's
-- `hard_vowel` is dropped if that vowel spells a soft consonant (''niuni-'' + ''-y'' → ''niuni'') and written as the
-- soft vowel if not (''Ili-'' + ''-y'' → ''Ilii'').
local function join(data, stem, ending, softened)
if not mw.ustring.find(mw.ustring.sub(ending, 1, 1), "[" .. data.vowels .. "]") then
return stem .. ending
end
local spelled = replace_final(stem, data.soft)
local vowel = data.soft_vowel
local after_vowel = mw.ustring.sub(stem, -mw.ustring.len(vowel)) == vowel
if not spelled and not (softened and after_vowel) then
local hard = data.hard_vowel
if after_vowel and mw.ustring.sub(ending, 1, mw.ustring.len(hard)) == hard then
local rest = mw.ustring.sub(ending, mw.ustring.len(hard) + 1)
return stem .. (replace_final(stem, data.final_soft) and rest or vowel .. rest)
end
return stem .. ending
end
stem = spelled or stem
for _, absorbed in ipairs(data.soft_vowel_absorbs) do
local length = mw.ustring.len(absorbed)
if mw.ustring.sub(ending, 1, length) == absorbed then
return stem .. mw.ustring.sub(ending, length + 1)
end
end
return stem .. ending
end
-- Insert `vowel` before the last consonant of `stem`, spelling a soft consonant before it as before any vowel
-- (''bańk-'' → ''baniek''). Return nil if the stem doesn't end in two consonants.
local function insert(data, stem, vowel)
local vowels = data.vowels
local head, final = mw.ustring.match(stem, "^(.-[^" .. vowels .. "])([^" .. vowels .. "])$")
return head and join(data, head, vowel) .. final or nil
end
-- Change the vowel of the last syllable of `stem`, whose vowels are the letters of `vowels`, according to `map`
-- (`shorten`, `lengthen` or `front` in the data, or `clear` of a lect's paradigm). Return nil if that vowel isn't one
-- of the keys of `map`.
local function alternate(vowels, stem, map)
local letters = ""
for vowel in pairs(map) do
letters = letters .. vowel
end
local head, vowel, tail = mw.ustring.match(stem, "^(.*)([" .. letters .. "])([^" .. vowels .. "]*)$")
return head and head .. map[vowel] .. tail or nil
end
-- Return the stem that `label` names, which is either `plain` or a set of alternations joined with "+" (e.g.
-- `reduced+palatal`). Return nil if one of the alternations doesn't apply to `stem`.
function Stem.apply(data, stem, label)
local text = stem
for part in mw.text.gsplit(label, "+", true) do
if not text then
return nil
end
if part == "reduced" then
text = reduce(data, text)
elseif mw.ustring.find(part, "^inserted_") then
-- `inserted_VOWEL` puts the mobile vowel VOWEL in.
text = insert(data, text, mw.ustring.sub(part, 10))
elseif part == "truncated" then
text = replace_final(text, data.truncate)
elseif part == "spelled" then
text = replace_final(text, data.spelled)
elseif part == "shortened" then
text = alternate(data.vowels, text, data.shorten)
elseif part == "lengthened" then
text = alternate(data.vowels, text, data.lengthen)
elseif part == "fronted" then
text = alternate(data.vowels, text, data.front)
elseif part == "soft" or part == "final_soft" then
-- This is only a spelling, so leave the stem alone if it has no such letter.
text = replace_final(text, data[part]) or text
elseif part == "palatal" or part == "virile" then
text = replace_final(text, data[part])
elseif part == "irregular" then
text = ""
elseif part ~= "plain" then
error(("Internal error: unknown alternation '%s'"):format(part))
end
end
return text
end
------------------------------------------------------------------------------------------------------------------------
-- Noun rules --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the rules of one word's group, with the word's indicators applied. `NounRules.new(base)` finds the group
from the word's gender, kind, number and nominative ending, and `:forms(slot)` returns the forms of a slot by the rule
of the longest matching stem ending, as form objects `{form = ..., footnotes = {...}}`.
]==]
local NounRules = {}
NounRules.__index = NounRules
local function group_key(rule_gender, kind, plural, nominative)
return ("%s %s %s %s"):format(rule_gender, kind, plural and "pl" or "sg", nominative)
end
function NounRules.new(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy]
end
local plural = base.number == "pl"
-- A plurale tantum is either masculine personal (m-pr) or not, and the non-personal ones share the groups of the
-- neuter.
if plural and rule_gender ~= "m-pr" then
rule_gender = "n"
end
if not rule_gender then
spec_error(("The noun '%s' needs a gender (m, f or n)"):format(word), base.text)
end
local stem, nominative = Stem.split(data, word, rule_gender:sub(1, 1), plural)
local kind = base.kind or "common"
local group = data.noun_groups[group_key(rule_gender, kind, plural, nominative)]
or kind ~= "common" and data.noun_groups[group_key(rule_gender, "common", plural, nominative)]
if not group then
error(("No rules for %s nouns in -%s ('%s'); give the forms with overrides and <!>"):format(
rule_gender, nominative, word), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
labels = {}, head_slot = plural and "nom_p" or "nom_s"}, NounRules)
end
-- Return the rule of `slot` for this stem, i.e. the rule of the longest stem ending (up to three letters) that has one.
function NounRules:rule(slot)
local rules = self.group.rules
for size = math.min(3, mw.ustring.len(self.stem)), 0, -1 do
local suffix = size == 0 and "" or mw.ustring.sub(self.stem, -size)
local by_slot = rules[suffix]
if by_slot and by_slot[slot] then
return by_slot[slot]
end
end
return nil
end
-- Return true if a part of an alternation label is about the mobile vowel, i.e. it's `reduced` or `inserted_VOWEL`.
local function is_mobile(part)
return part == "reduced" or mw.ustring.find(part, "^inserted_") ~= nil
end
-- Return the alternation label of an ending of a rule, with the word's indicators applied. `-*` takes out the mobile
-- vowel and `*` puts it in: for a lemma ending in a consonant it's dropped before an ending, and for one ending in a
-- vowel it's inserted into a bare stem (as `inserted_vowel` in the data says). `-#` and `#` do the same for ''ó''/''o''
-- and ''ą''/''ę''. A bare form of a lemma ending in a consonant is the lemma itself (e.g. the accusative of an
-- inanimate noun) and takes neither.
function NounRules:label(label, ending)
local base = self.base
local parts = {}
for part in mw.text.gsplit(label, "+", true) do
parts[part] = true
end
local mobile = false
for part in pairs(parts) do
mobile = mobile or is_mobile(part)
end
local consonant_final = self.nominative == ""
if base.reducible == false then
for part in pairs(parts) do
if is_mobile(part) then
parts[part] = nil
end
end
elseif base.reducible and not mobile then
if consonant_final and ending ~= "" then
parts.reduced = true
elseif ending == "" then
local inserted = self.data.inserted_vowel
parts["inserted_" .. (inserted.after[mw.ustring.sub(self.stem, -2, -2)] or inserted.default)] = true
end
end
if base.quantity == "none" then
parts.shortened, parts.lengthened = nil, nil
elseif base.quantity == "full" and not (parts.shortened or parts.lengthened) then
if consonant_final and ending ~= "" then
parts.shortened = true
elseif ending == "" then
parts.lengthened = true
end
end
-- Put the parts in the order they apply in, with the mobile vowel first.
local ordered = {}
if parts.reduced then
table.insert(ordered, "reduced")
end
local inserted = {}
for part in pairs(parts) do
if mw.ustring.find(part, "^inserted_") then
table.insert(inserted, part)
end
end
table.sort(inserted)
for _, part in ipairs(inserted) do
table.insert(ordered, part)
end
for _, name in ipairs({"truncated", "spelled", "shortened", "lengthened", "fronted", "soft", "final_soft", "palatal",
"virile", "irregular"}) do
if parts[name] then
table.insert(ordered, name)
end
end
return ordered[1] and table.concat(ordered, "+") or "plain"
end
-- Return the last consonant of a stem, which is either one of the data's `digraphs` or a single letter.
local function final_consonant(data, stem)
local last_two = mw.ustring.sub(stem, -2)
return data.digraphs[last_two] and last_two or mw.ustring.sub(stem, -1)
end
-- Return `lemma` followed by `ending`, with an apostrophe between them if the ending starts with a vowel. This is how a
-- form of a word read as another (`r:`) is written (''Barthes'a'', ''Kennedy'ego'', ''Kennedym'').
local function written_form(data, lemma, ending)
if ending == "" then
return lemma
end
return lemma .. (mw.ustring.find(mw.ustring.sub(ending, 1, 1), "[" .. data.vowels .. "]") and "'" or "") .. ending
end
function NounRules:form(label, ending, note)
local footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil
local written = self.base.indicators.r and self.base.lemma
-- An apostrophe keeps the lemma whole before the ending (''Google'' → ''Google'a'').
if mw.ustring.sub(ending, 1, 1) == "'" then
return {form = (written or self.word) .. ending, footnotes = footnotes}
end
local full = self:label(label, ending)
local stem = Stem.apply(self.data, self.stem, full) or self.stem
local form = join(self.data, stem, ending, stem ~= self.stem)
-- With `r:`, the forms are written on the lemma. For a word read with a nominative ending (''Kennedi''), what follows
-- that ending in each ending goes after the lemma (''Kennedy'ego''). For one read with none (''Bart''), a form that
-- changes the stem is written as it's built (''Barcie''), and the other forms put the ending after the lemma without
-- the ''i'' that spells a velar before a vowel (''Jakiem'', but ''Jacques'em'').
if written and self.nominative ~= "" then
local length = mw.ustring.len(self.nominative)
form = written_form(self.data, written,
mw.ustring.sub(ending, 1, length) == self.nominative and mw.ustring.sub(ending, length + 1) or ending)
elseif written and stem == self.stem then
local rest = ending
if self.data.stem_types.velar[final_consonant(self.data, stem)]
and mw.ustring.find(rest, "^i[" .. self.data.vowels .. "]") then
rest = mw.ustring.sub(rest, 2)
end
form = written_form(self.data, written, rest)
end
-- Keep the form's alternations: the table's categories come from the forms it shows.
local object = {form = form, footnotes = footnotes}
self.labels[object] = full
return object
end
-- Return the endings of a rule's cell as a list of `{ending, stem = ..., note = ...}`. A cell is an ending (a string),
-- one ending with a stem or note (e.g. `{ "e", stem = "palatal" }`), or a list of either (e.g. `{ "i", "ów" }`).
local function cell_endings(cell)
if type(cell) == "string" then
return {{cell}}
elseif type(cell[1]) == "string" and cell[2] == nil then
return {cell}
end
local list = {}
for _, ending in ipairs(cell) do
table.insert(list, type(ending) == "string" and {ending} or ending)
end
return list
end
-- Return the forms of `slot` according to its rule, or nil if the group has no rule for the slot.
function NounRules:forms(slot)
local cell = self:rule(slot)
if not cell then
return nil
end
local list = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(list, self:form(ending.stem or "plain", ending[1], ending.note))
end
return list
end
-- Return the alternation label for an ending given in an override of `slot`. If the ending is one of the rule's own
-- endings, use that ending's label; otherwise use the label of the rule's first ending minus the softening that its
-- ending brings (`palatal` before ''-e'', `virile` before the virile ''-i''/''-y''). This way ''dom'' with the locative
-- ''-u'' gives ''domu'', and ''Polak'' with the nominative plural ''-owie'' gives ''Polakowie''.
function NounRules:overrideLabel(slot, ending)
local cell = self:rule(slot)
local endings = cell and cell_endings(cell) or {}
for _, item in ipairs(endings) do
if item[1] == ending then
return item.stem or "plain"
end
end
local kept = {}
for part in mw.text.gsplit(endings[1] and endings[1].stem or "plain", "+", true) do
if part ~= "palatal" and part ~= "virile" and part ~= "irregular" and part ~= "plain" then
table.insert(kept, part)
end
end
return kept[1] and table.concat(kept, "+") or "plain"
end
--[==[
Object holding the rules of an adjective, with the methods of `NounRules`. The group comes from `adjective_groups`
according to the ending of the lemma (one of `adjective_nominatives`). Adjectives take no stem indicators.
]==]
local AdjectiveRules = setmetatable({}, {__index = NounRules})
AdjectiveRules.__index = AdjectiveRules
function AdjectiveRules.new(base, word)
local data = base.data
local stem, nominative, group
for _, ending in ipairs(data.adjective_nominatives) do
stem = mw.ustring.match(word, "^(.+)" .. ending .. "$")
if stem then
nominative = ending
group = data.adjective_groups["adj common sg " .. ending]
break
end
end
if not group then
local endings = {}
for _, ending in ipairs(data.adjective_nominatives) do
table.insert(endings, "-" .. ending)
end
error(("'%s' doesn't end in %s; an irregular adjective takes <irreg>"):format(word,
table.concat(endings, " or ")), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
head_slot = "nom_m", labels = {}}, AdjectiveRules)
end
--[==[
Object holding the rules of a lect's paradigm, i.e. an entry of `lect_tables` with `table = "paradigm"`, such as
Standard Kurpie (`lect:skur`). The paradigm is the table in the data named by the entry's `rules`. Its `types` decide
the type of a lemma, and each type has one ending per slot. It answers the same calls from `decline_word` as
`NounRules`.
]==]
local ParadigmRules = {}
ParadigmRules.__index = ParadigmRules
-- Return the stem, type and declension (the gender whose endings it takes) of a lemma in `paradigm`, decided by its
-- gender and ending (see `types` in the data). With `soft`, a stem whose last consonant can come from mazuration takes
-- its entry's soft type. `name` is the name of the lect, for the error messages.
local function paradigm_type(data, paradigm, name, word, gender, soft, text)
for _, entry in ipairs(gender and paradigm.types[gender] or {}) do
local stem = entry.ending == "" and word or mw.ustring.match(word, "^(.+)" .. entry.ending .. "$")
if stem and not (entry.consonant_final and mw.ustring.find(word, "[" .. paradigm.vowels .. "]$")) then
local final = final_consonant(data, stem)
local type = entry.default
for _, class in ipairs(entry.by_final or {}) do
if paradigm[class[1]][final] then
type = class[2]
break
end
end
if soft then
if not entry.soft then
spec_error(("In the %s rules, a %s noun like '%s' can't take 'soft'"):format(name,
M.data.genders[gender].name, word), text)
elseif type == entry.soft then
spec_error(("The stem '%s' is soft already, so 'soft' isn't needed"):format(stem), text)
elseif not paradigm.mazurated[final] then
local finals = {}
for consonant in pairs(paradigm.mazurated) do
table.insert(finals, consonant)
end
table.sort(finals)
spec_error(("'soft' needs a stem that ends in a consonant from mazuration (%s), unlike '%s'"):format(
table.concat(finals, ", "), stem), text)
end
type = entry.soft
end
return stem, type, entry.declension or gender
end
end
spec_error(("The %s rules have no %s noun like '%s'; give its forms as overrides"):format(name,
gender and M.data.genders[gender].name or "genderless", word), text)
end
-- Return `stem` with the slanted vowel of its last syllable made clear by the `clear` table of `paradigm`, or by
-- `clear_before_nasal` when one of its `nasals` follows the vowel. Return nil if that vowel isn't slanted.
local function clear_vowel(paradigm, stem)
local vowels = paradigm.vowels
local following = mw.ustring.match(stem, "[" .. vowels .. "]([^" .. vowels .. "]?)[^" .. vowels .. "]*$")
local before_nasal = paradigm.nasals and paradigm.nasals[following] and paradigm.clear_before_nasal
return alternate(vowels, stem, before_nasal or paradigm.clear)
end
function ParadigmRules.new(base, word, paradigm, name)
local data = base.data
local plural = base.number == "pl"
local stem, type, declension
if plural then
-- A plurale tantum is declined from its nominative plural, with the plural endings of its gender's hard stems.
if not paradigm.plural_nominatives then
spec_error(("The %s rules have no pluralia tantum"):format(name), base.text)
end
for _, ending in ipairs(paradigm.plural_nominatives) do
stem = stem or mw.ustring.match(word, "^(.+)" .. ending .. "$")
end
if not stem then
spec_error(("The %s rules have no plurale tantum like '%s'"):format(name, word), base.text)
end
if base.indicators.soft then
spec_error(("In the %s rules, a plurale tantum can't take 'soft'"):format(name), base.text)
end
type, declension = "cứng", base.gender or "n"
else
stem, type, declension = paradigm_type(data, paradigm, name, word, base.gender, base.indicators.soft, base.text)
end
local consonant_final = not plural and stem == word
if declension == "m" and base.animacy ~= "inan" and paradigm.animate_types and paradigm.animate_types[type] then
type = paradigm.animate_types[type]
end
if base.reducible then
stem = reduce(data, stem) or spec_error(("The stem '%s' has no mobile e"):format(stem), base.text)
end
-- With `#`, the forms with an ending have the clear vowel of `clear_stem`.
local clear_stem
if base.quantity == "none" then
spec_error(("The %s rules have no vowel alternation for '-#' to remove"):format(name), base.text)
elseif base.quantity == "full" then
if not paradigm.clear then
spec_error(("The %s rules have no vowel alternation for '#'"):format(name), base.text)
elseif not consonant_final then
spec_error(("In the %s rules, '#' needs a lemma that ends in a consonant"):format(name), base.text)
end
clear_stem = clear_vowel(paradigm, stem)
or spec_error(("The stem '%s' has no slanted vowel for '#' to make clear"):format(stem), base.text)
end
local endings = paradigm.nouns[declension][type]
if plural then
local plural_endings = {}
for slot, ending in pairs(endings) do
if mw.ustring.find(slot, "_p$") then
plural_endings[slot] = ending
end
end
endings = plural_endings
end
local copies = {}
for slot, source in pairs(paradigm.copies[declension]) do
copies[slot] = source
end
if base.gender == "m" then
for slot, source in pairs(paradigm.animate_copies[base.animacy]) do
copies[slot] = source
end
end
return setmetatable({base = base, data = data, paradigm = paradigm, word = word, stem = stem, clear_stem = clear_stem,
endings = endings, group = {copies = copies}, head_slot = plural and "nom_p" or "nom_s"}, ParadigmRules)
end
-- Return one form: the stem (with its clear vowel before an ending, under `#`), palatalized if `label` is `palatal` (by
-- the paradigm's own `palatal` table), followed by the ending. After a hardened consonant, the first letter of the
-- ending is respelled by `hardened_spelling`.
function ParadigmRules:form(label, ending, note)
local paradigm = self.paradigm
local stem = self.clear_stem and ending ~= "" and self.clear_stem or self.stem
if label == "palatal" then
stem = replace_final(stem, paradigm.palatal) or stem
end
if paradigm.hardened and paradigm.hardened[final_consonant(self.data, stem)] then
local respelled = paradigm.hardened_spelling and paradigm.hardened_spelling[mw.ustring.sub(ending, 1, 1)]
if respelled then
ending = respelled .. mw.ustring.sub(ending, 2)
end
end
return {form = stem .. ending, footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil}
end
function ParadigmRules:forms(slot)
local cell = self.endings[slot]
if not cell then
return {}
end
if type(cell) == "string" then
return {self:form("plain", cell)}
end
return {self:form(cell.stem or "plain", cell[1], cell.note)}
end
-- Return the stem label of a slot's rule. An ending given for the slot in an override goes on that stem.
function ParadigmRules:overrideLabel(slot)
local cell = self.endings[slot]
return type(cell) == "table" and cell.stem or "plain"
end
------------------------------------------------------------------------------------------------------------------------
-- Declension --
------------------------------------------------------------------------------------------------------------------------
-- Return the forms of a noun from the lexicon (`<irreg>`) or of an indeclinable noun (`<indecl>`).
local function lexicon_forms(base, word)
local forms = {}
if base.indicators.irreg then
local list = base.data.irregular_nouns[word]
if not list then
error(("'%s' is not one of the irregular nouns"):format(word), 0)
end
for i, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = list[i]}}
end
elseif base.indicators.indecl then
for _, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = word}}
end
end
return forms
end
-- Return the masculine nominative singular of an adjectival word given in another gender, using `adjective_lemma` in
-- the data, e.g. ''teściowa'' → ''teściowy'', ''tania'' → ''tani'', ''bykowe'' → ''bykowy'', ''wielkie'' →
-- ''wielki''. A plural such as ''Zjednoczone'' works the same way.
local function adjective_lemma(data, word, rule_gender, plural)
local lemma = data.adjective_lemma
for _, ending in ipairs(lemma.endings[plural and "plural" or rule_gender] or {}) do
local stem = mw.ustring.match(word, "^(.+)" .. ending[1] .. "$")
if stem then
return stem .. ((ending.soft or lemma.soft_after[mw.ustring.sub(stem, -1)]) and lemma.soft or lemma.hard)
end
end
return word
end
--[==[
Return the masculine nominative singular that goes with a virile plural, e.g. ''krewni'' → ''krewny'', ''polscy'' →
''polski''. We try each word that the data's `palatal` table could have softened into the plural (before one of the
`virile_endings`) and return the one whose virile nominative plural, as the adjective rules give it, is that plural.
Return {nil} if there's none.
]==]
local function virile_lemma(data, word)
local adjective = {indicators = {}, overrides = {}, data = data}
for final, softened in pairs(data.palatal) do
for _, ending in ipairs(data.virile_endings) do
local stem = mw.ustring.match(word, "^(.+)" .. softened .. ending .. "$")
if stem then
for _, nominative in ipairs(data.adjective_nominatives) do
local lemma = stem .. final .. nominative
local ok, rules = pcall(AdjectiveRules.new, adjective, lemma)
if ok then
for _, form in ipairs(rules:forms("nom_mp_pers")) do
if form.form == word then
return lemma
end
end
end
end
end
end
end
return nil
end
-- Return the forms of an adjective in a lect's paradigm (`lect:skur`): the endings of the paradigm's `adjective` added
-- to the lemma minus its last letter, with the slots shared as for every adjective (`adjective_shared` in the data).
local function paradigm_adjective_forms(data, paradigm, word)
local stem = mw.ustring.sub(word, 1, -2)
local forms = {nom_m = {{form = word}}}
for slot, ending in pairs(paradigm.adjective) do
forms[slot] = {{form = stem .. ending}}
end
for source, targets in pairs(data.adjective_shared) do
for _, target in ipairs(targets) do
forms[target] = forms[source]
end
end
return forms
end
-- Return the forms of an adjectival word (`+`) in a lect's paradigm (`lect:skur`), in noun slots. Its masculine comes from
-- the word as given: the word minus the paradigm's nominative ending for its gender and number, with ''-ï'' after one of
-- the paradigm's `adjective_soft` consonants and ''-y'' otherwise.
local function paradigm_adjectival_forms(base, word, rule_gender, plural)
local data = base.data
local paradigm = data[base.lect_table.rules]
if not paradigm.adjective then
spec_error(("The %s rules have no adjective declension"):format(base.lect_name), base.text)
end
local masculine = word
if plural or rule_gender == "f" or rule_gender == "n" then
local ending = paradigm.adjective[plural and (rule_gender == "m-pr" and "nom_mp_pers" or "nom_p_not_mp_pers")
or "nom_" .. rule_gender]
local stem = mw.ustring.match(word, "^(.+)" .. ending .. "$")
or spec_error(("The adjectival word '%s' doesn't end in -%s"):format(word, ending), base.text)
masculine = stem .. (paradigm.adjective_soft and paradigm.adjective_soft[final_consonant(data, stem)] and "ï" or "y")
end
local adjective = paradigm_adjective_forms(data, paradigm, masculine)
for _, pair in ipairs(data.adjective_accusatives) do
adjective[pair[2]] = adjective[pair[2]] or adjective[pair[1]]
end
local forms = {}
for slot, adjective_slot in pairs(data.adjectival_slots[rule_gender]) do
forms[slot] = adjective[adjective_slot] or {}
end
if rule_gender ~= "m-pr" then
for slot, adjective_slot in pairs(data.adjectival_slots.plural) do
forms[slot] = adjective[adjective_slot] or {}
end
end
forms[plural and "nom_p" or "nom_s"] = {{form = word}}
return forms
end
-- Return the forms of an adjectival word (`+`) in noun slots, using `adjectival_slots` in the data.
local function adjectival_forms(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy or "inan"]
end
local plural = base.number == "pl"
if base.lect_table and base.lect_table.table == "paradigm" then
return paradigm_adjectival_forms(base, word, rule_gender, plural)
end
local lemma = plural and rule_gender == "m-pr" and virile_lemma(data, word) or adjective_lemma(data, word, rule_gender, plural)
local adjective = {lemma = lemma, indicators = {}, overrides = {}, data = data}
local rules = AdjectiveRules.new(adjective, adjective.lemma)
local function forms_of(slot)
if slot == "nom_m" then
return {{form = adjective.lemma}}
end
local source = rules.group.copies[slot]
while source and rules.group.copies[source] do
source = rules.group.copies[source]
end
if source == "nom_m" then
return {{form = adjective.lemma}}
end
return rules:forms(source or slot) or {}
end
local forms = {}
for slot, adjective_slot in pairs(data.adjectival_slots[rule_gender]) do
forms[slot] = forms_of(adjective_slot)
end
if rule_gender ~= "m-pr" then
for slot, adjective_slot in pairs(data.adjectival_slots.plural) do
forms[slot] = forms_of(adjective_slot)
end
end
-- The word as given heads its table.
forms[plural and "nom_p" or "nom_s"] = {{form = word}}
return forms
end
--[==[
Resolve the lect of a `lect:` indicator or a `[lect:CODE:PLACE]` tag through the aliases in the data module of the lects
(`lect_module` in the language's data, which is [[Module:zlw-lch-IPA/data/pl]] for Polish). Return the code and the
name of the lect.
]==]
local function lect_of(data, code, text)
local lects = mw.loadData(data.lect_module)
code = lects.lect_aliases[code] or code
local lect = lects.lects[code]
if not lect then
local codes = {}
for known in pairs(lects.lects) do
table.insert(codes, known)
end
table.sort(codes)
spec_error(("Unrecognized lect '%s'; the lects are %s"):format(code, table.concat(codes, ", ")), text)
end
return code, lect.name
end
-- Return a footnote `[lect:CODE]` or `[lect:CODE:PLACE]` of a word of `base` as it's shown (the name of the lect,
-- formatted as its label is, i.e. linked to the article on the dialect, followed by the place), along with the name of
-- the lect. Return nil if the footnote isn't a lect tag.
local function lect_footnote(base, footnote)
local code, place = mw.ustring.match(footnote, "^%[lect:([^:%]]+):?(.-)%]$")
if not code then
return nil
end
local _, name = lect_of(base.data, code, base.text)
local label = M.labels.get_label_info{label = name, lang = base.lang, nocat = true}.label
return "[" .. label .. (place ~= "" and " (" .. place .. ")" or "") .. "]", name
end
-- Return the link target of a form of an attested lect, i.e. its modern spelling according to `respelling` (e.g.
-- ''ptåka'' → ''ptaka''). Return nil if it's spelled the same.
local function respelled(respelling, form)
local target = mw.ustring.gsub(form, ".", respelling)
return target ~= form and target or nil
end
-- Return a `generate_link` function for `show_forms` for the table of `spec`, which links a respelled form (one with a
-- `target`) to its modern spelling.
local function respelled_link(spec)
return function(data)
if data.form.target then
return M.links.full_link{lang = spec.lang, term = data.form.target, alt = data.form.formval_for_link,
tr = "-"} .. M.inflection_utilities.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
end
--[==[
Return the forms of an attested table (Middle Polish `lect:mpl`, the `dialectal` table and every Old Polish table),
which are the cells given, exactly as given, and nothing else. In a dialectal table, every form must have a lect,
either from its own `[lect:...]` tag or from a tag given for the whole word.
]==]
local function attested_forms(base)
local forms = {}
local word_lect, word_lect_name
local word_footnotes = {}
for _, note in ipairs(base.footnotes or {}) do
local shown, name = lect_footnote(base, note)
word_lect, word_lect_name = word_lect or shown, word_lect_name or name
table.insert(word_footnotes, shown or note)
end
-- the forms with a lect tag of their own, which the lect tag of the word doesn't go on
local own_lect = {}
local respelling = base.lect_table and base.lect_table.respelling and base.data[base.lect_table.respelling]
for slot, override in pairs(base.overrides) do
if not override.full then
spec_error(("An attested table takes whole forms: '%s:FORM'"):format(slot), base.text)
end
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
local footnotes, lect, lect_name = {}, nil, nil
for _, note in ipairs(value.footnotes or {}) do
local shown, name = lect_footnote(base, note)
lect, lect_name = lect or shown, lect_name or name
table.insert(footnotes, shown or note)
end
if base.indicators.dialectal then
if not lect and not word_lect then
spec_error(("The dialectal form '%s' needs [lect:CODE]"):format(value.form), base.text)
end
end
-- `lect` is the name of the form's lect, which labels the form's definition line (see `form_tag_sets`).
local form = {
form = value.form,
target = respelling and respelled(respelling, value.form) or nil,
footnotes = footnotes[1] and footnotes or nil,
lect = lect_name or word_lect_name,
}
own_lect[form] = lect and true or nil
table.insert(list, form)
end
end
forms[slot] = list
end
if base.footnotes then
base.footnotes, base.word_lect, base.own_lect = word_footnotes, word_lect, own_lect
end
return forms
end
-- Return the entry of a pronoun in the data's `pronouns` along with the ending its forms take. This is the lemma's own
-- entry (with no ending), or the entry of the pronoun it's made from plus one of the `pronoun_suffixes` (e.g.
-- ''cośkolwiek'' is ''co'' plus ''-śkolwiek'').
local function pronoun_entry(data, lemma)
local pronouns = data.pronouns
if pronouns[lemma] then
return pronouns[lemma], ""
end
for _, suffix in ipairs(data.pronoun_suffixes or {}) do
local head = mw.ustring.match(lemma, "^(.+)" .. suffix .. "$")
if head and pronouns[head] then
return pronouns[head], suffix
end
end
return nil
end
-- Return the forms of a pronoun (`<pron>`) with their notes. In an attested table (Old Polish), the forms given in the
-- spec go on top of them.
local function pronoun_forms(base, word)
local data = base.data
local pronoun, suffix = pronoun_entry(data, word)
if not pronoun then
local lemmas = {}
for lemma in pairs(data.pronouns) do
table.insert(lemmas, lemma)
end
table.sort(lemmas)
local message = ("No pronoun '%s'; the pronouns are %s"):format(word, table.concat(lemmas, ", "))
if data.pronoun_suffixes then
local suffixes = {}
for _, item in ipairs(data.pronoun_suffixes) do
table.insert(suffixes, "-" .. item)
end
message = message .. ", and these with " .. table.concat(suffixes, ", ")
end
spec_error(message, base.text)
end
base.pronoun = pronoun
local forms = {}
for slot, list in pairs(pronoun) do
if slot ~= "numbers" and slot ~= "numberless" then
forms[slot] = {}
for _, item in ipairs(list) do
local form = {form = (type(item) == "table" and item[1] or item) .. suffix}
if type(item) == "table" then
form.footnotes = {}
for _, note in ipairs(item.notes) do
table.insert(form.footnotes, "[" .. data.notes[note] .. "]")
end
end
table.insert(forms[slot], form)
end
end
end
if base.attested then
for slot, list in pairs(attested_forms(base)) do
forms[slot] = list
end
end
return forms
end
-- Return the rule of a numeral in `rules` (`numeral_rules` or `collective_rules` in the data), i.e. the rule of the
-- longest key that the lemma ends in, along with the lemma minus that key.
local function numeral_rule(rules, word, text)
for length = mw.ustring.len(word), 0, -1 do
local key = length == 0 and "" or mw.ustring.sub(word, -length)
if rules[key] then
return rules[key], mw.ustring.sub(word, 1, mw.ustring.len(word) - length)
end
end
spec_error(("No numeral declines like '%s'"):format(word), text)
end
-- Return the forms of a numeral (`<num>`), i.e. the endings of its rule added to its stem.
local function numeral_forms(rules, base, word)
local rule, stem = numeral_rule(rules, word, base.text)
local forms = {}
for slot, cell in pairs(rule) do
forms[slot] = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(forms[slot], {form = stem .. ending[1],
footnotes = ending.note and {"[" .. base.data.notes[ending.note] .. "]"} or nil})
end
end
return forms
end
--[==[
Add the footnotes given for the whole word (`base.footnotes`) after the footnotes of every form, as new form objects,
since a copied slot shares the form objects of its source. In an attested table the word's lect tag
(`base.word_lect`) only goes on the forms without a lect tag of their own (`base.own_lect`). Return the forms.
]==]
local function add_word_footnotes(base, forms)
if not base.footnotes then
return forms
end
for slot, list in pairs(forms) do
local copy = {}
for _, form in ipairs(list) do
local footnotes = {}
for _, note in ipairs(form.footnotes or {}) do
table.insert(footnotes, note)
end
for _, note in ipairs(base.footnotes) do
if not (note == base.word_lect and base.own_lect[form]) then
table.insert(footnotes, note)
end
end
table.insert(copy, {form = form.form, footnotes = footnotes, target = form.target})
end
forms[slot] = copy
end
return forms
end
--[==[
Decline a single word. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]]. First the
rules fill every slot they cover. Then the overrides apply (an ending goes on the stem that the slot's rule uses, and a
form replaces the cell), followed by the copies (unless a copy is overridden itself), the deprecative forms of a
masculine personal noun (after its nominative plural, with a footnote) and finally the footnote for the whole word.
]==]
local function decline_word(base)
local word = base.indicators.decllemma or base.indicators.r or base.lemma
local forms, rules
if base.attested then
base.forms = add_word_footnotes(base, base.indicators.pron and pronoun_forms(base, word) or attested_forms(base))
return
elseif base.indicators.pron then
forms = pronoun_forms(base, word)
elseif base.indicators.num then
forms = numeral_forms(base.data.collective_rules, base, word)
elseif base.indicators.irreg or base.indicators.indecl then
forms = lexicon_forms(base, word)
elseif base.indicators["!"] then
-- A manual table has only the forms its overrides give.
forms = {}
elseif base.indicators["+"] then
forms = adjectival_forms(base, word)
else
rules = base.lect_table and base.lect_table.table == "paradigm"
and ParadigmRules.new(base, word, base.data[base.lect_table.rules], base.lect_name) or NounRules.new(base, word)
-- The lemma heads the table, even when another word is declined in its place (`decllemma`).
forms = {[rules.head_slot] = {{form = base.lemma}}}
-- The rules give the singular and the plural; only an attested table has the dual.
for _, entry in ipairs(M.data.noun_slots) do
local slot = entry.slot
if entry.number ~= "d" and slot ~= rules.head_slot and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
-- A form that is the declined word itself (e.g. an inanimate accusative) belongs to the lemma.
for _, form in ipairs(forms[slot] or {}) do
if form.form == word then
form.form = base.lemma
end
end
end
end
-- In a phrase the deprecative forms would agree with nothing (''pany młodzi''), so only a single word shows
-- them.
if not base.in_phrase then
forms.depr_p = rules:forms("depr_p")
end
end
for slot, override in pairs(base.overrides) do
local list = {}
local rule_forms = forms[slot] or {}
for _, value in ipairs(override.values) do
if value.default then
for _, form in ipairs(rules and rules:forms(slot) or {}) do
table.insert(list, form)
end
elseif override.full then
if value.form ~= "" then
local shown = {form = value.form, footnotes = value.footnotes}
-- A whole form that the rules also give keeps their alternations for the categories (''ojca'' on
-- ''ojciec'').
for _, rule_form in ipairs(rule_forms) do
if rule_form.form == value.form and rules and rules.labels then
rules.labels[shown] = rules.labels[rule_form]
end
end
table.insert(list, shown)
end
else
local form = rules and rules:form(rules:overrideLabel(slot, value.form), value.form) or {form = word .. value.form}
form.footnotes = value.footnotes
table.insert(list, form)
end
end
forms[slot] = list
end
if rules then
-- A copy can copy another copy (e.g. the vocative of a feminine consonant-stem noun is its locative, which is
-- its dative). Fill each one from the slot at the end of its chain, unless a slot along the way is overridden.
local copies = rules.group.copies
for slot in pairs(copies) do
if not base.overrides[slot] then
local source = copies[slot]
while copies[source] and not base.overrides[source] do
source = copies[source]
end
local list = {}
for _, form in ipairs(forms[source] or {}) do
table.insert(list, form)
end
forms[slot] = list
end
end
end
if forms.depr_p then
forms.nom_p = forms.nom_p or {}
-- A deprecative form that's the same as a virile form (e.g. ''zaklinacze'') isn't a separate form, so don't
-- show it twice.
local virile = {}
for _, form in ipairs(forms.nom_p) do
virile[form.form] = true
end
for _, form in ipairs(forms.depr_p) do
if not virile[form.form] then
local shown = {form = form.form, footnotes = form.footnotes or {"[" .. base.data.notes.deprecative .. "]"}}
if rules and rules.labels then
rules.labels[shown] = rules.labels[form]
end
table.insert(forms.nom_p, shown)
end
end
forms.depr_p = nil
end
if rules and rules.labels then
-- Collect the alternations of the forms the table shows, for its categories. A rule's form that an override
-- replaced doesn't count, and neither does a form of a number the table doesn't show.
rules.used = {}
for slot, list in pairs(forms) do
if not base.number or mw.ustring.sub(slot, -1) == mw.ustring.sub(base.number, 1, 1) then
for _, form in ipairs(list) do
for part in mw.text.gsplit(rules.labels[form] or "plain", "+", true) do
rules.used[part] = true
end
end
end
end
end
base.forms = add_word_footnotes(base, forms)
-- Keep the rules the forms came from, and the alternations they used, for the categories.
base.rules = rules
end
-- Join an adjective stem and an ending. If the data's `adjective_dropped` says the last letter of the stem drops before
-- the first letter of the ending, drop it (e.g. ''moj-'' + ''-ich'' → ''moich'').
local function adjective_form(data, stem, ending)
local before = data.adjective_dropped[mw.ustring.sub(stem, -1)]
if before and mw.ustring.sub(ending, 1, mw.ustring.len(before)) == before then
return mw.ustring.sub(stem, 1, -2) .. ending
end
return stem .. ending
end
-- Return the forms of an irregular adjective from `irregular_adjectives`, along with the layout of the table it needs
-- (nil, `dwa` or `plonly`).
local function irregular_adjective_forms(base, word)
local data = base.data
for _, entry in ipairs(data.irregular_adjectives) do
local captured = mw.ustring.match(word, entry.pattern)
if captured or entry.stem and mw.ustring.find(word, entry.pattern) then
local forms = {}
local function add(slot, stem, endings, note)
if type(endings) == "string" then
endings = {endings}
end
for _, ending in ipairs(endings or {}) do
forms[slot] = forms[slot] or {}
local form = ending == "-" and base.lemma or adjective_form(data, stem, ending)
table.insert(forms[slot], {form = form, footnotes = note and {"[" .. note .. "]"} or nil})
end
end
if entry.table ~= "dwa" then
add("nom_m", nil, "-")
end
for _, set in ipairs(entry.sets) do
local stem = (entry.stem or captured) .. (set.add or "")
for slot, endings in pairs(set.endings or {}) do
add(slot, stem, endings, set.note)
for _, target in ipairs(data.adjective_shared[slot] or {}) do
add(target, stem, endings, set.note)
end
end
for slot, endings in pairs(set.own or {}) do
add(slot, stem, endings, set.note)
end
if set.archaic_dative and base.indicators.archdat then
add("dat_mn", stem, set.archaic_dative, data.notes[data.archaic_dative.note])
end
end
return forms, entry.table
end
end
error(("Unrecognized irregular adjective '%s'"):format(word), 0)
end
--[==[
Decline a single adjective. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]] for
{{tl|pl-adecl}}. The rules (or the lexicon of irregular adjectives) fill the slots; then the overrides apply, followed
by the accusatives taken from other slots (unless overridden) and the footnote for the whole word. An attested table
has the cells given and nothing else.
]==]
local function decline_adjective_word(base)
local data = base.data
local word = base.indicators.decllemma or base.lemma
local forms, layout
if base.attested then
-- The cells given and nothing else, with the dual columns if `du` is given.
forms, layout = attested_forms(base), base.indicators.du and "dual" or nil
elseif base.indicators.irreg then
forms, layout = irregular_adjective_forms(base, word)
elseif base.indicators.lect then
local paradigm = data[data.lect_tables[base.indicators.lect].rules]
if not paradigm.adjective then
spec_error(("The %s rules have no adjective declension"):format(base.lect_name), base.text)
end
forms = paradigm_adjective_forms(data, paradigm, word)
-- With `decllemma`, the lemma itself heads the table (''båbcyn'' declined as ''båbcyny'').
forms.nom_m = {{form = base.lemma}}
elseif base.indicators.num then
forms, layout = numeral_forms(data.numeral_rules, base, word), "plonly"
else
local rules = AdjectiveRules.new(base, word)
-- With `decllemma`, the lemma itself still heads the table (''wart'' declined as ''warty'').
forms = {nom_m = {{form = base.lemma}}}
for _, slot in ipairs(data.adjective_slots) do
if slot ~= "nom_m" and slot ~= "short" and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
end
end
if base.indicators.archdat then
local archaic = data.archaic_dative
table.insert(forms.dat_mn, {form = rules.stem .. archaic[1], footnotes = {"[" .. data.notes[archaic.note] .. "]"}})
end
-- Keep the slots that every adjective shares as copies, so that an override of the source carries over.
for slot, source in pairs(rules.group.copies) do
local accusative = mw.ustring.find(slot, "^acc")
if not accusative and not base.overrides[slot] then
forms[slot] = forms[source]
end
end
end
if not base.attested then
for slot, override in pairs(base.overrides) do
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
table.insert(list, {form = value.form, footnotes = value.footnotes})
end
end
forms[slot] = list
end
for _, pair in ipairs(data.adjective_accusatives) do
local source, target = pair[1], pair[2]
if not base.overrides[target] and forms[source] and not (base.indicators.irreg and forms[target]) then
forms[target] = forms[source]
end
end
end
base.forms = add_word_footnotes(base, forms)
base.layout = layout
end
-- Return the attested tables there are for `template` (`noun` or `adjective`), for the error messages: those of the
-- language's attested lects and its dialectal table, plus the templates of the languages whose tables of that kind are
-- all attested.
local function attested_tables(data, template)
local tables = {}
local codes = {}
for code, lect_table in pairs(data.lect_tables or {}) do
if lect_table.table == "attested" then
table.insert(codes, code)
end
end
table.sort(codes)
for _, code in ipairs(codes) do
table.insert(tables, "<lect:" .. code .. ">")
end
if data.indicators[template].dialectal then
table.insert(tables, "<dialectal>")
end
local languages = {}
for code, language in pairs(M.data.languages) do
if language[template] then
table.insert(languages, code)
end
end
table.sort(languages)
for _, code in ipairs(languages) do
if mw.loadData("Module:zlw-lch-decl/data/" .. code).attested then
table.insert(tables, "{{" .. M.data.languages[code][template] .. "}}")
end
end
return table.concat(tables, ", ")
end
-- Work out the table a base is for: its lect (`lect:CODE`), and whether the table is attested, i.e. has only the cells
-- given (for an attested lect, the dialectal table, or a language whose tables are all attested). Throw an error if
-- `recon` or `du` is given for a table that isn't attested, `soft` for a table without its lect's own rules, if a lect
-- tag appears outside the dialectal table, or if a dual slot is given without `du`.
local function resolve_table(base)
local data = base.data
if base.indicators.lect then
base.indicators.lect, base.lect_name = lect_of(data, base.indicators.lect, base.text)
base.lect_table = data.lect_tables[base.indicators.lect]
if not base.lect_table then
local codes = {}
for code in pairs(data.lect_tables) do
table.insert(codes, code)
end
table.sort(codes)
spec_error(("The lect '%s' has no table of its own (the lects with one are %s); give its forms in a "
.. "<dialectal> table"):format(base.indicators.lect, table.concat(codes, ", ")), base.text)
end
end
base.attested = data.attested or base.indicators.dialectal
or base.lect_table and base.lect_table.table == "attested" or nil
for _, name in ipairs({"recon", "du"}) do
if base.indicators[name] and not base.attested then
spec_error(("Only an attested table (%s) takes '%s'"):format(attested_tables(data, base.template), name),
base.text)
end
end
if base.indicators.soft and not (base.lect_table and base.lect_table.table == "paradigm") then
local codes = {}
for code, lect_table in pairs(data.lect_tables) do
if lect_table.table == "paradigm" then
table.insert(codes, "<lect:" .. code .. ">")
end
end
table.sort(codes)
spec_error(("Only a lect with rules of its own (%s) takes 'soft'"):format(table.concat(codes, ", ")), base.text)
end
-- A form of a lect can only be tagged in the dialectal table, so that none ends up among the standard forms.
if not base.indicators.dialectal then
local function check(footnotes)
for _, footnote in ipairs(footnotes or {}) do
if mw.ustring.find(footnote, "^%[lect:") then
spec_error(("A lect's form (%s) belongs in a <dialectal> table"):format(footnote), base.text)
end
end
end
check(base.footnotes)
for _, override in pairs(base.overrides) do
for _, value in ipairs(override.values) do
check(value.footnotes)
end
end
end
if not base.indicators.du then
for slot in pairs(base.overrides) do
if mw.ustring.find(slot, "_d$") then
spec_error(("The dual slot '%s' needs the indicator 'du'"):format(slot), base.text)
end
end
end
end
-- Set the fields of a base that the rules use, based on its indicators.
local function normalize_base(base)
base.gender = base:group("gender")
base.animacy = base:group("animacy")
base.number = base:group("number")
base.kind = base:group("kind")
if base.indicators["*"] then
base.reducible = true
elseif base.indicators["-*"] then
base.reducible = false
end
base.quantity = base.indicators["#"] and "full" or base.indicators["-#"] and "none" or nil
if base.gender == "m" and not base.animacy then
base.animacy = "inan"
end
resolve_table(base)
-- `r:` gives the rules the word as it's read, so it needs a noun that the rules decline.
if base.indicators.r and (base:group("type") or base.attested or base.lect_table) then
spec_error("The indicator 'r' needs a noun that the rules decline", base.text)
end
end
------------------------------------------------------------------------------------------------------------------------
-- Output --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object to render the declined words as a table with [[Module:inflection-table]], with a column for each number shown and
a row for each case. Each row has a `data-case` attribute so that scripts can reorder the cases. The cells come from
`show_forms` in [[Module:inflection utilities]], linked with accelerators for the lemma, and the footnotes go under the
table.
]==]
local TableRenderer = {}
TableRenderer.__index = TableRenderer
function TableRenderer.new(spec)
return setmetatable({spec = spec}, TableRenderer)
end
function TableRenderer:numbers()
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.spec.numbers[number.code] then
table.insert(numbers, number)
end
end
return numbers
end
-- Return the title of a table: `title=` if given, otherwise what the table is (e.g. "Declension of " or "Attested
-- Middle Polish forms of ") followed by its head, unlinked. `suffix` follows the default title (`default_kind` and the
-- lemma), e.g. the declension kinds of an adjective.
function TableRenderer:title(default_kind, suffix)
local spec = self.spec
if spec.title then
return spec.title
end
local kind, head = default_kind, spec.forms.lemma
if spec.kind_title then
kind, head, suffix = spec.kind_title[1], spec.kind_title[2] or head, nil
end
return kind .. M.links.full_link({lang = spec.lang, alt = head}, "term") .. (suffix or "")
end
-- Return the first lines of a table titled `title`: the frame from [[Module:inflection-table]], with its first row
-- opened.
function TableRenderer:top(title)
return {M.inflection_table.make_top{
title = title,
palette = "blue",
tall = "yes",
lang = self.spec.lang:getCode(),
}}
end
-- Close the table in `lines` with its footnotes and categories, and return its wikitext.
function TableRenderer:finish(lines)
local spec = self.spec
table.insert(lines, M.inflection_table.make_bottom{notes = spec.forms.footnote or ""})
if spec.categories[1] and not spec.nocat then
table.insert(lines, M.utilities.format_categories(spec.categories, spec.lang))
end
return table.concat(lines, "\n")
end
function TableRenderer:render()
local spec = self.spec
local numbers = self:numbers()
local slot_list = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(numbers) do
-- A table with one number doesn't name it in its accelerators, and an attested or lect table has none
-- ("-").
local accel = (spec.attested or spec.lect) and "-" or #numbers > 1 and case.accel .. "|" .. number.accel or case.accel
table.insert(slot_list, {case.code .. "_" .. number.code, accel})
end
end
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
-- A Middle Polish form links to its modern spelling.
generate_link = respelled_link(spec),
})
local lines = self:top(self:title("Biến cách của "))
-- make_top has already opened the first row.
table.insert(lines, '! class="outer" |')
for _, number in ipairs(numbers) do
-- A numberless pronoun (e.g. ''siebie'') has an empty header over its one column.
table.insert(lines, '! class="outer" | ' .. (spec.numberless and "" or number.name))
end
for _, case in ipairs(M.data.cases) do
table.insert(lines, ('|- data-case="%s"'):format(case.code))
table.insert(lines, ('! title="%s" | %s'):format(spec.data.case_titles[case.code], case.name))
for _, number in ipairs(numbers) do
local cell = spec.forms[case.code .. "_" .. number.code]
table.insert(lines, "| " .. (cell or "—"))
end
end
return self:finish(lines)
end
--[==[
The rows of an adjective table, by layout. Each row is a case and its cells, and each cell is a slot and the number of
columns it spans. The regular table has the masculine animate, masculine inanimate, feminine and neuter singular, then
the virile and non-virile plural, as in the former [[Module:pl-adjective]]. The dual table (an attested table with `du`)
puts the dual, masculine and feminine/neuter, between them.
]==]
local ADJECTIVE_LAYOUTS = {
regular = {
columns = {
{"số ít", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_p", 2}}},
{"acc", "đối cách", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_mp_pers"},
{"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_p", 2}}},
},
},
plonly = {
columns = {
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_p", 2}}},
{"acc", "đối cách", {{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_p", 2}}},
},
},
-- an attested table with the dual (`du`), between the singular and the plural
dual = {
columns = {
{"số ít", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
{"số đôi", 2, {"giống đực", "giống cái/<wbr />giống trung"}},
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_m_d"}, {"nom_fn_d"},
{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_d", 2}, {"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_d", 2}, {"dat_p", 2}}},
{"acc", "đối cách", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_m_d"}, {"acc_fn_d"},
{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_d", 2}, {"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_d", 2}, {"loc_p", 2}}},
},
},
dwa = {
columns = {
{"plural", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_mp_pers"}, {"nom_mp_npers"}, {"nom_fp"}, {"nom_np"}}},
{"gen", "sinh cách", {{"gen_p", 4}}},
{"dat", "dữ cách", {{"dat_p", 4}}},
{"acc", "đối cách", {{"acc_mp_pers"}, {"acc_mp_npers"}, {"acc_fp"}, {"acc_np"}}},
{"ins", "cách công cụ", {{"ins_mnp", 2}, {"ins_fp"}, {"ins_mnp"}}},
{"loc", "định vị cách", {{"loc_p", 4}}},
},
},
}
function TableRenderer:renderAdjective()
local spec = self.spec
local layout = ADJECTIVE_LAYOUTS[spec.layout]
local slot_list = {}
for slot, accel in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, (spec.lect or spec.attested) and "-" or accel})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
generate_link = respelled_link(spec),
})
local lines = self:top(self:title("Biến cách của ",
spec.kinds[1] and " (" .. table.concat(spec.kinds, " // ") .. ")" or nil))
-- make_top has already opened the first row. Add the number headers, then the gender headers.
table.insert(lines, '! class="outer" rowspan="2" |')
for _, column in ipairs(layout.columns) do
table.insert(lines, ('! class="outer" colspan="%d" | %s'):format(column[2], column[1]))
end
table.insert(lines, "|- class=\"secondary\"")
for _, column in ipairs(layout.columns) do
for _, header in ipairs(column[3]) do
table.insert(lines, "! " .. header)
end
end
for _, row in ipairs(layout.rows) do
table.insert(lines, ('|- data-case="%s"'):format(row[1]))
table.insert(lines, "! " .. row[2])
for _, cell in ipairs(row[3]) do
local span = cell[2] and ('colspan="%d" | '):format(cell[2]) or ""
table.insert(lines, "| " .. span .. (spec.forms[cell[1]] or "—"))
end
end
if spec.forms.short and spec.forms.short ~= "—" then
table.insert(lines, '|- data-case="short"')
table.insert(lines, "! dạng ngắn")
table.insert(lines, '| colspan="2" | ' .. spec.forms.short)
end
return self:finish(lines)
end
------------------------------------------------------------------------------------------------------------------------
-- The call --
------------------------------------------------------------------------------------------------------------------------
--[==[
Decline a noun call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl` or `zlw-opl`). Return the
alternant multiword spec from [[Module:inflection utilities]], with the fields `forms` (a table mapping each slot to a
list of form objects), `numbers` (a set of `s`, `d` and `p`), `categories`, `title` and `nocat`.
]==]
function export.decline_noun(args, pagename, lang_code)
local data, lang = language_of(lang_code, "noun")
-- The angle brackets are omittable, so a bare word would be read as an indicator; with no spec, decline the page
-- name with no indicators.
local spec_text = args[1] or ""
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
local base = Spec.parse(angle_bracket_spec, "noun", data, lang)
normalize_base(base)
return base
end,
allow_blank_lemma = true,
angle_brackets_omittable = true,
}
local spec = M.inflection_utilities.parse_inflected_text(spec_text, parse_props)
local number, noun
local word_count = 0
M.inflection_utilities.map_word_specs(spec, function()
word_count = word_count + 1
end)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
-- An irregular noun has the gender and animacy of its lexicon entry. They're used if the spec gives none, and
-- giving others is an error.
local irregular = base.indicators.irreg and data.irregular_nouns[base.indicators.decllemma or base.lemma]
if irregular then
if base.gender and (base.gender ~= irregular.gender or base.animacy ~= irregular.animacy) then
spec_error(("The irregular noun '%s' is <%s>"):format(base.lemma,
irregular.gender .. (irregular.animacy and "." .. irregular.animacy or "")), base.text)
end
base.gender, base.animacy = irregular.gender, irregular.animacy
end
base.in_phrase = word_count > 1 and #spec.alternant_or_word_specs > 1 or nil
number = number or base.number
if not base.indicators["+"] and base.gender then
noun = noun or base
end
end)
-- An adjectival word (`+`) agrees with the noun of the phrase, taking whatever gender, animacy and number it
-- doesn't give itself.
M.inflection_utilities.map_word_specs(spec, function(base)
if base.indicators["+"] and noun then
base.gender = base.gender or noun.gender
if base.gender == noun.gender then
base.animacy = base.animacy or noun.animacy
end
base.number = base.number or noun.number
end
if base.indicators["+"] and not base.gender then
error(("The adjectival word '%s' needs a gender, or a noun in the phrase"):format(base.lemma), 0)
end
end)
local slot_list = {}
for _, entry in ipairs(M.data.noun_slots) do
table.insert(slot_list, {entry.slot, entry.slot})
end
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_word,
})
local first
M.inflection_utilities.map_word_specs(spec, function(base)
first = first or base
end)
spec.lang = lang
spec.data = data
spec.numbers = number == "sg" and {s = true} or number == "pl" and {p = true} or {s = true, p = true}
if first.indicators.du then
spec.numbers.d = true
end
-- A collective numeral has only the plural.
if first.indicators.num then
spec.numbers = {p = true}
end
if first.pronoun then
spec.numbers = {}
for _, number_code in ipairs(first.pronoun.numbers) do
spec.numbers[number_code] = true
end
spec.numberless = first.pronoun.numberless
end
spec.categories = {}
-- Only a table of the standard language is categorized; for the lects, the labels of the entry do that.
if not first.attested and not first.indicators.lect then
local function add(name, ...)
table.insert(spec.categories, data.categories[name]:format(...) .. " " .. lang:getCanonicalName())
end
if number == "sg" then
add("singularia_tantum")
elseif number == "pl" then
add("pluralia_tantum")
end
if word_count == 1 then
local indicators = first.indicators
if indicators.irreg then
add("irregular")
elseif indicators.indecl then
add("indeclinable")
elseif indicators["+"] then
add("adjectival")
elseif first.rules and first.rules.used then
local final = final_consonant(data, first.rules.stem)
local stem_type = data.stem_types.velar[final] and "âm vòm" or data.stem_types.soft[final] and "mềm"
or "cứng"
local gender = data.category_genders[first.gender]
if type(gender) == "table" then
gender = gender[first.animacy]
end
-- A plurale tantum has no gender to tell apart, except for a personal one.
if gender and (number ~= "pl" or first.animacy == "pr") then
add("stem", stem_type, gender)
end
local reducible = false
for part in pairs(first.rules.used) do
reducible = reducible or is_mobile(part)
end
if reducible then
add("reducible")
end
local used = first.rules.used
if used.shortened or used.lengthened then
add("quantitative")
end
end
end
end
-- An attested table says what it attests in its title. Its head is the nominative given, or the reconstructed one
-- starred.
spec.attested = first.attested
local head
if first.attested then
local nominative = spec.forms[number == "pl" and "nom_p" or "nom_s"]
head = first.indicators.recon and "*" .. first.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil
end
spec.lect = first.indicators.lect
if first.indicators.lect then
-- A paradigm's table is headed by the lemma, and an attested one by its nominative.
spec.kind_title = {data.lect_titles[first.indicators.lect], first.attested and head or nil}
elseif first.indicators.dialectal then
spec.kind_title = {data.lect_titles.dialectal, head}
elseif data.attested then
spec.kind_title = {"Biến cách của ", head}
end
spec.title = args.title
spec.nocat = args.nocat
spec.lemmas = {pagename}
return spec
end
-- Return the kind of declension of an adjective, for its title and category: `irregular`, or the kind of the first
-- entry in the data's `adjective_kinds` that its lemma matches (hard ''-y'', velar ''-ki'' and ''-gi'', or soft).
local function adjective_kind(base)
if base.indicators.irreg then
return "irregular"
end
local word = base.indicators.decllemma or base.lemma
for _, kind in ipairs(base.data.adjective_kinds) do
if mw.ustring.find(word, kind[1]) then
return kind[2]
end
end
end
--[==[
Decline an adjective call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl`). Return the alternant
multiword spec from [[Module:inflection utilities]], with the fields `forms`, `layout` (`regular`, `plonly`, `dwa` or
`dual`), `kinds` (the declension kinds of its words), `pos` (the part of speech of the table, from `pos:` on one of its
words), `categories`, `title` and `nocat`.
]==]
function export.decline_adjective(args, pagename, lang_code)
local data, lang = language_of(lang_code, "adjective")
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
return Spec.parse(angle_bracket_spec, "adjective", data, lang)
end,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local spec = M.inflection_utilities.parse_inflected_text(args[1] or pagename, parse_props)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
base.lemma = M.links.remove_links(base.lemma)
-- The part of speech belongs to the whole table, so only one word may give it.
local pos = base.indicators.pos
if pos then
if not data.parts_of_speech[pos] then
local names = {}
for name in pairs(data.parts_of_speech) do
table.insert(names, name)
end
table.sort(names)
spec_error(("Unrecognized part of speech '%s'; the parts of speech are %s"):format(pos,
table.concat(names, ", ")), base.text)
elseif spec.pos then
spec_error("The part of speech ('pos:') is given on more than one word", base.text)
end
spec.pos = pos
end
resolve_table(base)
end)
local slot_list = {}
for slot in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, slot})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_adjective_word,
})
spec.pos = spec.pos or "adjective"
local plural_pos = ucfirst(data.parts_of_speech[spec.pos])
spec.layout, spec.kinds, spec.categories = "regular", {}, {}
local seen = {}
M.inflection_utilities.map_word_specs(spec, function(base)
-- A lect's table names its lect and isn't categorized, and neither is a numeral's. An attested table is headed
-- by the masculine nominative given, or the reconstructed lemma starred.
if base.attested then
local nominative = spec.forms.nom_m
spec.attested = true
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect or "dialectal"], base.indicators.recon and "*" .. base.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil}
spec.layout = base.layout or base.indicators.plonly and "plonly" or spec.layout
return
elseif base.indicators.lect then
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect]}
return
elseif base.indicators.num then
spec.layout = base.layout
return
end
local function add(name, ...)
table.insert(spec.categories, data.categories[name]:format(...) .. " " .. lang:getCanonicalName())
end
local kind = adjective_kind(base)
if not seen[kind] then
seen[kind] = true
table.insert(spec.kinds, kind)
add("adjective_kind", plural_pos, kind)
end
if base.overrides.short then
add("short_forms", plural_pos)
end
if base.indicators.decllemma then
add("irregular_stem", plural_pos)
end
if base.layout or base.indicators.plonly then
spec.layout = base.layout or "plonly"
end
end)
spec.title = args.title
spec.nocat = args.nocat
spec.lang = lang
spec.lemmas = {pagename}
return spec
end
-- For each part of speech of a form template such as {{tl|pl-head}}, the entry points whose tables give its forms.
local FORM_ENTRIES = {
["noun forms"] = {"danh từ"},
["proper noun forms"] = {"danh từ"},
["adjective forms"] = {"tính từ"},
["participle forms"] = {"tính từ"},
["pronoun forms"] = {"danh từ", "tính từ"},
["numeral forms"] = {"danh từ", "tính từ"},
}
-- Return the templates whose tables give the forms of the part of speech `pos` (e.g. `noun forms`) in the language
-- `lang_code`, each with its entry point (`noun` or `adjective`).
local function form_templates(pos, lang_code)
local entries = FORM_ENTRIES[pos] or error(("Unrecognized part of speech '%s'"):format(pos), 0)
local entry_templates = M.data.languages[lang_code] or error(("Unrecognized language '%s'"):format(lang_code), 0)
local templates = {}
for _, entry in ipairs(entries) do
local template = entry_templates[entry]
if template then
templates[template] = entry
end
end
return templates
end
--[==[
Return the tag sets of `pagename` as a form of `lemma` in the language `lang_code`, from the declension calls on the
lemma's page. `calls` is a list of `{template = NAME, args = ARGS}`, and `pos` is the part of speech of the form (e.g.
`noun forms`), which determines the templates to read: those of its entry points in `FORM_ENTRIES`, as named in
`languages` in [[Module:zlw-lch-decl/data]]. `slots` and `noslots`, if given, are sets of slot names to keep or leave
out. A call that doesn't decline is skipped.
Each form object in a slot that the table shows and whose form is `pagename` gives one tag set
`{tags = {...}, labels = {...}}`, in the order of the table. For a noun, the tags are the case and number of the slot;
for an adjective, the tags of the slot in `ADJECTIVE_ACCEL`, and a nominative slot gives a vocative tag set as well,
after all the others, since the table shows the two cases as one row. The labels are the lect of the table or of the
form, followed by the form's usage notes (`notes` in the language's data module). So a form that is plain in one slot
and labelled in another gives tag sets with different labels.
]==]
function export.form_tag_sets(pagename, lemma, calls, pos, lang_code, slots, noslots)
local templates = form_templates(pos, lang_code)
local language = mw.loadData("Module:zlw-lch-decl/data/" .. lang_code)
local usage_notes = {}
for _, note in pairs(language.notes or {}) do
usage_notes["[" .. note .. "]"] = note
end
local tag_sets = {}
local function add(slot, form, tags, table_lect)
if form.form ~= pagename or slots and not slots[slot] or noslots and noslots[slot] then
return
end
local labels = {}
if table_lect then
table.insert(labels, table_lect)
end
if form.lect and form.lect ~= table_lect then
table.insert(labels, form.lect)
end
for _, footnote in ipairs(form.footnotes or {}) do
if usage_notes[footnote] then
table.insert(labels, usage_notes[footnote])
end
end
table.insert(tag_sets, {tags = tags, labels = labels})
end
for _, call in ipairs(calls) do
local entry = templates[call.template]
local ok, spec = false, nil
if entry == "noun" then
ok, spec = pcall(export.decline_noun, call.args, lemma, lang_code)
elseif entry == "adjective" then
ok, spec = pcall(export.decline_adjective, call.args, lemma, lang_code)
end
if ok then
local table_lect
M.inflection_utilities.map_word_specs(spec, function(base)
table_lect = table_lect or base.lect_name
end)
if entry == "noun" then
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
-- Only the numbers that the table shows: a singulare tantum still has plural forms, which it
-- doesn't show.
local slot = case.code .. "_" .. number.code
for _, form in ipairs(spec.numbers[number.code] and spec.forms[slot] or {}) do
add(slot, form, {case.accel, number.accel}, table_lect)
end
end
end
else
-- Only the slots that the table's layout shows.
local shown, seen = {}, {}
for _, row in ipairs(ADJECTIVE_LAYOUTS[spec.layout].rows) do
for _, cell in ipairs(row[3]) do
if not seen[cell[1]] then
seen[cell[1]] = true
table.insert(shown, cell[1])
end
end
end
table.insert(shown, "short")
local vocatives = {}
for _, slot in ipairs(shown) do
for _, form in ipairs(spec.forms[slot] or {}) do
local tags = mw.text.split(ADJECTIVE_ACCEL[slot], "|", true)
add(slot, form, tags, table_lect)
for i, tag in ipairs(tags) do
if tag == "nom" then
local vocative = mw.clone(tags)
vocative[i] = "voc"
table.insert(vocatives, {slot, form, vocative})
end
end
end
end
for _, vocative in ipairs(vocatives) do
add(vocative[1], vocative[2], vocative[3], table_lect)
end
end
end
end
return tag_sets
end
-- Return the section of the wikitext `text` for the language named `name` (its level-two heading), or {nil} if there
-- is none.
local function language_section(text, name)
local lines, inside = {}, false
for line in mw.text.gsplit(text, "\n", true) do
if mw.ustring.find(line, "^==[^=].*[^=]==%s*$") then
inside = mw.ustring.match(line, "^==%s*(.-)%s*==%s*$") == name
elseif inside then
table.insert(lines, line)
end
end
return lines[1] and table.concat(lines, "\n") or nil
end
--[==[
Return the definition lines of the page `pagename` as a form of each lemma in `lemmas`, for the form template of the
language `lang` (a code), e.g. {{tl|pl-head}}. For each lemma, the tag sets come from the declension calls in the
language's section of the lemma's page (see `form_tag_sets`, for the part of speech `pos`). They are grouped by their
labels, the unlabelled group first; the tag sets of each group are combined into multipart tags by [[Module:accel]]
and written as one line by [[Module:form of]], with the labels in front. The lines are joined by `"\n# "`. `slots`
and `noslots` are comma-separated slot names to keep or leave out, and `gloss` is a gloss of the lemma. Throw an error
if `pagename` is not a form of any of the lemmas.
]==]
function export.form_definition(args)
local lang = M.languages.getByCode(args.lang)
local function slot_set(list)
return list and M.table.listToSet(mw.text.split(list, "%s*,%s*")) or nil
end
local slots, noslots = slot_set(args.slots), slot_set(args.noslots)
local singular_pos = mw.ustring.gsub(args.pos, "s$", "")
local templates = form_templates(args.pos, args.lang)
local lines = {}
for _, lemma in ipairs(args.lemmas) do
local title = mw.title.new(lemma)
local section = title and title:getContent() and language_section(title:getContent(), lang:getCanonicalName())
if not section then
error(("[[%s]] has no %s section"):format(lemma, lang:getCanonicalName()), 0)
end
local calls = {}
for template in M.template_parser.find_templates(section) do
local name = template:get_name()
if templates[name] then
table.insert(calls, {template = name, args = template:get_arguments()})
end
end
local groups, order = {}, {}
for _, tag_set in ipairs(export.form_tag_sets(args.pagename, lemma, calls, args.pos, args.lang, slots, noslots)) do
local key = table.concat(tag_set.labels, "|")
if not groups[key] then
groups[key] = {labels = tag_set.labels, tag_sets = {}, seen = {}}
table.insert(order, key == "" and 1 or #order + 1, key)
end
local tags = table.concat(tag_set.tags, "|")
if not groups[key].seen[tags] then
groups[key].seen[tags] = true
table.insert(groups[key].tag_sets, {tags = tag_set.tags})
end
end
for _, key in ipairs(order) do
local group = groups[key]
local line = M.form_of.tagged_inflections {
lang = lang,
tag_sets = M.accel.combine_tag_sets_into_multipart(group.tag_sets, lang, singular_pos),
lemmas = {{lang = lang, term = lemma}},
lemma_face = "term",
t = args.gloss,
}
if group.labels[1] then
line = M.labels.show_labels {labels = group.labels, lang = lang} .. " " .. line
end
table.insert(lines, line)
end
end
if not lines[1] then
error(("'%s' is not a form of [[%s]]"):format(args.pagename, table.concat(args.lemmas, "]], [[")), 0)
end
return table.concat(lines, "\n# ")
end
-- Process the arguments of a call of the template of `entry` (`noun` or `adjective`). On the template's own page, a call
-- with no arguments declines the language's example (`examples` in [[Module:zlw-lch-decl/data]]) instead of the page
-- name.
local function process_args(frame, entry)
local language = M.data.languages[frame.args.lang]
return M.parameters.process(frame:getParent().args, {
[1] = {template_default = language and language.examples[entry]},
title = {},
nocat = {type = "boolean"},
json = {type = "boolean"},
pagename = {},
})
end
-- Run the template entry point `entry` (`noun` or `adjective`) on the call of `frame`: decline it with `decline`
-- (`export.decline_noun` or `export.decline_adjective`) and return its table, made by the `TableRenderer` method
-- `render`, or with json=1 the table's data, as `json_data` gives it from the declined spec.
local function run_entry(frame, entry, decline, render, json_data)
local args = process_args(frame, entry)
local spec = decline(args, args.pagename or M.headword_data.pagename, frame.args.lang)
if args.json then
return M.JSON.toJSON(json_data(spec))
end
local renderer = TableRenderer.new(spec)
return renderer[render](renderer)
end
--[==[
Entry point for {{tl|pl-ndecl}} and {{tl|zlw-opl-ndecl}}. Template-callable function to parse and decline a noun given
user-specified arguments and generate a displayable table of the declined forms, or the table's data as JSON with
{{para|json|1}}.
]==]
function export.noun(frame)
return run_entry(frame, "noun", export.decline_noun, "render", function(spec)
return {forms = spec.forms, numbers = spec.numbers, categories = spec.categories, title = spec.title}
end)
end
--[==[
Entry point for {{tl|pl-adecl}}. Template-callable function to parse and decline an adjective given user-specified
arguments and generate a displayable table of the declined forms, or the table's data as JSON with {{para|json|1}}.
]==]
function export.adjective(frame)
return run_entry(frame, "adjective", export.decline_adjective, "renderAdjective", function(spec)
return {forms = spec.forms, layout = spec.layout, kinds = spec.kinds, categories = spec.categories,
title = spec.title}
end)
end
return export
kdqyjtl9d86a1estnvkurpgp9h4dlpi
2573824
2573730
2026-10-27T08:07:06Z
Hiyuune
50834
2573824
Scribunto
text/plain
--[==[ intro:
This module implements the declension tables of the Lechitic languages: {{tl|pl-ndecl}} for Polish nouns and
{{tl|pl-adecl}} for Polish adjectives (both with their Middle Polish, Standard Kurpie and dialectal tables), and
{{tl|zlw-opl-ndecl}} for Old Polish nouns.
The following terminology is helpful to understand:
* The '''lemma''' is the word being declined, normally the nominative singular, or the nominative plural of a plurale
tantum. In a call it's followed by an inline spec of indicators in angle brackets, e.g.
`{{pl-ndecl|<m.anml.*.datu>}}` (the page name as an animal noun with a mobile ''e'' and the dative in ''-u'') or
`{{pl-ndecl|Morze<n.sg> Bałtyckie<+>}}`.
* A '''slot''' is a particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a
table.
* The '''stem''' is the lemma minus its nominative ending. A '''group''' is the set of nouns that share one set of
rules; a '''rule''' gives the forms of a slot for the stems that end in particular letters; and a '''copy''' is a
slot that takes its forms from another one. See [[Module:zlw-lch-decl/data/pl]] for the details.
* An '''alternation''' is a change to the stem that a rule asks for: dropping or inserting the mobile ''e'', ''ó''/''o''
and ''ą''/''ę'', and the palatalizations.
* A '''base''' is what [[Module:inflection utilities]] calls the parsed spec of a single word: its lemma, indicators and
overrides, plus its forms once it has been declined.
Authorship: [[User:Fenakhay]]
]==]
local ucfirst = require("Module:string utilities").ucfirst
local export = {}
local M = require("Module:module loader").init {
require = {
accel = "Module:accel",
form_of = "Module:form of",
inflection_table = "Module:inflection-table",
inflection_utilities = "Module:inflection utilities",
JSON = "Module:JSON",
labels = "Module:labels",
languages = "Module:languages",
links = "Module:links",
parameters = "Module:parameters",
parse_utilities = "Module:parse utilities",
table = "Module:table",
template_parser = "Module:template parser",
utilities = "Module:utilities",
},
loadData = {
data = "Module:zlw-lch-decl/data",
headword_data = "Module:headword/data",
},
}
-- Return the data module of the language `code` (`Module:zlw-lch-decl/data/CODE`) and its language object. `entry` is
-- the entry point being invoked (`noun` or `adjective`); throw an error if `languages` in [[Module:zlw-lch-decl/data]]
-- doesn't list that entry for the language.
local function language_of(code, entry)
local language = code and M.data.languages[code]
if not language or not language[entry] then
local codes = {}
for known, entries in pairs(M.data.languages) do
if entries[entry] then
table.insert(codes, known)
end
end
table.sort(codes)
error(("The #invoke needs lang= with one of %s"):format(table.concat(codes, ", ")), 0)
end
return mw.loadData("Module:zlw-lch-decl/data/" .. code), M.languages.getByCode(code)
end
------------------------------------------------------------------------------------------------------------------------
-- Spec --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the indicators of a single word, i.e. the `<...>` after its lemma, e.g. `<m.anml.*.datu>`. `Spec.parse`
is the `parse_indicator_spec` callback passed to [[Module:inflection utilities]]; it returns the base of the word, with
its indicators by group and its overrides by slot. The indicators each template knows are listed under `indicators` in
the language's data module, and an unknown one is an error that lists the known ones.
]==]
local Spec = {}
Spec.__index = Spec
local function spec_error(message, text)
error(message .. " in the spec '" .. text .. "'.", 0)
end
-- Return the footnotes in a group that `split_alternating_runs` produced from a bracketed run, i.e. the bracketed
-- segments after the first segment. Throw an error if any text follows a footnote.
local function fetch_footnotes(group, text)
local footnotes
for i = 2, #group - 1, 2 do
if group[i + 1] ~= "" then
spec_error("Only another footnote can follow a footnote", text)
end
footnotes = footnotes or {}
table.insert(footnotes, group[i])
end
return footnotes
end
--[==[
Parse an override of one or more slots of a noun. There are two kinds of overrides:
* Endings, written `CASE[pl]ENDING:ENDING...`, e.g. `genu` or `insplami:mi`. These go on the stem that the slot's rule
uses; an ending that starts with an apostrophe goes after the whole lemma (`gen'a` on ''Google'' gives ''Google'a''),
and with `r:`, endings are written on the lemma like the rules' own (''Barthes'a'').
* Whole forms, written `CASE[pl]:FORM:FORM...`, e.g. `voc:człowiecze:człowieku`.
`CASE+CASE...` sets several cases at once, and `du` in place of `pl` names a dual slot (`nomdu`). Among endings, `+`
stands for the forms the rules give, so that e.g. `nomplowie:+` adds ''-owie'' to them. `-` stands for no ending (among
endings) or no form (among forms), and a footnote can follow any value. `depr` is the deprecative nominative plural of
a masculine personal noun. Return two values: the slots the override applies to, and an object describing it.
]==]
local Overrides = {}
function Overrides.parse(group, text)
local part = group[1]
local slots = {}
while true do
if mw.ustring.sub(part, 1, 4) == "depr" then
table.insert(slots, "depr_p")
part = mw.ustring.sub(part, 5)
else
local case = mw.ustring.sub(part, 1, 3)
if not M.data.case_codes[case] then
spec_error(("Unrecognized case '%s' in an override"):format(case), text)
end
part = mw.ustring.sub(part, 4)
if mw.ustring.find(part, "^pl") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_p")
elseif mw.ustring.find(part, "^du") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_d")
else
table.insert(slots, case .. "_s")
end
end
if mw.ustring.find(part, "^%+[a-z]") then
part = mw.ustring.sub(part, 2)
else
break
end
end
local override = {values = {}}
if mw.ustring.find(part, "^:") then
override.full = true
part = mw.ustring.sub(part, 2)
end
group[1] = part
for _, value_group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")) do
local value = value_group[1]
if value == "" then
spec_error("Use - for an empty ending or no form", text)
end
table.insert(override.values, {
form = value == "-" and "" or value,
default = not override.full and value == "+" or nil,
footnotes = fetch_footnotes(value_group, text),
})
end
return slots, override
end
-- The slots of an adjective table, which an override of {{tl|pl-adecl}} can name, with their accelerator tags (using the
-- codes in [[Module:form of/data]], `nv` = non-virile).
local ADJECTIVE_ACCEL = {
nom_m = "nom|m|s", nom_f = "nom|f|s", nom_n = "nom|n|s", nom_mp_pers = "vr|nom|p", nom_p_not_mp_pers = "nv|nom|p",
nom_mp_npers = "nv|nom|m|p", nom_fp = "nom|f|p", nom_np = "nom|n|p",
gen_mn = "gen|m//n|s", gen_f = "gen|f|s", gen_p = "gen|p",
dat_mn = "dat|m//n|s", dat_f = "dat|f|s", dat_p = "dat|p",
acc_m_an = "an|acc|m|s", acc_m_in = "in|acc|m|s", acc_f = "acc|f|s", acc_n = "acc|n|s",
acc_mp_pers = "vr|acc|p", acc_p_not_mp_pers = "nv|acc|p", acc_mp_npers = "nv|acc|m|p", acc_fp = "acc|f|p",
acc_np = "acc|n|p",
ins_mn = "ins|m//n|s", ins_f = "ins|f|s", ins_p = "ins|p", ins_mnp = "ins|m//n|p", ins_fp = "ins|f|p",
loc_mn = "loc|m//n|s", loc_f = "loc|f|s", loc_p = "loc|p",
nom_m_d = "nom|m|d", nom_fn_d = "nom|f//n|d", gen_d = "gen|d", dat_d = "dat|d", acc_m_d = "acc|m|d",
acc_fn_d = "acc|f//n|d", ins_d = "ins|d", loc_d = "loc|d",
short = "short",
}
--[==[
Parse an override of {{tl|pl-adecl}}, in the format of the former [[Module:pl-adjective]]: `SLOT[+SLOT...]:FORM:FORM...`
with the slot names of the adjective, e.g. `nom_mp_pers:weseli` or `gen_p+loc_p:...`. Only whole forms are allowed.
Return the same two values as `Overrides.parse`.
]==]
function Overrides.parseAdjective(group, text)
local slots = {}
local value_groups = M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")
if #value_groups[1] > 1 then
spec_error("A footnote can't follow the slot name of an override", text)
end
for slot in mw.text.gsplit(value_groups[1][1], "+", true) do
if not ADJECTIVE_ACCEL[slot] then
spec_error(("Unrecognized slot '%s' in an override"):format(slot), text)
end
table.insert(slots, slot)
end
local override = {values = {}, full = true}
for i = 2, #value_groups do
local value = value_groups[i][1]
if value == "" then
spec_error("Use - for no form", text)
end
table.insert(override.values, {form = value == "-" and "" or value, footnotes = fetch_footnotes(value_groups[i], text)})
end
return slots, override
end
-- Return the definition of the indicator `name` for `template`, or nil if there isn't one.
local function indicator_definition(data, template, name)
return data.indicators[template][name]
end
-- Return true if `part` of a spec is an override, i.e. it begins with a case code (or `depr`) and isn't an indicator.
local function is_override(data, template, part)
local name = mw.ustring.match(part, "^([^:]*)") or part
if indicator_definition(data, template, name) then
return false
end
return M.data.case_codes[mw.ustring.sub(part, 1, 3)] ~= nil or mw.ustring.sub(part, 1, 4) == "depr"
end
-- Return true if `part` (`NAME:VALUE`) is an indicator that takes a value (e.g. `decllemma:dń` or `lect:skur`) rather
-- than an override.
local function takes_value(data, template, part)
local definition = indicator_definition(data, template, mw.ustring.match(part, "^([^:]+):"))
return definition and definition.value ~= nil
end
function Spec.parse(angle_bracket_spec, template, data, lang)
local inside = mw.ustring.match(angle_bracket_spec, "^<(.*)>$")
local base = setmetatable({overrides = {}, indicators = {}, groups = {}, template = template, data = data,
lang = lang, text = angle_bracket_spec}, Spec)
if inside == "" then
return base
end
local segments = M.parse_utilities.parse_balanced_segment_run(inside, "[", "]")
for _, group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(segments, "%.")) do
local part = group[1]
if part == "" then
if #group == 1 then
spec_error("Empty indicator (two periods in a row, or a period at an end)", angle_bracket_spec)
end
base.footnotes = fetch_footnotes(group, angle_bracket_spec)
elseif template == "adjective" and mw.ustring.find(part, ":") and not takes_value(data, template, part)
or template ~= "adjective" and is_override(data, template, part) then
local slots, override
if template == "adjective" then
slots, override = Overrides.parseAdjective(group, angle_bracket_spec)
else
slots, override = Overrides.parse(group, angle_bracket_spec)
end
for _, slot in ipairs(slots) do
if base.overrides[slot] then
spec_error(("Two overrides for the slot '%s'"):format(slot), angle_bracket_spec)
end
base.overrides[slot] = override
end
else
if #group > 1 then
spec_error("A footnote can only follow an override or stand alone", angle_bracket_spec)
end
local name, value = mw.ustring.match(part, "^([^:]+):(.*)$")
name = name or part
local definition = indicator_definition(data, template, name)
if not definition then
local names = {}
for known in pairs(data.indicators[template]) do
table.insert(names, known)
end
table.sort(names)
spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")),
angle_bracket_spec)
end
if definition.value and (value == nil or value == "") then
spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), angle_bracket_spec)
elseif not definition.value and value ~= nil then
spec_error(("The indicator '%s' takes no value"):format(name), angle_bracket_spec)
end
if base.indicators[name] ~= nil then
spec_error(("The indicator '%s' is given twice"):format(name), angle_bracket_spec)
end
local key = definition.group or name
if base.groups[key] then
spec_error(("The indicators '%s' and '%s' can't be used together"):format(base.groups[key], name),
angle_bracket_spec)
end
base.groups[key] = name
base.indicators[name] = value or true
end
end
return base
end
-- Return the value set by a group of indicators (e.g. "m" for `gender`), or nil if none of the group was given.
function Spec:group(group)
local name = self.groups[group]
if not name then
return nil
end
return indicator_definition(self.data, self.template, name).sets or name
end
------------------------------------------------------------------------------------------------------------------------
-- Stem --
------------------------------------------------------------------------------------------------------------------------
--[==[
Functions to find the stem of a lemma and apply the alternations of the language's data module to it.
]==]
local Stem = {}
-- Split a lemma into its stem and nominative ending. The ending is the first of the `nominative_endings` of its gender
-- (`m`, `f` or `n`, or `plural` for a plurale tantum) that the lemma ends in with something before it, unless the
-- ending is one of the gender's `nominative_after_consonant` and a vowel precedes it; if there's none, the lemma is its
-- own stem and the ending is empty.
function Stem.split(data, lemma, gender, plural)
local after_consonant = not plural and data.nominative_after_consonant[gender] or {}
for _, ending in ipairs(data.nominative_endings[plural and "plural" or gender]) do
local stem = mw.ustring.match(lemma, "^(.+)" .. ending .. "$")
if stem and not (after_consonant[ending] and mw.ustring.find(mw.ustring.sub(stem, -1), "[" .. data.vowels .. "]")) then
return stem, ending
end
end
return lemma, ""
end
-- Replace the last letters of `stem` according to `map`, trying the longest keys first (up to three letters). Return
-- nil if the stem ends in none of the keys.
local function replace_final(stem, map)
for _, length in ipairs({3, 2, 1}) do
if mw.ustring.len(stem) >= length then
local final = mw.ustring.sub(stem, -length)
if map[final] then
return mw.ustring.sub(stem, 1, -length - 1) .. map[final]
end
end
end
return nil
end
-- Remove the mobile vowel from `stem`, i.e. the first of the data's `mobile_vowels` that it has before its final
-- consonants. Return nil if it has none.
local function reduce(data, stem)
local vowels = data.vowels
for _, mobile in ipairs(data.mobile_vowels) do
local head, final = mw.ustring.match(stem, "^(.-)" .. mobile[1] .. "([^" .. vowels .. "]+)$")
if head and head ~= "" and not (mobile.after_consonant
and mw.ustring.find(mw.ustring.sub(head, -1), "[" .. vowels .. "]")) then
return (mobile.soften and replace_final(head, data[mobile.soften]) or head) .. final
end
end
return nil
end
-- Join a stem and an ending as the language spells them. Before a vowel, a final soft consonant is written with the
-- data's `soft_vowel` (''koń'' + ''-a'' → ''konia''). After it, an ending's first vowel goes if it is one of
-- `soft_vowel_absorbs` (''goleń'' + ''-i'' → ''goleni''), as it does after a softening of the stem that ends in the
-- soft vowel (`softened`: ''Herodzi-'' + ''-y'' → ''Herodzi''). After a stem's own soft vowel, the ending's
-- `hard_vowel` is dropped if that vowel spells a soft consonant (''niuni-'' + ''-y'' → ''niuni'') and written as the
-- soft vowel if not (''Ili-'' + ''-y'' → ''Ilii'').
local function join(data, stem, ending, softened)
if not mw.ustring.find(mw.ustring.sub(ending, 1, 1), "[" .. data.vowels .. "]") then
return stem .. ending
end
local spelled = replace_final(stem, data.soft)
local vowel = data.soft_vowel
local after_vowel = mw.ustring.sub(stem, -mw.ustring.len(vowel)) == vowel
if not spelled and not (softened and after_vowel) then
local hard = data.hard_vowel
if after_vowel and mw.ustring.sub(ending, 1, mw.ustring.len(hard)) == hard then
local rest = mw.ustring.sub(ending, mw.ustring.len(hard) + 1)
return stem .. (replace_final(stem, data.final_soft) and rest or vowel .. rest)
end
return stem .. ending
end
stem = spelled or stem
for _, absorbed in ipairs(data.soft_vowel_absorbs) do
local length = mw.ustring.len(absorbed)
if mw.ustring.sub(ending, 1, length) == absorbed then
return stem .. mw.ustring.sub(ending, length + 1)
end
end
return stem .. ending
end
-- Insert `vowel` before the last consonant of `stem`, spelling a soft consonant before it as before any vowel
-- (''bańk-'' → ''baniek''). Return nil if the stem doesn't end in two consonants.
local function insert(data, stem, vowel)
local vowels = data.vowels
local head, final = mw.ustring.match(stem, "^(.-[^" .. vowels .. "])([^" .. vowels .. "])$")
return head and join(data, head, vowel) .. final or nil
end
-- Change the vowel of the last syllable of `stem`, whose vowels are the letters of `vowels`, according to `map`
-- (`shorten`, `lengthen` or `front` in the data, or `clear` of a lect's paradigm). Return nil if that vowel isn't one
-- of the keys of `map`.
local function alternate(vowels, stem, map)
local letters = ""
for vowel in pairs(map) do
letters = letters .. vowel
end
local head, vowel, tail = mw.ustring.match(stem, "^(.*)([" .. letters .. "])([^" .. vowels .. "]*)$")
return head and head .. map[vowel] .. tail or nil
end
-- Return the stem that `label` names, which is either `plain` or a set of alternations joined with "+" (e.g.
-- `reduced+palatal`). Return nil if one of the alternations doesn't apply to `stem`.
function Stem.apply(data, stem, label)
local text = stem
for part in mw.text.gsplit(label, "+", true) do
if not text then
return nil
end
if part == "reduced" then
text = reduce(data, text)
elseif mw.ustring.find(part, "^inserted_") then
-- `inserted_VOWEL` puts the mobile vowel VOWEL in.
text = insert(data, text, mw.ustring.sub(part, 10))
elseif part == "truncated" then
text = replace_final(text, data.truncate)
elseif part == "spelled" then
text = replace_final(text, data.spelled)
elseif part == "shortened" then
text = alternate(data.vowels, text, data.shorten)
elseif part == "lengthened" then
text = alternate(data.vowels, text, data.lengthen)
elseif part == "fronted" then
text = alternate(data.vowels, text, data.front)
elseif part == "soft" or part == "final_soft" then
-- This is only a spelling, so leave the stem alone if it has no such letter.
text = replace_final(text, data[part]) or text
elseif part == "palatal" or part == "virile" then
text = replace_final(text, data[part])
elseif part == "irregular" then
text = ""
elseif part ~= "plain" then
error(("Internal error: unknown alternation '%s'"):format(part))
end
end
return text
end
------------------------------------------------------------------------------------------------------------------------
-- Noun rules --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the rules of one word's group, with the word's indicators applied. `NounRules.new(base)` finds the group
from the word's gender, kind, number and nominative ending, and `:forms(slot)` returns the forms of a slot by the rule
of the longest matching stem ending, as form objects `{form = ..., footnotes = {...}}`.
]==]
local NounRules = {}
NounRules.__index = NounRules
local function group_key(rule_gender, kind, plural, nominative)
return ("%s %s %s %s"):format(rule_gender, kind, plural and "pl" or "sg", nominative)
end
function NounRules.new(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy]
end
local plural = base.number == "pl"
-- A plurale tantum is either masculine personal (m-pr) or not, and the non-personal ones share the groups of the
-- neuter.
if plural and rule_gender ~= "m-pr" then
rule_gender = "n"
end
if not rule_gender then
spec_error(("The noun '%s' needs a gender (m, f or n)"):format(word), base.text)
end
local stem, nominative = Stem.split(data, word, rule_gender:sub(1, 1), plural)
local kind = base.kind or "common"
local group = data.noun_groups[group_key(rule_gender, kind, plural, nominative)]
or kind ~= "common" and data.noun_groups[group_key(rule_gender, "common", plural, nominative)]
if not group then
error(("No rules for %s nouns in -%s ('%s'); give the forms with overrides and <!>"):format(
rule_gender, nominative, word), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
labels = {}, head_slot = plural and "nom_p" or "nom_s"}, NounRules)
end
-- Return the rule of `slot` for this stem, i.e. the rule of the longest stem ending (up to three letters) that has one.
function NounRules:rule(slot)
local rules = self.group.rules
for size = math.min(3, mw.ustring.len(self.stem)), 0, -1 do
local suffix = size == 0 and "" or mw.ustring.sub(self.stem, -size)
local by_slot = rules[suffix]
if by_slot and by_slot[slot] then
return by_slot[slot]
end
end
return nil
end
-- Return true if a part of an alternation label is about the mobile vowel, i.e. it's `reduced` or `inserted_VOWEL`.
local function is_mobile(part)
return part == "reduced" or mw.ustring.find(part, "^inserted_") ~= nil
end
-- Return the alternation label of an ending of a rule, with the word's indicators applied. `-*` takes out the mobile
-- vowel and `*` puts it in: for a lemma ending in a consonant it's dropped before an ending, and for one ending in a
-- vowel it's inserted into a bare stem (as `inserted_vowel` in the data says). `-#` and `#` do the same for ''ó''/''o''
-- and ''ą''/''ę''. A bare form of a lemma ending in a consonant is the lemma itself (e.g. the accusative of an
-- inanimate noun) and takes neither.
function NounRules:label(label, ending)
local base = self.base
local parts = {}
for part in mw.text.gsplit(label, "+", true) do
parts[part] = true
end
local mobile = false
for part in pairs(parts) do
mobile = mobile or is_mobile(part)
end
local consonant_final = self.nominative == ""
if base.reducible == false then
for part in pairs(parts) do
if is_mobile(part) then
parts[part] = nil
end
end
elseif base.reducible and not mobile then
if consonant_final and ending ~= "" then
parts.reduced = true
elseif ending == "" then
local inserted = self.data.inserted_vowel
parts["inserted_" .. (inserted.after[mw.ustring.sub(self.stem, -2, -2)] or inserted.default)] = true
end
end
if base.quantity == "none" then
parts.shortened, parts.lengthened = nil, nil
elseif base.quantity == "full" and not (parts.shortened or parts.lengthened) then
if consonant_final and ending ~= "" then
parts.shortened = true
elseif ending == "" then
parts.lengthened = true
end
end
-- Put the parts in the order they apply in, with the mobile vowel first.
local ordered = {}
if parts.reduced then
table.insert(ordered, "reduced")
end
local inserted = {}
for part in pairs(parts) do
if mw.ustring.find(part, "^inserted_") then
table.insert(inserted, part)
end
end
table.sort(inserted)
for _, part in ipairs(inserted) do
table.insert(ordered, part)
end
for _, name in ipairs({"truncated", "spelled", "shortened", "lengthened", "fronted", "soft", "final_soft", "palatal",
"virile", "irregular"}) do
if parts[name] then
table.insert(ordered, name)
end
end
return ordered[1] and table.concat(ordered, "+") or "plain"
end
-- Return the last consonant of a stem, which is either one of the data's `digraphs` or a single letter.
local function final_consonant(data, stem)
local last_two = mw.ustring.sub(stem, -2)
return data.digraphs[last_two] and last_two or mw.ustring.sub(stem, -1)
end
-- Return `lemma` followed by `ending`, with an apostrophe between them if the ending starts with a vowel. This is how a
-- form of a word read as another (`r:`) is written (''Barthes'a'', ''Kennedy'ego'', ''Kennedym'').
local function written_form(data, lemma, ending)
if ending == "" then
return lemma
end
return lemma .. (mw.ustring.find(mw.ustring.sub(ending, 1, 1), "[" .. data.vowels .. "]") and "'" or "") .. ending
end
function NounRules:form(label, ending, note)
local footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil
local written = self.base.indicators.r and self.base.lemma
-- An apostrophe keeps the lemma whole before the ending (''Google'' → ''Google'a'').
if mw.ustring.sub(ending, 1, 1) == "'" then
return {form = (written or self.word) .. ending, footnotes = footnotes}
end
local full = self:label(label, ending)
local stem = Stem.apply(self.data, self.stem, full) or self.stem
local form = join(self.data, stem, ending, stem ~= self.stem)
-- With `r:`, the forms are written on the lemma. For a word read with a nominative ending (''Kennedi''), what follows
-- that ending in each ending goes after the lemma (''Kennedy'ego''). For one read with none (''Bart''), a form that
-- changes the stem is written as it's built (''Barcie''), and the other forms put the ending after the lemma without
-- the ''i'' that spells a velar before a vowel (''Jakiem'', but ''Jacques'em'').
if written and self.nominative ~= "" then
local length = mw.ustring.len(self.nominative)
form = written_form(self.data, written,
mw.ustring.sub(ending, 1, length) == self.nominative and mw.ustring.sub(ending, length + 1) or ending)
elseif written and stem == self.stem then
local rest = ending
if self.data.stem_types.velar[final_consonant(self.data, stem)]
and mw.ustring.find(rest, "^i[" .. self.data.vowels .. "]") then
rest = mw.ustring.sub(rest, 2)
end
form = written_form(self.data, written, rest)
end
-- Keep the form's alternations: the table's categories come from the forms it shows.
local object = {form = form, footnotes = footnotes}
self.labels[object] = full
return object
end
-- Return the endings of a rule's cell as a list of `{ending, stem = ..., note = ...}`. A cell is an ending (a string),
-- one ending with a stem or note (e.g. `{ "e", stem = "palatal" }`), or a list of either (e.g. `{ "i", "ów" }`).
local function cell_endings(cell)
if type(cell) == "string" then
return {{cell}}
elseif type(cell[1]) == "string" and cell[2] == nil then
return {cell}
end
local list = {}
for _, ending in ipairs(cell) do
table.insert(list, type(ending) == "string" and {ending} or ending)
end
return list
end
-- Return the forms of `slot` according to its rule, or nil if the group has no rule for the slot.
function NounRules:forms(slot)
local cell = self:rule(slot)
if not cell then
return nil
end
local list = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(list, self:form(ending.stem or "plain", ending[1], ending.note))
end
return list
end
-- Return the alternation label for an ending given in an override of `slot`. If the ending is one of the rule's own
-- endings, use that ending's label; otherwise use the label of the rule's first ending minus the softening that its
-- ending brings (`palatal` before ''-e'', `virile` before the virile ''-i''/''-y''). This way ''dom'' with the locative
-- ''-u'' gives ''domu'', and ''Polak'' with the nominative plural ''-owie'' gives ''Polakowie''.
function NounRules:overrideLabel(slot, ending)
local cell = self:rule(slot)
local endings = cell and cell_endings(cell) or {}
for _, item in ipairs(endings) do
if item[1] == ending then
return item.stem or "plain"
end
end
local kept = {}
for part in mw.text.gsplit(endings[1] and endings[1].stem or "plain", "+", true) do
if part ~= "palatal" and part ~= "virile" and part ~= "irregular" and part ~= "plain" then
table.insert(kept, part)
end
end
return kept[1] and table.concat(kept, "+") or "plain"
end
--[==[
Object holding the rules of an adjective, with the methods of `NounRules`. The group comes from `adjective_groups`
according to the ending of the lemma (one of `adjective_nominatives`). Adjectives take no stem indicators.
]==]
local AdjectiveRules = setmetatable({}, {__index = NounRules})
AdjectiveRules.__index = AdjectiveRules
function AdjectiveRules.new(base, word)
local data = base.data
local stem, nominative, group
for _, ending in ipairs(data.adjective_nominatives) do
stem = mw.ustring.match(word, "^(.+)" .. ending .. "$")
if stem then
nominative = ending
group = data.adjective_groups["adj common sg " .. ending]
break
end
end
if not group then
local endings = {}
for _, ending in ipairs(data.adjective_nominatives) do
table.insert(endings, "-" .. ending)
end
error(("'%s' doesn't end in %s; an irregular adjective takes <irreg>"):format(word,
table.concat(endings, " or ")), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
head_slot = "nom_m", labels = {}}, AdjectiveRules)
end
--[==[
Object holding the rules of a lect's paradigm, i.e. an entry of `lect_tables` with `table = "paradigm"`, such as
Standard Kurpie (`lect:skur`). The paradigm is the table in the data named by the entry's `rules`. Its `types` decide
the type of a lemma, and each type has one ending per slot. It answers the same calls from `decline_word` as
`NounRules`.
]==]
local ParadigmRules = {}
ParadigmRules.__index = ParadigmRules
-- Return the stem, type and declension (the gender whose endings it takes) of a lemma in `paradigm`, decided by its
-- gender and ending (see `types` in the data). With `soft`, a stem whose last consonant can come from mazuration takes
-- its entry's soft type. `name` is the name of the lect, for the error messages.
local function paradigm_type(data, paradigm, name, word, gender, soft, text)
for _, entry in ipairs(gender and paradigm.types[gender] or {}) do
local stem = entry.ending == "" and word or mw.ustring.match(word, "^(.+)" .. entry.ending .. "$")
if stem and not (entry.consonant_final and mw.ustring.find(word, "[" .. paradigm.vowels .. "]$")) then
local final = final_consonant(data, stem)
local type = entry.default
for _, class in ipairs(entry.by_final or {}) do
if paradigm[class[1]][final] then
type = class[2]
break
end
end
if soft then
if not entry.soft then
spec_error(("In the %s rules, a %s noun like '%s' can't take 'soft'"):format(name,
M.data.genders[gender].name, word), text)
elseif type == entry.soft then
spec_error(("The stem '%s' is soft already, so 'soft' isn't needed"):format(stem), text)
elseif not paradigm.mazurated[final] then
local finals = {}
for consonant in pairs(paradigm.mazurated) do
table.insert(finals, consonant)
end
table.sort(finals)
spec_error(("'soft' needs a stem that ends in a consonant from mazuration (%s), unlike '%s'"):format(
table.concat(finals, ", "), stem), text)
end
type = entry.soft
end
return stem, type, entry.declension or gender
end
end
spec_error(("The %s rules have no %s noun like '%s'; give its forms as overrides"):format(name,
gender and M.data.genders[gender].name or "genderless", word), text)
end
-- Return `stem` with the slanted vowel of its last syllable made clear by the `clear` table of `paradigm`, or by
-- `clear_before_nasal` when one of its `nasals` follows the vowel. Return nil if that vowel isn't slanted.
local function clear_vowel(paradigm, stem)
local vowels = paradigm.vowels
local following = mw.ustring.match(stem, "[" .. vowels .. "]([^" .. vowels .. "]?)[^" .. vowels .. "]*$")
local before_nasal = paradigm.nasals and paradigm.nasals[following] and paradigm.clear_before_nasal
return alternate(vowels, stem, before_nasal or paradigm.clear)
end
function ParadigmRules.new(base, word, paradigm, name)
local data = base.data
local plural = base.number == "pl"
local stem, type, declension
if plural then
-- A plurale tantum is declined from its nominative plural, with the plural endings of its gender's hard stems.
if not paradigm.plural_nominatives then
spec_error(("The %s rules have no pluralia tantum"):format(name), base.text)
end
for _, ending in ipairs(paradigm.plural_nominatives) do
stem = stem or mw.ustring.match(word, "^(.+)" .. ending .. "$")
end
if not stem then
spec_error(("The %s rules have no plurale tantum like '%s'"):format(name, word), base.text)
end
if base.indicators.soft then
spec_error(("In the %s rules, a plurale tantum can't take 'soft'"):format(name), base.text)
end
type, declension = "cứng", base.gender or "n"
else
stem, type, declension = paradigm_type(data, paradigm, name, word, base.gender, base.indicators.soft, base.text)
end
local consonant_final = not plural and stem == word
if declension == "m" and base.animacy ~= "inan" and paradigm.animate_types and paradigm.animate_types[type] then
type = paradigm.animate_types[type]
end
if base.reducible then
stem = reduce(data, stem) or spec_error(("The stem '%s' has no mobile e"):format(stem), base.text)
end
-- With `#`, the forms with an ending have the clear vowel of `clear_stem`.
local clear_stem
if base.quantity == "none" then
spec_error(("The %s rules have no vowel alternation for '-#' to remove"):format(name), base.text)
elseif base.quantity == "full" then
if not paradigm.clear then
spec_error(("The %s rules have no vowel alternation for '#'"):format(name), base.text)
elseif not consonant_final then
spec_error(("In the %s rules, '#' needs a lemma that ends in a consonant"):format(name), base.text)
end
clear_stem = clear_vowel(paradigm, stem)
or spec_error(("The stem '%s' has no slanted vowel for '#' to make clear"):format(stem), base.text)
end
local endings = paradigm.nouns[declension][type]
if plural then
local plural_endings = {}
for slot, ending in pairs(endings) do
if mw.ustring.find(slot, "_p$") then
plural_endings[slot] = ending
end
end
endings = plural_endings
end
local copies = {}
for slot, source in pairs(paradigm.copies[declension]) do
copies[slot] = source
end
if base.gender == "m" then
for slot, source in pairs(paradigm.animate_copies[base.animacy]) do
copies[slot] = source
end
end
return setmetatable({base = base, data = data, paradigm = paradigm, word = word, stem = stem, clear_stem = clear_stem,
endings = endings, group = {copies = copies}, head_slot = plural and "nom_p" or "nom_s"}, ParadigmRules)
end
-- Return one form: the stem (with its clear vowel before an ending, under `#`), palatalized if `label` is `palatal` (by
-- the paradigm's own `palatal` table), followed by the ending. After a hardened consonant, the first letter of the
-- ending is respelled by `hardened_spelling`.
function ParadigmRules:form(label, ending, note)
local paradigm = self.paradigm
local stem = self.clear_stem and ending ~= "" and self.clear_stem or self.stem
if label == "palatal" then
stem = replace_final(stem, paradigm.palatal) or stem
end
if paradigm.hardened and paradigm.hardened[final_consonant(self.data, stem)] then
local respelled = paradigm.hardened_spelling and paradigm.hardened_spelling[mw.ustring.sub(ending, 1, 1)]
if respelled then
ending = respelled .. mw.ustring.sub(ending, 2)
end
end
return {form = stem .. ending, footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil}
end
function ParadigmRules:forms(slot)
local cell = self.endings[slot]
if not cell then
return {}
end
if type(cell) == "string" then
return {self:form("plain", cell)}
end
return {self:form(cell.stem or "plain", cell[1], cell.note)}
end
-- Return the stem label of a slot's rule. An ending given for the slot in an override goes on that stem.
function ParadigmRules:overrideLabel(slot)
local cell = self.endings[slot]
return type(cell) == "table" and cell.stem or "plain"
end
------------------------------------------------------------------------------------------------------------------------
-- Declension --
------------------------------------------------------------------------------------------------------------------------
-- Return the forms of a noun from the lexicon (`<irreg>`) or of an indeclinable noun (`<indecl>`).
local function lexicon_forms(base, word)
local forms = {}
if base.indicators.irreg then
local list = base.data.irregular_nouns[word]
if not list then
error(("'%s' is not one of the irregular nouns"):format(word), 0)
end
for i, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = list[i]}}
end
elseif base.indicators.indecl then
for _, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = word}}
end
end
return forms
end
-- Return the masculine nominative singular of an adjectival word given in another gender, using `adjective_lemma` in
-- the data, e.g. ''teściowa'' → ''teściowy'', ''tania'' → ''tani'', ''bykowe'' → ''bykowy'', ''wielkie'' →
-- ''wielki''. A plural such as ''Zjednoczone'' works the same way.
local function adjective_lemma(data, word, rule_gender, plural)
local lemma = data.adjective_lemma
for _, ending in ipairs(lemma.endings[plural and "plural" or rule_gender] or {}) do
local stem = mw.ustring.match(word, "^(.+)" .. ending[1] .. "$")
if stem then
return stem .. ((ending.soft or lemma.soft_after[mw.ustring.sub(stem, -1)]) and lemma.soft or lemma.hard)
end
end
return word
end
--[==[
Return the masculine nominative singular that goes with a virile plural, e.g. ''krewni'' → ''krewny'', ''polscy'' →
''polski''. We try each word that the data's `palatal` table could have softened into the plural (before one of the
`virile_endings`) and return the one whose virile nominative plural, as the adjective rules give it, is that plural.
Return {nil} if there's none.
]==]
local function virile_lemma(data, word)
local adjective = {indicators = {}, overrides = {}, data = data}
for final, softened in pairs(data.palatal) do
for _, ending in ipairs(data.virile_endings) do
local stem = mw.ustring.match(word, "^(.+)" .. softened .. ending .. "$")
if stem then
for _, nominative in ipairs(data.adjective_nominatives) do
local lemma = stem .. final .. nominative
local ok, rules = pcall(AdjectiveRules.new, adjective, lemma)
if ok then
for _, form in ipairs(rules:forms("nom_mp_pers")) do
if form.form == word then
return lemma
end
end
end
end
end
end
end
return nil
end
-- Return the forms of an adjective in a lect's paradigm (`lect:skur`): the endings of the paradigm's `adjective` added
-- to the lemma minus its last letter, with the slots shared as for every adjective (`adjective_shared` in the data).
local function paradigm_adjective_forms(data, paradigm, word)
local stem = mw.ustring.sub(word, 1, -2)
local forms = {nom_m = {{form = word}}}
for slot, ending in pairs(paradigm.adjective) do
forms[slot] = {{form = stem .. ending}}
end
for source, targets in pairs(data.adjective_shared) do
for _, target in ipairs(targets) do
forms[target] = forms[source]
end
end
return forms
end
-- Return the forms of an adjectival word (`+`) in a lect's paradigm (`lect:skur`), in noun slots. Its masculine comes from
-- the word as given: the word minus the paradigm's nominative ending for its gender and number, with ''-ï'' after one of
-- the paradigm's `adjective_soft` consonants and ''-y'' otherwise.
local function paradigm_adjectival_forms(base, word, rule_gender, plural)
local data = base.data
local paradigm = data[base.lect_table.rules]
if not paradigm.adjective then
spec_error(("The %s rules have no adjective declension"):format(base.lect_name), base.text)
end
local masculine = word
if plural or rule_gender == "f" or rule_gender == "n" then
local ending = paradigm.adjective[plural and (rule_gender == "m-pr" and "nom_mp_pers" or "nom_p_not_mp_pers")
or "nom_" .. rule_gender]
local stem = mw.ustring.match(word, "^(.+)" .. ending .. "$")
or spec_error(("The adjectival word '%s' doesn't end in -%s"):format(word, ending), base.text)
masculine = stem .. (paradigm.adjective_soft and paradigm.adjective_soft[final_consonant(data, stem)] and "ï" or "y")
end
local adjective = paradigm_adjective_forms(data, paradigm, masculine)
for _, pair in ipairs(data.adjective_accusatives) do
adjective[pair[2]] = adjective[pair[2]] or adjective[pair[1]]
end
local forms = {}
for slot, adjective_slot in pairs(data.adjectival_slots[rule_gender]) do
forms[slot] = adjective[adjective_slot] or {}
end
if rule_gender ~= "m-pr" then
for slot, adjective_slot in pairs(data.adjectival_slots.plural) do
forms[slot] = adjective[adjective_slot] or {}
end
end
forms[plural and "nom_p" or "nom_s"] = {{form = word}}
return forms
end
-- Return the forms of an adjectival word (`+`) in noun slots, using `adjectival_slots` in the data.
local function adjectival_forms(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy or "inan"]
end
local plural = base.number == "pl"
if base.lect_table and base.lect_table.table == "paradigm" then
return paradigm_adjectival_forms(base, word, rule_gender, plural)
end
local lemma = plural and rule_gender == "m-pr" and virile_lemma(data, word) or adjective_lemma(data, word, rule_gender, plural)
local adjective = {lemma = lemma, indicators = {}, overrides = {}, data = data}
local rules = AdjectiveRules.new(adjective, adjective.lemma)
local function forms_of(slot)
if slot == "nom_m" then
return {{form = adjective.lemma}}
end
local source = rules.group.copies[slot]
while source and rules.group.copies[source] do
source = rules.group.copies[source]
end
if source == "nom_m" then
return {{form = adjective.lemma}}
end
return rules:forms(source or slot) or {}
end
local forms = {}
for slot, adjective_slot in pairs(data.adjectival_slots[rule_gender]) do
forms[slot] = forms_of(adjective_slot)
end
if rule_gender ~= "m-pr" then
for slot, adjective_slot in pairs(data.adjectival_slots.plural) do
forms[slot] = forms_of(adjective_slot)
end
end
-- The word as given heads its table.
forms[plural and "nom_p" or "nom_s"] = {{form = word}}
return forms
end
--[==[
Resolve the lect of a `lect:` indicator or a `[lect:CODE:PLACE]` tag through the aliases in the data module of the lects
(`lect_module` in the language's data, which is [[Module:zlw-lch-IPA/data/pl]] for Polish). Return the code and the
name of the lect.
]==]
local function lect_of(data, code, text)
local lects = mw.loadData(data.lect_module)
code = lects.lect_aliases[code] or code
local lect = lects.lects[code]
if not lect then
local codes = {}
for known in pairs(lects.lects) do
table.insert(codes, known)
end
table.sort(codes)
spec_error(("Unrecognized lect '%s'; the lects are %s"):format(code, table.concat(codes, ", ")), text)
end
return code, lect.name
end
-- Return a footnote `[lect:CODE]` or `[lect:CODE:PLACE]` of a word of `base` as it's shown (the name of the lect,
-- formatted as its label is, i.e. linked to the article on the dialect, followed by the place), along with the name of
-- the lect. Return nil if the footnote isn't a lect tag.
local function lect_footnote(base, footnote)
local code, place = mw.ustring.match(footnote, "^%[lect:([^:%]]+):?(.-)%]$")
if not code then
return nil
end
local _, name = lect_of(base.data, code, base.text)
local label = M.labels.get_label_info{label = name, lang = base.lang, nocat = true}.label
return "[" .. label .. (place ~= "" and " (" .. place .. ")" or "") .. "]", name
end
-- Return the link target of a form of an attested lect, i.e. its modern spelling according to `respelling` (e.g.
-- ''ptåka'' → ''ptaka''). Return nil if it's spelled the same.
local function respelled(respelling, form)
local target = mw.ustring.gsub(form, ".", respelling)
return target ~= form and target or nil
end
-- Return a `generate_link` function for `show_forms` for the table of `spec`, which links a respelled form (one with a
-- `target`) to its modern spelling.
local function respelled_link(spec)
return function(data)
if data.form.target then
return M.links.full_link{lang = spec.lang, term = data.form.target, alt = data.form.formval_for_link,
tr = "-"} .. M.inflection_utilities.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
end
-- Return a `transform_accel_obj` function for `show_forms` for the table of `spec`, or nil if the table has no id. A
-- table with an id gives the lemma of its green links the id (`bek<id:defender>`), so that an entry they create is a
-- form of this table's word only.
local function accel_with_id(spec)
if not spec.id then
return nil
end
return function(slot, form, accel_obj)
if accel_obj then
accel_obj.lemma = accel_obj.lemma .. "<id:" .. spec.id .. ">"
end
return accel_obj
end
end
--[==[
Return the forms of an attested table (Middle Polish `lect:mpl`, the `dialectal` table and every Old Polish table),
which are the cells given, exactly as given, and nothing else. In a dialectal table, every form must have a lect,
either from its own `[lect:...]` tag or from a tag given for the whole word.
]==]
local function attested_forms(base)
local forms = {}
local word_lect, word_lect_name
local word_footnotes = {}
for _, note in ipairs(base.footnotes or {}) do
local shown, name = lect_footnote(base, note)
word_lect, word_lect_name = word_lect or shown, word_lect_name or name
table.insert(word_footnotes, shown or note)
end
-- the forms with a lect tag of their own, which the lect tag of the word doesn't go on
local own_lect = {}
local respelling = base.lect_table and base.lect_table.respelling and base.data[base.lect_table.respelling]
for slot, override in pairs(base.overrides) do
if not override.full then
spec_error(("An attested table takes whole forms: '%s:FORM'"):format(slot), base.text)
end
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
local footnotes, lect, lect_name = {}, nil, nil
for _, note in ipairs(value.footnotes or {}) do
local shown, name = lect_footnote(base, note)
lect, lect_name = lect or shown, lect_name or name
table.insert(footnotes, shown or note)
end
if base.indicators.dialectal then
if not lect and not word_lect then
spec_error(("The dialectal form '%s' needs [lect:CODE]"):format(value.form), base.text)
end
end
-- `lect` is the name of the form's lect, which labels the form's definition line (see `form_tag_sets`).
local form = {
form = value.form,
target = respelling and respelled(respelling, value.form) or nil,
footnotes = footnotes[1] and footnotes or nil,
lect = lect_name or word_lect_name,
}
own_lect[form] = lect and true or nil
table.insert(list, form)
end
end
forms[slot] = list
end
if base.footnotes then
base.footnotes, base.word_lect, base.own_lect = word_footnotes, word_lect, own_lect
end
return forms
end
-- Return the entry of a pronoun in the data's `pronouns` along with the ending its forms take. This is the lemma's own
-- entry (with no ending), or the entry of the pronoun it's made from plus one of the `pronoun_suffixes` (e.g.
-- ''cośkolwiek'' is ''co'' plus ''-śkolwiek'').
local function pronoun_entry(data, lemma)
local pronouns = data.pronouns
if pronouns[lemma] then
return pronouns[lemma], ""
end
for _, suffix in ipairs(data.pronoun_suffixes or {}) do
local head = mw.ustring.match(lemma, "^(.+)" .. suffix .. "$")
if head and pronouns[head] then
return pronouns[head], suffix
end
end
return nil
end
-- Return the forms of a pronoun (`<pron>`) with their notes. In an attested table (Old Polish), the forms given in the
-- spec go on top of them.
local function pronoun_forms(base, word)
local data = base.data
local pronoun, suffix = pronoun_entry(data, word)
if not pronoun then
local lemmas = {}
for lemma in pairs(data.pronouns) do
table.insert(lemmas, lemma)
end
table.sort(lemmas)
local message = ("No pronoun '%s'; the pronouns are %s"):format(word, table.concat(lemmas, ", "))
if data.pronoun_suffixes then
local suffixes = {}
for _, item in ipairs(data.pronoun_suffixes) do
table.insert(suffixes, "-" .. item)
end
message = message .. ", and these with " .. table.concat(suffixes, ", ")
end
spec_error(message, base.text)
end
base.pronoun = pronoun
local forms = {}
for slot, list in pairs(pronoun) do
if slot ~= "numbers" and slot ~= "numberless" then
forms[slot] = {}
for _, item in ipairs(list) do
local form = {form = (type(item) == "table" and item[1] or item) .. suffix}
if type(item) == "table" then
form.footnotes = {}
for _, note in ipairs(item.notes) do
table.insert(form.footnotes, "[" .. data.notes[note] .. "]")
end
end
table.insert(forms[slot], form)
end
end
end
if base.attested then
for slot, list in pairs(attested_forms(base)) do
forms[slot] = list
end
end
return forms
end
-- Return the rule of a numeral in `rules` (`numeral_rules` or `collective_rules` in the data), i.e. the rule of the
-- longest key that the lemma ends in, along with the lemma minus that key.
local function numeral_rule(rules, word, text)
for length = mw.ustring.len(word), 0, -1 do
local key = length == 0 and "" or mw.ustring.sub(word, -length)
if rules[key] then
return rules[key], mw.ustring.sub(word, 1, mw.ustring.len(word) - length)
end
end
spec_error(("No numeral declines like '%s'"):format(word), text)
end
-- Return the forms of a numeral (`<num>`), i.e. the endings of its rule added to its stem.
local function numeral_forms(rules, base, word)
local rule, stem = numeral_rule(rules, word, base.text)
local forms = {}
for slot, cell in pairs(rule) do
forms[slot] = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(forms[slot], {form = stem .. ending[1],
footnotes = ending.note and {"[" .. base.data.notes[ending.note] .. "]"} or nil})
end
end
return forms
end
--[==[
Add the footnotes given for the whole word (`base.footnotes`) after the footnotes of every form, as new form objects,
since a copied slot shares the form objects of its source. In an attested table the word's lect tag
(`base.word_lect`) only goes on the forms without a lect tag of their own (`base.own_lect`). Return the forms.
]==]
local function add_word_footnotes(base, forms)
if not base.footnotes then
return forms
end
for slot, list in pairs(forms) do
local copy = {}
for _, form in ipairs(list) do
local footnotes = {}
for _, note in ipairs(form.footnotes or {}) do
table.insert(footnotes, note)
end
for _, note in ipairs(base.footnotes) do
if not (note == base.word_lect and base.own_lect[form]) then
table.insert(footnotes, note)
end
end
table.insert(copy, {form = form.form, footnotes = footnotes, target = form.target})
end
forms[slot] = copy
end
return forms
end
--[==[
Decline a single word. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]]. First the
rules fill every slot they cover. Then the overrides apply (an ending goes on the stem that the slot's rule uses, and a
form replaces the cell), followed by the copies (unless a copy is overridden itself), the deprecative forms of a
masculine personal noun (after its nominative plural, with a footnote) and finally the footnote for the whole word.
]==]
local function decline_word(base)
local word = base.indicators.decllemma or base.indicators.r or base.lemma
local forms, rules
if base.attested then
base.forms = add_word_footnotes(base, base.indicators.pron and pronoun_forms(base, word) or attested_forms(base))
return
elseif base.indicators.pron then
forms = pronoun_forms(base, word)
elseif base.indicators.num then
forms = numeral_forms(base.data.collective_rules, base, word)
elseif base.indicators.irreg or base.indicators.indecl then
forms = lexicon_forms(base, word)
elseif base.indicators["!"] then
-- A manual table has only the forms its overrides give.
forms = {}
elseif base.indicators["+"] then
forms = adjectival_forms(base, word)
else
rules = base.lect_table and base.lect_table.table == "paradigm"
and ParadigmRules.new(base, word, base.data[base.lect_table.rules], base.lect_name) or NounRules.new(base, word)
-- The lemma heads the table, even when another word is declined in its place (`decllemma`).
forms = {[rules.head_slot] = {{form = base.lemma}}}
-- The rules give the singular and the plural; only an attested table has the dual.
for _, entry in ipairs(M.data.noun_slots) do
local slot = entry.slot
if entry.number ~= "d" and slot ~= rules.head_slot and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
-- A form that is the declined word itself (e.g. an inanimate accusative) belongs to the lemma.
for _, form in ipairs(forms[slot] or {}) do
if form.form == word then
form.form = base.lemma
end
end
end
end
-- In a phrase the deprecative forms would agree with nothing (''pany młodzi''), so only a single word shows
-- them.
if not base.in_phrase then
forms.depr_p = rules:forms("depr_p")
end
end
for slot, override in pairs(base.overrides) do
local list = {}
local rule_forms = forms[slot] or {}
for _, value in ipairs(override.values) do
if value.default then
for _, form in ipairs(rules and rules:forms(slot) or {}) do
table.insert(list, form)
end
elseif override.full then
if value.form ~= "" then
local shown = {form = value.form, footnotes = value.footnotes}
-- A whole form that the rules also give keeps their alternations for the categories (''ojca'' on
-- ''ojciec'').
for _, rule_form in ipairs(rule_forms) do
if rule_form.form == value.form and rules and rules.labels then
rules.labels[shown] = rules.labels[rule_form]
end
end
table.insert(list, shown)
end
else
local form = rules and rules:form(rules:overrideLabel(slot, value.form), value.form) or {form = word .. value.form}
form.footnotes = value.footnotes
table.insert(list, form)
end
end
forms[slot] = list
end
if rules then
-- A copy can copy another copy (e.g. the vocative of a feminine consonant-stem noun is its locative, which is
-- its dative). Fill each one from the slot at the end of its chain, unless a slot along the way is overridden.
local copies = rules.group.copies
for slot in pairs(copies) do
if not base.overrides[slot] then
local source = copies[slot]
while copies[source] and not base.overrides[source] do
source = copies[source]
end
local list = {}
for _, form in ipairs(forms[source] or {}) do
table.insert(list, form)
end
forms[slot] = list
end
end
end
if forms.depr_p then
forms.nom_p = forms.nom_p or {}
-- A deprecative form that's the same as a virile form (e.g. ''zaklinacze'') isn't a separate form, so don't
-- show it twice.
local virile = {}
for _, form in ipairs(forms.nom_p) do
virile[form.form] = true
end
for _, form in ipairs(forms.depr_p) do
if not virile[form.form] then
local shown = {form = form.form, footnotes = form.footnotes or {"[" .. base.data.notes.deprecative .. "]"}}
if rules and rules.labels then
rules.labels[shown] = rules.labels[form]
end
table.insert(forms.nom_p, shown)
end
end
forms.depr_p = nil
end
if rules and rules.labels then
-- Collect the alternations of the forms the table shows, for its categories. A rule's form that an override
-- replaced doesn't count, and neither does a form of a number the table doesn't show.
rules.used = {}
for slot, list in pairs(forms) do
if not base.number or mw.ustring.sub(slot, -1) == mw.ustring.sub(base.number, 1, 1) then
for _, form in ipairs(list) do
for part in mw.text.gsplit(rules.labels[form] or "plain", "+", true) do
rules.used[part] = true
end
end
end
end
end
base.forms = add_word_footnotes(base, forms)
-- Keep the rules the forms came from, and the alternations they used, for the categories.
base.rules = rules
end
-- Join an adjective stem and an ending. If the data's `adjective_dropped` says the last letter of the stem drops before
-- the first letter of the ending, drop it (e.g. ''moj-'' + ''-ich'' → ''moich'').
local function adjective_form(data, stem, ending)
local before = data.adjective_dropped[mw.ustring.sub(stem, -1)]
if before and mw.ustring.sub(ending, 1, mw.ustring.len(before)) == before then
return mw.ustring.sub(stem, 1, -2) .. ending
end
return stem .. ending
end
-- Return the forms of an irregular adjective from `irregular_adjectives`, along with the layout of the table it needs
-- (nil, `dwa` or `plonly`).
local function irregular_adjective_forms(base, word)
local data = base.data
for _, entry in ipairs(data.irregular_adjectives) do
local captured = mw.ustring.match(word, entry.pattern)
if captured or entry.stem and mw.ustring.find(word, entry.pattern) then
local forms = {}
local function add(slot, stem, endings, note)
if type(endings) == "string" then
endings = {endings}
end
for _, ending in ipairs(endings or {}) do
forms[slot] = forms[slot] or {}
local form = ending == "-" and base.lemma or adjective_form(data, stem, ending)
table.insert(forms[slot], {form = form, footnotes = note and {"[" .. note .. "]"} or nil})
end
end
if entry.table ~= "dwa" then
add("nom_m", nil, "-")
end
for _, set in ipairs(entry.sets) do
local stem = (entry.stem or captured) .. (set.add or "")
for slot, endings in pairs(set.endings or {}) do
add(slot, stem, endings, set.note)
for _, target in ipairs(data.adjective_shared[slot] or {}) do
add(target, stem, endings, set.note)
end
end
for slot, endings in pairs(set.own or {}) do
add(slot, stem, endings, set.note)
end
if set.archaic_dative and base.indicators.archdat then
add("dat_mn", stem, set.archaic_dative, data.notes[data.archaic_dative.note])
end
end
return forms, entry.table
end
end
error(("Unrecognized irregular adjective '%s'"):format(word), 0)
end
--[==[
Decline a single adjective. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]] for
{{tl|pl-adecl}}. The rules (or the lexicon of irregular adjectives) fill the slots; then the overrides apply, followed
by the accusatives taken from other slots (unless overridden) and the footnote for the whole word. An attested table
has the cells given and nothing else.
]==]
local function decline_adjective_word(base)
local data = base.data
local word = base.indicators.decllemma or base.lemma
local forms, layout
if base.attested then
-- The cells given and nothing else, with the dual columns if `du` is given.
forms, layout = attested_forms(base), base.indicators.du and "dual" or nil
elseif base.indicators.irreg then
forms, layout = irregular_adjective_forms(base, word)
elseif base.indicators.lect then
local paradigm = data[data.lect_tables[base.indicators.lect].rules]
if not paradigm.adjective then
spec_error(("The %s rules have no adjective declension"):format(base.lect_name), base.text)
end
forms = paradigm_adjective_forms(data, paradigm, word)
-- With `decllemma`, the lemma itself heads the table (''båbcyn'' declined as ''båbcyny'').
forms.nom_m = {{form = base.lemma}}
elseif base.indicators.num then
forms, layout = numeral_forms(data.numeral_rules, base, word), "plonly"
else
local rules = AdjectiveRules.new(base, word)
-- With `decllemma`, the lemma itself still heads the table (''wart'' declined as ''warty'').
forms = {nom_m = {{form = base.lemma}}}
for _, slot in ipairs(data.adjective_slots) do
if slot ~= "nom_m" and slot ~= "short" and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
end
end
if base.indicators.archdat then
local archaic = data.archaic_dative
table.insert(forms.dat_mn, {form = rules.stem .. archaic[1], footnotes = {"[" .. data.notes[archaic.note] .. "]"}})
end
-- Keep the slots that every adjective shares as copies, so that an override of the source carries over.
for slot, source in pairs(rules.group.copies) do
local accusative = mw.ustring.find(slot, "^acc")
if not accusative and not base.overrides[slot] then
forms[slot] = forms[source]
end
end
end
if not base.attested then
for slot, override in pairs(base.overrides) do
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
table.insert(list, {form = value.form, footnotes = value.footnotes})
end
end
forms[slot] = list
end
for _, pair in ipairs(data.adjective_accusatives) do
local source, target = pair[1], pair[2]
if not base.overrides[target] and forms[source] and not (base.indicators.irreg and forms[target]) then
forms[target] = forms[source]
end
end
end
base.forms = add_word_footnotes(base, forms)
base.layout = layout
end
-- Return the attested tables there are for `template` (`noun` or `adjective`), for the error messages: those of the
-- language's attested lects and its dialectal table, plus the templates of the languages whose tables of that kind are
-- all attested.
local function attested_tables(data, template)
local tables = {}
local codes = {}
for code, lect_table in pairs(data.lect_tables or {}) do
if lect_table.table == "attested" then
table.insert(codes, code)
end
end
table.sort(codes)
for _, code in ipairs(codes) do
table.insert(tables, "<lect:" .. code .. ">")
end
if data.indicators[template].dialectal then
table.insert(tables, "<dialectal>")
end
local languages = {}
for code, language in pairs(M.data.languages) do
if language[template] then
table.insert(languages, code)
end
end
table.sort(languages)
for _, code in ipairs(languages) do
if mw.loadData("Module:zlw-lch-decl/data/" .. code).attested then
table.insert(tables, "{{" .. M.data.languages[code][template] .. "}}")
end
end
return table.concat(tables, ", ")
end
-- Work out the table a base is for: its lect (`lect:CODE`), and whether the table is attested, i.e. has only the cells
-- given (for an attested lect, the dialectal table, or a language whose tables are all attested). Throw an error if
-- `recon` or `du` is given for a table that isn't attested, `soft` for a table without its lect's own rules, if a lect
-- tag appears outside the dialectal table, or if a dual slot is given without `du`.
local function resolve_table(base)
local data = base.data
if base.indicators.lect then
base.indicators.lect, base.lect_name = lect_of(data, base.indicators.lect, base.text)
base.lect_table = data.lect_tables[base.indicators.lect]
if not base.lect_table then
local codes = {}
for code in pairs(data.lect_tables) do
table.insert(codes, code)
end
table.sort(codes)
spec_error(("The lect '%s' has no table of its own (the lects with one are %s); give its forms in a "
.. "<dialectal> table"):format(base.indicators.lect, table.concat(codes, ", ")), base.text)
end
end
base.attested = data.attested or base.indicators.dialectal
or base.lect_table and base.lect_table.table == "attested" or nil
for _, name in ipairs({"recon", "du"}) do
if base.indicators[name] and not base.attested then
spec_error(("Only an attested table (%s) takes '%s'"):format(attested_tables(data, base.template), name),
base.text)
end
end
if base.indicators.soft and not (base.lect_table and base.lect_table.table == "paradigm") then
local codes = {}
for code, lect_table in pairs(data.lect_tables) do
if lect_table.table == "paradigm" then
table.insert(codes, "<lect:" .. code .. ">")
end
end
table.sort(codes)
spec_error(("Only a lect with rules of its own (%s) takes 'soft'"):format(table.concat(codes, ", ")), base.text)
end
-- A form of a lect can only be tagged in the dialectal table, so that none ends up among the standard forms.
if not base.indicators.dialectal then
local function check(footnotes)
for _, footnote in ipairs(footnotes or {}) do
if mw.ustring.find(footnote, "^%[lect:") then
spec_error(("A lect's form (%s) belongs in a <dialectal> table"):format(footnote), base.text)
end
end
end
check(base.footnotes)
for _, override in pairs(base.overrides) do
for _, value in ipairs(override.values) do
check(value.footnotes)
end
end
end
if not base.indicators.du then
for slot in pairs(base.overrides) do
if mw.ustring.find(slot, "_d$") then
spec_error(("The dual slot '%s' needs the indicator 'du'"):format(slot), base.text)
end
end
end
end
-- Set the fields of a base that the rules use, based on its indicators.
local function normalize_base(base)
base.gender = base:group("gender")
base.animacy = base:group("animacy")
base.number = base:group("number")
base.kind = base:group("kind")
if base.indicators["*"] then
base.reducible = true
elseif base.indicators["-*"] then
base.reducible = false
end
base.quantity = base.indicators["#"] and "full" or base.indicators["-#"] and "none" or nil
if base.gender == "m" and not base.animacy then
base.animacy = "inan"
end
resolve_table(base)
-- `r:` gives the rules the word as it's read, so it needs a noun that the rules decline.
if base.indicators.r and (base:group("type") or base.attested or base.lect_table) then
spec_error("The indicator 'r' needs a noun that the rules decline", base.text)
end
end
------------------------------------------------------------------------------------------------------------------------
-- Output --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object to render the declined words as a table with [[Module:inflection-table]], with a column for each number shown and
a row for each case. Each row has a `data-case` attribute so that scripts can reorder the cases. The cells come from
`show_forms` in [[Module:inflection utilities]], linked with accelerators for the lemma, and the footnotes go under the
table.
]==]
local TableRenderer = {}
TableRenderer.__index = TableRenderer
function TableRenderer.new(spec)
return setmetatable({spec = spec}, TableRenderer)
end
function TableRenderer:numbers()
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.spec.numbers[number.code] then
table.insert(numbers, number)
end
end
return numbers
end
-- Return the title of a table: `title=` if given, otherwise what the table is (e.g. "Declension of " or "Attested
-- Middle Polish forms of ") followed by its head, unlinked. `suffix` follows the default title (`default_kind` and the
-- lemma), e.g. the declension kinds of an adjective.
function TableRenderer:title(default_kind, suffix)
local spec = self.spec
if spec.title then
return spec.title
end
local kind, head = default_kind, spec.forms.lemma
if spec.kind_title then
kind, head, suffix = spec.kind_title[1], spec.kind_title[2] or head, nil
end
return kind .. M.links.full_link({lang = spec.lang, alt = head}, "term") .. (suffix or "")
end
-- Return the first lines of a table titled `title`: the frame from [[Module:inflection-table]], with its first row
-- opened.
function TableRenderer:top(title)
return {M.inflection_table.make_top{
title = title,
palette = "blue",
tall = "yes",
lang = self.spec.lang:getCode(),
}}
end
-- Close the table in `lines` with its footnotes and categories, and return its wikitext.
function TableRenderer:finish(lines)
local spec = self.spec
table.insert(lines, M.inflection_table.make_bottom{notes = spec.forms.footnote or ""})
if spec.categories[1] and not spec.nocat then
table.insert(lines, M.utilities.format_categories(spec.categories, spec.lang))
end
return table.concat(lines, "\n")
end
function TableRenderer:render()
local spec = self.spec
local numbers = self:numbers()
local slot_list = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(numbers) do
-- A table with one number doesn't name it in its accelerators, and an attested or lect table has none
-- ("-").
local accel = (spec.attested or spec.lect) and "-" or #numbers > 1 and case.accel .. "|" .. number.accel or case.accel
table.insert(slot_list, {case.code .. "_" .. number.code, accel})
end
end
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
-- A Middle Polish form links to its modern spelling.
generate_link = respelled_link(spec),
transform_accel_obj = accel_with_id(spec),
})
local lines = self:top(self:title("Biến cách của "))
-- make_top has already opened the first row.
table.insert(lines, '! class="outer" |')
for _, number in ipairs(numbers) do
-- A numberless pronoun (e.g. ''siebie'') has an empty header over its one column.
table.insert(lines, '! class="outer" | ' .. (spec.numberless and "" or number.name))
end
for _, case in ipairs(M.data.cases) do
table.insert(lines, ('|- data-case="%s"'):format(case.code))
table.insert(lines, ('! title="%s" | %s'):format(spec.data.case_titles[case.code], case.name))
for _, number in ipairs(numbers) do
local cell = spec.forms[case.code .. "_" .. number.code]
table.insert(lines, "| " .. (cell or "—"))
end
end
return self:finish(lines)
end
--[==[
The rows of an adjective table, by layout. Each row is a case and its cells, and each cell is a slot and the number of
columns it spans. The regular table has the masculine animate, masculine inanimate, feminine and neuter singular, then
the virile and non-virile plural, as in the former [[Module:pl-adjective]]. The dual table (an attested table with `du`)
puts the dual, masculine and feminine/neuter, between them.
]==]
local ADJECTIVE_LAYOUTS = {
regular = {
columns = {
{"số ít", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_p", 2}}},
{"acc", "đối cách", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_mp_pers"},
{"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_p", 2}}},
},
},
plonly = {
columns = {
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_p", 2}}},
{"acc", "đối cách", {{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_p", 2}}},
},
},
-- an attested table with the dual (`du`), between the singular and the plural
dual = {
columns = {
{"số ít", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
{"số đôi", 2, {"giống đực", "giống cái/<wbr />giống trung"}},
{"số nhiều", 2, {"virile (= giống đực nhân xưng)", "non-virile"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_m_d"}, {"nom_fn_d"},
{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "sinh cách", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_d", 2}, {"gen_p", 2}}},
{"dat", "dữ cách", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_d", 2}, {"dat_p", 2}}},
{"acc", "đối cách", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_m_d"}, {"acc_fn_d"},
{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "cách công cụ", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_d", 2}, {"ins_p", 2}}},
{"loc", "định vị cách", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_d", 2}, {"loc_p", 2}}},
},
},
dwa = {
columns = {
{"plural", 4, {"giống đực hữu sinh", "giống đực vô sinh", "giống cái", "giống trung"}},
},
rows = {
{"nom", "danh cách/<wbr />hô cách", {{"nom_mp_pers"}, {"nom_mp_npers"}, {"nom_fp"}, {"nom_np"}}},
{"gen", "sinh cách", {{"gen_p", 4}}},
{"dat", "dữ cách", {{"dat_p", 4}}},
{"acc", "đối cách", {{"acc_mp_pers"}, {"acc_mp_npers"}, {"acc_fp"}, {"acc_np"}}},
{"ins", "cách công cụ", {{"ins_mnp", 2}, {"ins_fp"}, {"ins_mnp"}}},
{"loc", "định vị cách", {{"loc_p", 4}}},
},
},
}
function TableRenderer:renderAdjective()
local spec = self.spec
local layout = ADJECTIVE_LAYOUTS[spec.layout]
local slot_list = {}
for slot, accel in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, (spec.lect or spec.attested) and "-" or accel})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
generate_link = respelled_link(spec),
transform_accel_obj = accel_with_id(spec),
})
local lines = self:top(self:title("Biến cách của ",
spec.kinds[1] and " (" .. table.concat(spec.kinds, " // ") .. ")" or nil))
-- make_top has already opened the first row. Add the number headers, then the gender headers.
table.insert(lines, '! class="outer" rowspan="2" |')
for _, column in ipairs(layout.columns) do
table.insert(lines, ('! class="outer" colspan="%d" | %s'):format(column[2], column[1]))
end
table.insert(lines, "|- class=\"secondary\"")
for _, column in ipairs(layout.columns) do
for _, header in ipairs(column[3]) do
table.insert(lines, "! " .. header)
end
end
for _, row in ipairs(layout.rows) do
table.insert(lines, ('|- data-case="%s"'):format(row[1]))
table.insert(lines, "! " .. row[2])
for _, cell in ipairs(row[3]) do
local span = cell[2] and ('colspan="%d" | '):format(cell[2]) or ""
table.insert(lines, "| " .. span .. (spec.forms[cell[1]] or "—"))
end
end
if spec.forms.short and spec.forms.short ~= "—" then
table.insert(lines, '|- data-case="short"')
table.insert(lines, "! dạng ngắn")
table.insert(lines, '| colspan="2" | ' .. spec.forms.short)
end
return self:finish(lines)
end
------------------------------------------------------------------------------------------------------------------------
-- The call --
------------------------------------------------------------------------------------------------------------------------
--[==[
Decline a noun call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl` or `zlw-opl`). Return the
alternant multiword spec from [[Module:inflection utilities]], with the fields `forms` (a table mapping each slot to a
list of form objects), `numbers` (a set of `s`, `d` and `p`), `categories`, `title` and `nocat`.
]==]
function export.decline_noun(args, pagename, lang_code)
local data, lang = language_of(lang_code, "noun")
-- The angle brackets are omittable, so a bare word would be read as an indicator; with no spec, decline the page
-- name with no indicators.
local spec_text = args[1] or ""
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
local base = Spec.parse(angle_bracket_spec, "noun", data, lang)
normalize_base(base)
return base
end,
allow_blank_lemma = true,
angle_brackets_omittable = true,
}
local spec = M.inflection_utilities.parse_inflected_text(spec_text, parse_props)
local number, noun
local word_count = 0
M.inflection_utilities.map_word_specs(spec, function()
word_count = word_count + 1
end)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
-- An irregular noun has the gender and animacy of its lexicon entry. They're used if the spec gives none, and
-- giving others is an error.
local irregular = base.indicators.irreg and data.irregular_nouns[base.indicators.decllemma or base.lemma]
if irregular then
if base.gender and (base.gender ~= irregular.gender or base.animacy ~= irregular.animacy) then
spec_error(("The irregular noun '%s' is <%s>"):format(base.lemma,
irregular.gender .. (irregular.animacy and "." .. irregular.animacy or "")), base.text)
end
base.gender, base.animacy = irregular.gender, irregular.animacy
end
base.in_phrase = word_count > 1 and #spec.alternant_or_word_specs > 1 or nil
number = number or base.number
if not base.indicators["+"] and base.gender then
noun = noun or base
end
end)
-- An adjectival word (`+`) agrees with the noun of the phrase, taking whatever gender, animacy and number it
-- doesn't give itself.
M.inflection_utilities.map_word_specs(spec, function(base)
if base.indicators["+"] and noun then
base.gender = base.gender or noun.gender
if base.gender == noun.gender then
base.animacy = base.animacy or noun.animacy
end
base.number = base.number or noun.number
end
if base.indicators["+"] and not base.gender then
error(("The adjectival word '%s' needs a gender, or a noun in the phrase"):format(base.lemma), 0)
end
end)
local slot_list = {}
for _, entry in ipairs(M.data.noun_slots) do
table.insert(slot_list, {entry.slot, entry.slot})
end
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_word,
})
local first
M.inflection_utilities.map_word_specs(spec, function(base)
first = first or base
end)
spec.lang = lang
spec.data = data
spec.numbers = number == "sg" and {s = true} or number == "pl" and {p = true} or {s = true, p = true}
if first.indicators.du then
spec.numbers.d = true
end
-- A collective numeral has only the plural.
if first.indicators.num then
spec.numbers = {p = true}
end
if first.pronoun then
spec.numbers = {}
for _, number_code in ipairs(first.pronoun.numbers) do
spec.numbers[number_code] = true
end
spec.numberless = first.pronoun.numberless
end
spec.categories = {}
-- Only a table of the standard language is categorized; for the lects, the labels of the entry do that.
if not first.attested and not first.indicators.lect then
local function add(name, ...)
table.insert(spec.categories, data.categories[name]:format(...) .. " " .. lang:getCanonicalName())
end
if number == "sg" then
add("singularia_tantum")
elseif number == "pl" then
add("pluralia_tantum")
end
if word_count == 1 then
local indicators = first.indicators
if indicators.irreg then
add("irregular")
elseif indicators.indecl then
add("indeclinable")
elseif indicators["+"] then
add("adjectival")
elseif first.rules and first.rules.used then
local final = final_consonant(data, first.rules.stem)
local stem_type = data.stem_types.velar[final] and "âm vòm" or data.stem_types.soft[final] and "mềm"
or "cứng"
local gender = data.category_genders[first.gender]
if type(gender) == "table" then
gender = gender[first.animacy]
end
-- A plurale tantum has no gender to tell apart, except for a personal one.
if gender and (number ~= "pl" or first.animacy == "pr") then
add("stem", stem_type, gender)
end
local reducible = false
for part in pairs(first.rules.used) do
reducible = reducible or is_mobile(part)
end
if reducible then
add("reducible")
end
local used = first.rules.used
if used.shortened or used.lengthened then
add("quantitative")
end
end
end
end
-- An attested table says what it attests in its title. Its head is the nominative given, or the reconstructed one
-- starred.
spec.attested = first.attested
local head
if first.attested then
local nominative = spec.forms[number == "pl" and "nom_p" or "nom_s"]
head = first.indicators.recon and "*" .. first.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil
end
spec.lect = first.indicators.lect
if first.indicators.lect then
-- A paradigm's table is headed by the lemma, and an attested one by its nominative.
spec.kind_title = {data.lect_titles[first.indicators.lect], first.attested and head or nil}
elseif first.indicators.dialectal then
spec.kind_title = {data.lect_titles.dialectal, head}
elseif data.attested then
spec.kind_title = {"Biến cách của ", head}
end
spec.title = args.title
spec.id = args.id
spec.nocat = args.nocat
spec.lemmas = {pagename}
return spec
end
-- Return the kind of declension of an adjective, for its title and category: `irregular`, or the kind of the first
-- entry in the data's `adjective_kinds` that its lemma matches (hard ''-y'', velar ''-ki'' and ''-gi'', or soft).
local function adjective_kind(base)
if base.indicators.irreg then
return "irregular"
end
local word = base.indicators.decllemma or base.lemma
for _, kind in ipairs(base.data.adjective_kinds) do
if mw.ustring.find(word, kind[1]) then
return kind[2]
end
end
end
--[==[
Decline an adjective call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl`). Return the alternant
multiword spec from [[Module:inflection utilities]], with the fields `forms`, `layout` (`regular`, `plonly`, `dwa` or
`dual`), `kinds` (the declension kinds of its words), `pos` (the part of speech of the table, from `pos:` on one of its
words), `categories`, `title` and `nocat`.
]==]
function export.decline_adjective(args, pagename, lang_code)
local data, lang = language_of(lang_code, "adjective")
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
return Spec.parse(angle_bracket_spec, "adjective", data, lang)
end,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local spec = M.inflection_utilities.parse_inflected_text(args[1] or pagename, parse_props)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
base.lemma = M.links.remove_links(base.lemma)
-- The part of speech belongs to the whole table, so only one word may give it.
local pos = base.indicators.pos
if pos then
if not data.parts_of_speech[pos] then
local names = {}
for name in pairs(data.parts_of_speech) do
table.insert(names, name)
end
table.sort(names)
spec_error(("Unrecognized part of speech '%s'; the parts of speech are %s"):format(pos,
table.concat(names, ", ")), base.text)
elseif spec.pos then
spec_error("The part of speech ('pos:') is given on more than one word", base.text)
end
spec.pos = pos
end
resolve_table(base)
end)
local slot_list = {}
for slot in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, slot})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_adjective_word,
})
spec.pos = spec.pos or "adjective"
local plural_pos = ucfirst(data.parts_of_speech[spec.pos])
spec.layout, spec.kinds, spec.categories = "regular", {}, {}
local seen = {}
M.inflection_utilities.map_word_specs(spec, function(base)
-- A lect's table names its lect and isn't categorized, and neither is a numeral's. An attested table is headed
-- by the masculine nominative given, or the reconstructed lemma starred.
if base.attested then
local nominative = spec.forms.nom_m
spec.attested = true
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect or "dialectal"], base.indicators.recon and "*" .. base.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil}
spec.layout = base.layout or base.indicators.plonly and "plonly" or spec.layout
return
elseif base.indicators.lect then
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect]}
return
elseif base.indicators.num then
spec.layout = base.layout
return
end
local function add(name, ...)
table.insert(spec.categories, data.categories[name]:format(...) .. " " .. lang:getCanonicalName())
end
local kind = adjective_kind(base)
if not seen[kind] then
seen[kind] = true
table.insert(spec.kinds, kind)
add("adjective_kind", plural_pos, kind)
end
if base.overrides.short then
add("short_forms", plural_pos)
end
if base.indicators.decllemma then
add("irregular_stem", plural_pos)
end
if base.layout or base.indicators.plonly then
spec.layout = base.layout or "plonly"
end
end)
spec.title = args.title
spec.id = args.id
spec.nocat = args.nocat
spec.lang = lang
spec.lemmas = {pagename}
return spec
end
-- For each part of speech of a form template such as {{tl|pl-head}}, the entry points whose tables give its forms.
local FORM_ENTRIES = {
["noun forms"] = {"danh từ"},
["proper noun forms"] = {"danh từ"},
["adjective forms"] = {"tính từ"},
["participle forms"] = {"tính từ"},
["pronoun forms"] = {"danh từ", "tính từ"},
["numeral forms"] = {"danh từ", "tính từ"},
}
-- Return the templates whose tables give the forms of the part of speech `pos` (e.g. `noun forms`) in the language
-- `lang_code`, each with its entry point (`noun` or `adjective`).
local function form_templates(pos, lang_code)
local entries = FORM_ENTRIES[pos] or error(("Unrecognized part of speech '%s'"):format(pos), 0)
local entry_templates = M.data.languages[lang_code] or error(("Unrecognized language '%s'"):format(lang_code), 0)
local templates = {}
for _, entry in ipairs(entries) do
local template = entry_templates[entry]
if template then
templates[template] = entry
end
end
return templates
end
--[==[
Return the tag sets of `pagename` as a form of `lemma` in the language `lang_code`, from the declension calls on the
lemma's page. `calls` is a list of `{template = NAME, args = ARGS}`, and `pos` is the part of speech of the form (e.g.
`noun forms`), which determines the templates to read: those of its entry points in `FORM_ENTRIES`, as named in
`languages` in [[Module:zlw-lch-decl/data]]. `slots` and `noslots`, if given, are sets of slot names to keep or leave
out. A call that doesn't decline is skipped.
Each form object in a slot that the table shows and whose form is `pagename` gives one tag set
`{tags = {...}, labels = {...}}`, in the order of the table. For a noun, the tags are the case and number of the slot;
for an adjective, the tags of the slot in `ADJECTIVE_ACCEL`, and a nominative slot gives a vocative tag set as well,
after all the others, since the table shows the two cases as one row. The labels are the lect of the table or of the
form, followed by the form's usage notes (`notes` in the language's data module). So a form that is plain in one slot
and labelled in another gives tag sets with different labels. If a call has `t=`, its tag sets carry it as `gloss`.
]==]
function export.form_tag_sets(pagename, lemma, calls, pos, lang_code, slots, noslots)
local templates = form_templates(pos, lang_code)
local language = mw.loadData("Module:zlw-lch-decl/data/" .. lang_code)
local usage_notes = {}
for _, note in pairs(language.notes or {}) do
usage_notes["[" .. note .. "]"] = note
end
local tag_sets = {}
local function add(slot, form, tags, table_lect, gloss)
if form.form ~= pagename or slots and not slots[slot] or noslots and noslots[slot] then
return
end
local labels = {}
if table_lect then
table.insert(labels, table_lect)
end
if form.lect and form.lect ~= table_lect then
table.insert(labels, form.lect)
end
for _, footnote in ipairs(form.footnotes or {}) do
if usage_notes[footnote] then
table.insert(labels, usage_notes[footnote])
end
end
table.insert(tag_sets, {tags = tags, labels = labels, gloss = gloss})
end
for _, call in ipairs(calls) do
local entry = templates[call.template]
local ok, spec = false, nil
if entry == "noun" then
ok, spec = pcall(export.decline_noun, call.args, lemma, lang_code)
elseif entry == "adjective" then
ok, spec = pcall(export.decline_adjective, call.args, lemma, lang_code)
end
if ok then
local gloss = call.args.t and mw.text.trim(call.args.t) ~= "" and mw.text.trim(call.args.t) or nil
local table_lect
M.inflection_utilities.map_word_specs(spec, function(base)
table_lect = table_lect or base.lect_name
end)
if entry == "noun" then
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
-- Only the numbers that the table shows: a singulare tantum still has plural forms, which it
-- doesn't show.
local slot = case.code .. "_" .. number.code
for _, form in ipairs(spec.numbers[number.code] and spec.forms[slot] or {}) do
add(slot, form, {case.accel, number.accel}, table_lect, gloss)
end
end
end
else
-- Only the slots that the table's layout shows.
local shown, seen = {}, {}
for _, row in ipairs(ADJECTIVE_LAYOUTS[spec.layout].rows) do
for _, cell in ipairs(row[3]) do
if not seen[cell[1]] then
seen[cell[1]] = true
table.insert(shown, cell[1])
end
end
end
table.insert(shown, "short")
local vocatives = {}
for _, slot in ipairs(shown) do
for _, form in ipairs(spec.forms[slot] or {}) do
local tags = mw.text.split(ADJECTIVE_ACCEL[slot], "|", true)
add(slot, form, tags, table_lect, gloss)
for i, tag in ipairs(tags) do
if tag == "nom" then
local vocative = mw.clone(tags)
vocative[i] = "voc"
table.insert(vocatives, {slot, form, vocative})
end
end
end
end
for _, vocative in ipairs(vocatives) do
add(vocative[1], vocative[2], vocative[3], table_lect, gloss)
end
end
end
end
return tag_sets
end
-- Return the section of the wikitext `text` for the language named `name` (its level-two heading), or {nil} if there
-- is none.
local function language_section(text, name)
local lines, inside = {}, false
for line in mw.text.gsplit(text, "\n", true) do
if mw.ustring.find(line, "^==[^=].*[^=]==%s*$") then
inside = mw.ustring.match(line, "^==%s*(.-)%s*==%s*$") == name
elseif inside then
table.insert(lines, line)
end
end
return lines[1] and table.concat(lines, "\n") or nil
end
--[==[
Return the definition lines of the page `pagename` as a form of each lemma in `lemmas` (each `{term = LEMMA, id = ID}`),
for the form template of the language `lang` (a code), e.g. {{tl|pl-head}}. For each lemma, the tag sets come from the
declension calls in the language's section of the lemma's page (see `form_tag_sets`, for the part of speech `pos`). If
the lemma has an id, only the calls with that `id=` count. The tag
sets are grouped by the gloss of their call (its `t=`), then by their labels, the unlabelled group first. Each group's
tag sets are combined into multipart tags by [[Module:accel]] and written as one line by [[Module:form of]], with the
labels in front and the gloss after the lemma. The lines are joined by `"\n# "`. `slots` and `noslots` are
comma-separated slot names to keep or leave out. `gloss`, if given, is used on every line instead of the tables'
glosses. Throw an error if `pagename` is not a form of any of the lemmas, or if no table of a lemma has its id.
]==]
function export.form_definition(args)
local lang = M.languages.getByCode(args.lang)
local function slot_set(list)
return list and M.table.listToSet(mw.text.split(list, "%s*,%s*")) or nil
end
local slots, noslots = slot_set(args.slots), slot_set(args.noslots)
local singular_pos = mw.ustring.gsub(args.pos, "s$", "")
local templates = form_templates(args.pos, args.lang)
local lines = {}
for _, lemma in ipairs(args.lemmas) do
local title = mw.title.new(lemma.term)
local section = title and title:getContent() and language_section(title:getContent(), lang:getCanonicalName())
if not section then
error(("[[%s]] has no %s section"):format(lemma.term, lang:getCanonicalName()), 0)
end
local calls = {}
for template in M.template_parser.find_templates(section) do
local name = template:get_name()
if templates[name] then
local call_args = template:get_arguments()
-- If the lemma has an id, only use the tables with that id.
if not lemma.id or call_args.id == lemma.id then
table.insert(calls, {template = name, args = call_args})
end
end
end
if lemma.id and not calls[1] then
error(("No %s declension table on [[%s]] has id=%s"):format(lang:getCanonicalName(), lemma.term, lemma.id), 0)
end
-- Group the tag sets by gloss, in the order the tables give them, and then by labels, with the unlabelled
-- group first. A gloss given to {{tl|pl-head}} itself replaces the tables' glosses.
local groups, glosses, order = {}, {}, {}
for _, tag_set in ipairs(export.form_tag_sets(args.pagename, lemma.term, calls, args.pos, args.lang, slots, noslots)) do
local gloss = args.gloss or tag_set.gloss
local gloss_key = gloss or ""
if not order[gloss_key] then
order[gloss_key] = {}
table.insert(glosses, gloss_key)
end
local key = gloss_key .. "\0" .. table.concat(tag_set.labels, "|")
if not groups[key] then
groups[key] = {labels = tag_set.labels, gloss = gloss, tag_sets = {}, seen = {}}
table.insert(order[gloss_key], tag_set.labels[1] and #order[gloss_key] + 1 or 1, key)
end
local tags = table.concat(tag_set.tags, "|")
if not groups[key].seen[tags] then
groups[key].seen[tags] = true
table.insert(groups[key].tag_sets, {tags = tag_set.tags})
end
end
for _, gloss_key in ipairs(glosses) do
for _, key in ipairs(order[gloss_key]) do
local group = groups[key]
local line = M.form_of.tagged_inflections {
lang = lang,
tag_sets = M.accel.combine_tag_sets_into_multipart(group.tag_sets, lang, singular_pos),
lemmas = {{lang = lang, term = lemma.term, gloss = group.gloss}},
lemma_face = "term",
}
if group.labels[1] then
line = M.labels.show_labels {labels = group.labels, lang = lang} .. " " .. line
end
table.insert(lines, line)
end
end
end
if not lines[1] then
local terms = {}
for _, lemma in ipairs(args.lemmas) do
table.insert(terms, lemma.term)
end
error(("'%s' is not a form of [[%s]]"):format(args.pagename, table.concat(terms, "]], [[")), 0)
end
return table.concat(lines, "\n# ")
end
-- Process the arguments of a call of the template of `entry` (`noun` or `adjective`). On the template's own page, a call
-- with no arguments declines the language's example (`examples` in [[Module:zlw-lch-decl/data]]) instead of the page
-- name.
local function process_args(frame, entry)
local language = M.data.languages[frame.args.lang]
return M.parameters.process(frame:getParent().args, {
[1] = {template_default = language and language.examples[entry]},
title = {},
id = {},
t = {},
nocat = {type = "boolean"},
json = {type = "boolean"},
pagename = {},
})
end
-- Run the template entry point `entry` (`noun` or `adjective`) on the call of `frame`: decline it with `decline`
-- (`export.decline_noun` or `export.decline_adjective`) and return its table, made by the `TableRenderer` method
-- `render`, or with json=1 the table's data, as `json_data` gives it from the declined spec.
local function run_entry(frame, entry, decline, render, json_data)
local args = process_args(frame, entry)
local spec = decline(args, args.pagename or M.headword_data.pagename, frame.args.lang)
if args.json then
return M.JSON.toJSON(json_data(spec))
end
local renderer = TableRenderer.new(spec)
return renderer[render](renderer)
end
--[==[
Entry point for {{tl|pl-ndecl}} and {{tl|zlw-opl-ndecl}}. Template-callable function to parse and decline a noun given
user-specified arguments and generate a displayable table of the declined forms, or the table's data as JSON with
{{para|json|1}}.
]==]
function export.noun(frame)
return run_entry(frame, "noun", export.decline_noun, "render", function(spec)
return {forms = spec.forms, numbers = spec.numbers, categories = spec.categories, title = spec.title}
end)
end
--[==[
Entry point for {{tl|pl-adecl}}. Template-callable function to parse and decline an adjective given user-specified
arguments and generate a displayable table of the declined forms, or the table's data as JSON with {{para|json|1}}.
]==]
function export.adjective(frame)
return run_entry(frame, "adjective", export.decline_adjective, "renderAdjective", function(spec)
return {forms = spec.forms, layout = spec.layout, kinds = spec.kinds, categories = spec.categories,
title = spec.title}
end)
end
return export
eaz0m8mioa73bnx8vvx7majnu408vya
Mô đun:zlw-lch-decl/data/pl
828
421110
2573725
2573592
2026-10-26T16:48:21Z
Hiyuune
50834
2573725
Scribunto
text/plain
--[==[
Polish data for [[Module:zlw-lch-decl]]: the declension rules, the stem alternations they use, the irregular words,
the footnotes, and the indicators of {{tl|pl-ndecl}} and {{tl|pl-adecl}}.
TERMINOLOGY:
* "stem" = The lemma minus its nominative ending, e.g. ''kobiet-'' from ''kobieta'' and ''okn-'' from ''okno''. A
masculine noun ending in a consonant is its own stem (''pies'').
* "group" = The nouns that share one set of rules, i.e. those with the same gender (`m-pr` masculine personal,
`m-anml` masculine animal, `m-in` masculine inanimate, `f`, `n`), kind (common nouns, surnames, given names, place names and other names) and
nominative ending (`""` for a consonant, `a`, `o`, `e`, `ę`, `um`, `i`). Pluralia tantum have groups of their own,
by the ending of their nominative plural.
* "rule" = The forms of one slot for the nouns of a group whose stem ends in particular letters. The rule for the
longest such ending applies, and `""` holds the group's default. A form is an ending added either to the stem or to
the stem changed by an alternation (e.g. with `stem = "palatal"`, ''kobiet-'' becomes ''kobieci-'' before ''-e'').
* "copy" = A slot whose forms are always those of another slot in its group, e.g. the accusative singular of a
personal noun is its genitive.
]==]
local data = {}
------------------------------------------------------------------------------------------------------------------------
-- Alternations --
------------------------------------------------------------------------------------------------------------------------
-- The vowels, used by the rules that look for the last syllable of a stem.
data.vowels = "aąeęioóuy"
--[==[
The alternations a rule can ask for (`stem = "..."`). Several are joined with "+", in this order:
* `reduced`: drop the mobile ''e'' of the stem's last syllable (''pies'' → ''ps-'', ''sweter'' → ''swetr-'').
* `inserted_e`, `inserted_ie`: put in ''e'' or ''ie'' before the last consonant (''matk-'' → ''matek'', ''okn-'' →
''okien'').
* `truncated`: drop the end of the stem given by `truncate` (''Amerykanin'' → ''Amerykan-'', ''Amerykanie'').
* `spelled`: write the end of the stem as `spelled` gives it before an ending (''appendix'' → ''appendiks-'').
* `shortened`: change ''ó'' to ''o'' and ''ą'' to ''ę'' in the last syllable (''stół'' → ''stoł-'', ''ząb'' →
''zęb-'').
* `lengthened`: change ''o'' to ''ó'' and ''ę'' to ''ą'' in the last syllable (''drog-'' → ''dróg'', ''ręk-'' →
''rąk'').
* `fronted`: change ''o'' or ''a'' to ''e'' in the last syllable (''uczony'' → ''uczeni'', ''sąsiad'' → ''sąsiedzi'').
* `soft`, `palatal`, `virile`: change the last consonant (or two) using one of the tables below.
]==]
-- How `shortened` (''stół'' → ''stołu''), `lengthened` (''droga'' → ''dróg'') and `fronted` (''uczony'' → ''uczeni'',
-- ''sąsiad'' → ''sąsiedzi'') change the vowel of a stem's last syllable.
data.shorten = { ["ó"] = "o", ["ą"] = "ę" }
data.lengthen = { ["o"] = "ó", ["ę"] = "ą" }
data.front = { ["o"] = "e", ["a"] = "e" }
-- How `truncated` cuts a stem (the plural of the nouns in ''-anin'' has no ''-in'': ''mieszczanin'' → ''mieszczanie'',
-- ''mieszczan'') and how `spelled` writes one before an ending (''appendix'' → ''appendiksu'', ''appendiksie'').
data.truncate = { nin = "n" }
data.spelled = { x = "ks" }
-- How a soft consonant at the end of a stem is written before a vowel, e.g. ''koń'' → ''konia''.
data.soft = { ["dź"] = "dzi", ["ć"] = "ci", ["ń"] = "ni", ["ś"] = "si", ["ź"] = "zi" }
-- The reverse: how a stem's soft consonant spelled with ''i'' is written at the end of a word with no ending, e.g.
-- ''danie'' → ''dań''. The module also uses `soft` to respell a final soft consonant before a vowel, as Polish
-- spelling always does (''niedźwiedź'' + ''-a'' → ''niedźwiedzia''), so a rule's ending doesn't need `soft` for that.
data.final_soft = { ["dzi"] = "dź", ["ci"] = "ć", ["ni"] = "ń", ["si"] = "ś", ["zi"] = "ź" }
-- The consonants that stay soft when a mobile ''ie'' before them drops, e.g. ''goniec'' → ''gońca'', ''wrzesień'' →
-- ''września''. Before the other consonants, the ''i'' only marked their softness and goes with it (''pies'' →
-- ''psa'', ''łokieć'' → ''łokcia'').
data.reduced_soft = { n = "ń", s = "ś", z = "ź", c = "ć", dz = "dź" }
-- The first palatalization, before ''-e'' (in the locative singular and the feminine dative singular).
data.palatal = {
-- After ''c'', ''r'' and ''s'', the ''z'' of ''-zn-'' and ''-zł-'' is part of a digraph and doesn't soften
-- (''logiczny'' → ''logiczni'', ''Leszno'' → ''Lesznie'', ''zeszły'' → ''zeszli'', but ''żelazny'' → ''żelaźni'').
["czn"] = "czni", ["rzn"] = "rzni", ["szn"] = "szni", ["czł"] = "czl", ["rzł"] = "rzl", ["szł"] = "szl",
["st"] = "ści", ["zd"] = "ździ", ["sł"] = "śl", ["zł"] = "źl", ["sn"] = "śni", ["zn"] = "źni", ["sm"] = "śmi",
["zm"] = "źmi", ["ch"] = "sz", ["p"] = "pi", ["b"] = "bi", ["f"] = "fi", ["w"] = "wi", ["v"] = "vi", ["m"] = "mi",
["n"] = "ni", ["s"] = "si", ["z"] = "zi", ["t"] = "ci", ["d"] = "dzi", ["r"] = "rz", ["ł"] = "l", ["k"] = "c",
["g"] = "dz", ["h"] = "ż",
}
-- The tooltip over the row header of each case, giving its Polish name and questions.
data.case_titles = {
nom = "mianownik (kto? co?)", gen = "dopełniacz (kogo? czego?)", dat = "celownik (komu? czemu?)",
acc = "biernik (kogo? co?)", ins = "narzędnik (kim? czym?)", loc = "miejscownik (o kim? o czym?)", voc = "wołacz (o!)",
}
-- The nominative endings split off a lemma to get its stem, by gender (and `plural` for a plurale tantum), tried in
-- order. For example, ''kobieta'' is ''kobiet-'' plus ''-a'', a masculine in ''-y'' or ''-i'' is an adjectival noun
-- (''Kowalski''), and one in ''-e'' declines as an adjective in the singular (''Bethke'', ''Bethkego'', ''Bethkowie'').
-- A lemma with none of them is its own stem (''pies'').
data.nominative_endings = {
m = { "a", "o", "y", "i", "e" },
f = { "a", "i" },
n = { "um", "o", "e", "ę" },
plural = { "i", "y", "e", "a" },
}
-- The endings of `nominative_endings` that are only a nominative after a consonant, by gender. After a vowel they belong
-- to the stem (''playboy'', ''playboya''; ''Halley'', ''Halleya'').
data.nominative_after_consonant = { m = { y = true, i = true, e = true } }
-- The mobile vowels that `reduced` drops, tried in order: ''ie'' after a consonant, which stays soft according to
-- `soften` (''goniec'' → ''gońc-''), and ''e'' (''pies'' → ''ps-'').
data.mobile_vowels = {
{ "ie", after_consonant = true, soften = "reduced_soft" },
{ "e" },
}
-- The mobile vowel that `*` puts into a bare form: ''ie'' after the letters in `after` (''okno'' → ''okien'', ''igła''
-- → ''igieł''), and otherwise `default` (''matka'' → ''matek'').
data.inserted_vowel = { default = "e", after = { k = "ie", g = "ie" } }
-- The vowel that spells a soft consonant before another vowel (''koń'' + ''-a'' → ''konia''). An ending drops its first
-- vowel after it if that vowel is one of `soft_vowel_absorbs` (''goleń'' + ''-i'' → ''goleni''), and also after a
-- softening of the stem that ends in it (''Herod'' + virile ''-y'' → ''Herodzi'', ''Twardy'' + ''-i'' → ''Twardzi'').
data.soft_vowel = "i"
data.soft_vowel_absorbs = { "i", "y" }
-- The vowel never written after the soft vowel. After a stem's own ''i'', it is dropped if the ''i'' spells a soft
-- consonant (the stem ends in a key of `final_soft`: ''niunia'' + ''-y'' → ''niuni'') and written as the soft vowel if
-- the ''i'' is a vowel (''Ilia'' + ''-y'' → ''Ilii'').
data.hard_vowel = "y"
-- The digraphs a stem can end in, which count as one consonant (for the stem type in the categories, and for Standard
-- Kurpie).
data.digraphs = { ch = true, cz = true, dz = true, ["dź"] = true, ["dż"] = true, rz = true, sz = true }
-- The softening in the masculine personal nominative plural (''student'' → ''studenci'', ''Polak'' → ''Polacy'').
data.virile = {
["st"] = "ści", ["ch"] = "s", ["t"] = "c", ["d"] = "dz", ["r"] = "rz", ["k"] = "c", ["g"] = "dz", ["ł"] = "l",
["sz"] = "s", ["s"] = "s", ["z"] = "z", ["n"] = "n", ["p"] = "p", ["b"] = "b", ["m"] = "m", ["w"] = "w",
["f"] = "f",
}
------------------------------------------------------------------------------------------------------------------------
-- Notes --
------------------------------------------------------------------------------------------------------------------------
-- The footnotes a rule or an override can give a form, by key: `note = "dated"` in a rule, or `[dated]` in a spec.
data.notes = {
archaic = "cổ xưa",
colloquial = "thông tục",
dated = "lỗi thời",
deprecative = "không còn dùng",
dialectal = "phương ngữ",
humorous = "từ hài hước",
literary = "ngôn ngữ văn chương",
obsolete = "không còn dùng",
pejorative = "nghĩa xấu",
proscribed = "bị phản đối",
rare = "hiếm",
regional = "từ địa phương",
vulgar = "thô tục",
-- Notes for the forms of a pronoun that are only clitics (''go'', ''mi'') or only follow a preposition (''niego'').
unstressed = "không nhấn trọng âm",
after_preposition = "sau giới từ",
}
------------------------------------------------------------------------------------------------------------------------
-- Indicators --
------------------------------------------------------------------------------------------------------------------------
--[==[
The indicators of each template, by name. Indicators with the same `group` exclude each other, and the group names
what they set (read with `Spec:group`). `sets` is the value the indicator gives its group if that isn't its own name,
and `value` means it takes a value (e.g. `decllemma:dń`).
]==]
data.indicators = {
noun = {
m = { group = "gender" }, f = { group = "gender" }, n = { group = "gender" },
pr = { group = "animacy" }, anml = { group = "animacy" }, inan = { group = "animacy" },
sg = { group = "number" }, pl = { group = "number" },
["*"] = { group = "reducible" }, ["-*"] = { group = "reducible" },
["#"] = { group = "quantity" }, ["-#"] = { group = "quantity" },
surname = { group = "kind" }, given = { group = "kind" }, place = { group = "kind" },
proper = { group = "kind" },
irreg = { group = "type" }, indecl = { group = "type" }, ["!"] = { group = "type" }, ["+"] = { group = "type" },
pron = { group = "type" }, num = { group = "type" },
decllemma = { group = "declined", value = "word" }, r = { group = "declined", value = "word" },
lect = { group = "table", value = "code" }, dialectal = { group = "table" },
recon = { value = "word" }, du = {}, soft = {},
},
adjective = {
irreg = {}, plonly = {}, archdat = {},
decllemma = { value = "word" },
lect = { group = "table", value = "code" }, dialectal = { group = "table" }, num = {},
recon = { value = "word" }, du = {},
pos = { value = "part of speech" },
},
}
-- The parts of speech an adjective table can be categorized under (given with `pos:` on one of its words, with
-- `adjective` as the default), along with the plural its categories use ("Polish hard pronouns").
data.parts_of_speech = {
adjective = "tính từ",
pronoun = "đại từ",
determiner = "từ hạn định",
numeral = "số từ",
suffix = "hậu tố",
}
------------------------------------------------------------------------------------------------------------------------
-- Lects --
------------------------------------------------------------------------------------------------------------------------
--[==[
The lects that have a table of their own (`lect:CODE`), by their code in [[Module:zlw-lch-IPA/data/pl]]. An
"attested" table lists the forms given and nothing else (`respelling` gives the link target of each form), and a
"paradigm" generates the forms from the `rules` named. The forms of any other lect go in the `dialectal` table, each
tagged with its lect. The names of the lects are read from [[Module:zlw-lch-IPA/data/pl]].
]==]
data.lect_tables = {
-- The Middle Polish forms link to their modern spelling, using `middle_polish_respelling`.
mpl = { table = "attested", respelling = "middle_polish_respelling" },
-- The Standard Kurpie forms are generated from `kurpie`.
skur = { table = "paradigm", rules = "kurpie" },
}
-- The data module of the lects, with their codes, names and aliases.
data.lect_module = "Module:zlw-lch-IPA/data/pl"
-- The start of the title of a lect's table (or of the dialectal table), before its head.
data.lect_titles = {
mpl = "Dạng biến thể hình thái chứng thực tiếng Ba Lan trung đại của ",
skur = "Biến cách phương ngữ Kurpie tiêu chuẩn của ",
dialectal = "Dạng biến thể hình thái chứng thực theo phương ngữ của ",
}
------------------------------------------------------------------------------------------------------------------------
-- Categories --
------------------------------------------------------------------------------------------------------------------------
--[==[
The categories of a table of the standard language, each after the language's name ("Polish singularia tantum"). A
noun table of one word is categorized by its stem type and gender (`stem`, e.g. "velar feminine nouns"), by what its
forms show (`reducible` for a mobile ''e'', `quantitative` for ''ó''/''o'' or ''ą''/''ę''), and by its type
(`irregular`, `adjectival`, `indeclinable`). A phrase, a pronoun or a numeral is only categorized by its number. An
adjective table is categorized by its kind and part of speech (`adjective_kind`, e.g. "hard adjectives" or "soft
pronouns"), and by any short forms and irregular stem.
]==]
data.categories = {
singularia_tantum = "Danh từ chỉ có số ít",
pluralia_tantum = "Danh từ chỉ có số nhiều",
stem = "Danh từ %s %s",
reducible = "Danh từ với thân từ rút gọn",
quantitative = "nouns with quantitative vowel alternation",
irregular = "Danh từ bất quy tắc",
adjectival = "Danh tính từ",
indeclinable = "Danh từ không biến cách",
adjective_kind = "%s %s",
short_forms = "%s với dạng ngắn",
irregular_stem = "%s với thân từ bất quy tắc",
}
-- The gender of a noun as its stem category names it, by gender and (for masculines) animacy.
data.category_genders = {
m = { pr = "giống đực nhân xưng", anml = "giống đực hữu sinh", inan = "giống đực vô sinh" },
f = "giống cái",
n = "giống trung",
}
-- The stem type of a noun by the last consonant of its stem: velar, soft (including the functionally soft ''c'',
-- ''cz'', ''dz'', ''dż'', ''rz'', ''sz'' and ''ż''), or otherwise hard.
data.stem_types = {
velar = { k = true, g = true, ch = true },
soft = {
["ć"] = true, ["ń"] = true, ["ś"] = true, ["ź"] = true, ["dź"] = true, j = true, l = true, i = true,
c = true, cz = true, dz = true, ["dż"] = true, rz = true, sz = true, ["ż"] = true,
},
}
-- The Middle Polish letters that are respelled in the link target of a form (''ptåka'' links to [[ptaka]]). The form
-- itself is shown as written.
data.middle_polish_respelling = {
["å"] = "a", ["á"] = "a", ["é"] = "e",
["Å"] = "A", ["Á"] = "A", ["É"] = "E",
}
--[==[
The Standard Kurpie paradigm (`lect:skur`)
* `palatal`: what the last consonant (or cluster) of a stem becomes before an ending with `stem = "palatal"`. An ''s''
or ''z'' before a softened consonant is softened too (''masło'' → ''maśle'', ''źosna'' → ''źośńe''), but not the
''z'' of ''rz''. The velars only change before the ''-e'' of a feminine; a masculine or neuter velar takes ''-u''.
* `hardened`: the consonants after which an ending's ''ï'' is written ''y'' (''ulicy'', ''nocy'').
* `soft` and `velar`: the last consonants that make a stem soft or velar, which decide the type of a lemma.
* `mazurated`: the last consonants that can come from mazuration (''s'', ''z'', ''c'', ''dz'' for ''sz'', ''ż'',
''cz'', ''dż''). The indicator `soft` makes such a stem soft, as in ''lystonos'' (< ''listonosz''), whose spelling
doesn't show it; ''sołtys'' stays hard.
* `nouns[GENDER][TYPE]`: the ending of each slot, as in `noun_groups` (a string, or `{ ending, stem = "palatal" }`).
The type comes from the lemma; see `paradigm_type` in [[Module:zlw-lch-decl]].
* `copies[GENDER]` and `animate_copies[ANIMACY]`: the slots that take the forms of another slot.
* `clear`, `clear_before_nasal` and `nasals`: the alternation of `#`, by which the slanted vowel of the last syllable
of a consonant-final lemma is clear before an ending (''kśądz'', ''kśę̈dza''). Before one of the `nasals`, where
''o'' is always written ''ó'', the slanted ''ó'' alternates with ''a''.
* `adjective`: the endings of the single adjective declension, by slot of `adjective_slots`, added to the lemma minus
its last letter.
]==]
data.kurpie = {
palatal = {
["rzn"] = "rzń", ["rzł"] = "rzl",
st = "ść", zd = "źdź", sn = "śń", zn = "źń", ["sł"] = "śl", ["zł"] = "źl", sm = "śń", zm = "źń",
b = "bź", p = "pś", f = "ś", w = "ź", m = "ń", s = "ś", z = "ź", t = "ć", d = "dź", n = "ń", r = "rz",
["ł"] = "l", ch = "s", k = "c", g = "dz",
},
hardened = { c = true, cz = true, dz = true, ["dż"] = true, rz = true, sz = true, ["ż"] = true },
-- The type of a lemma, by gender. Take the first entry whose ending the lemma has (`""` for none; with
-- `consonant_final`, only if it doesn't end in one of the `vowels`). The type is that of the first class in the
-- entry's `by_final` that has the last consonant of the stem, and otherwise `default`; it is a type of the gender
-- `declension` if the entry gives one. With the indicator `soft`, it is the entry's `soft`.
types = {
f = {
{ ending = "a", by_final = { { "soft", "soft" }, { "hardened", "soft" } }, default = "hard" },
-- After a soft consonant, the ending is written ''-å'' (''sukńå'').
{ ending = "å", default = "soft" },
{ ending = "", by_final = { { "soft", "soft_consonant" } }, default = "hard_consonant" },
},
n = {
{ ending = "um", default = "latinate" },
-- A final ''ę'' is written ''ë'' (''wyńë'').
{ ending = "ë", default = "nasal" },
-- A soft stem in ''-o'' is a j-stem (''jajo'').
{ ending = "o", by_final = { { "velar", "velar" }, { "hardened", "hardened" }, { "soft", "soft" } },
default = "hard" },
{ ending = "e", by_final = { { "hardened", "hardened" } }, default = "soft" },
},
m = {
{ ending = "", consonant_final = true,
by_final = { { "velar", "velar" }, { "soft", "soft" }, { "hardened", "soft" } }, default = "hard",
soft = "soft" },
-- An animate masculine in ''-a'' or ''-å'' (''starosta'', ''sę̈dźå'') declines as a feminine, with the
-- accusative plural of its animacy.
{ ending = "a", declension = "f", by_final = { { "soft", "soft" }, { "hardened", "soft" } }, default = "hard" },
{ ending = "å", declension = "f", default = "soft" },
},
},
-- The nominative plural endings a plurale tantum can have, tried in order (''Ńëmcy'').
plural_nominatives = { "y", "ï", "e", "a" },
vowels = "aąeęioóuyåéëï",
-- A personal or animal velar has a type of its own, with the genitive and accusative in ''-a'' (''ptaka'').
animate_types = { velar = "animate_velar" },
-- How the first letter of an ending is written after a hardened consonant (''ï'' as ''y'').
hardened_spelling = { ["ï"] = "y" },
soft = { ["ć"] = true, ["ń"] = true, ["ś"] = true, ["ź"] = true, ["dź"] = true, j = true, l = true },
velar = { k = true, g = true, ch = true },
mazurated = { s = true, z = true, c = true, dz = true },
-- The consonants after which an adjective has ''-ï'' for ''-y'' (''głupśï'').
adjective_soft = { ["ś"] = true, ["ź"] = true, ["ć"] = true, ["dź"] = true, ["ń"] = true, j = true },
clear = { ["ó"] = "o", ["é"] = "e", ["å"] = "a", ["ą"] = "ę̈" },
clear_before_nasal = { ["ó"] = "a" },
nasals = { m = true, n = true, ["ń"] = true },
nouns = {
m = {
hard = {
nom_p = "y", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach",
},
velar = {
nom_p = "y", gen_s = "u", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
-- A personal or animal velar takes the genitive (and accusative) in ''-a'' (''ptaka'').
animate_velar = {
nom_p = "y", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
soft = {
nom_p = "e", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
},
f = {
hard = {
nom_p = "y", gen_s = "y", gen_p = "ów", dat_s = { "e", stem = "palatal" }, dat_p = "óm", acc_s = "ë",
ins_s = "ó", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach", voc_s = "o",
},
soft = {
nom_p = "e", gen_s = "ï", gen_p = "ów", dat_s = "ï", dat_p = "óm", acc_s = "ë",
ins_s = "ó", ins_p = "ańï", loc_s = "ï", loc_p = "ach", voc_s = "o",
},
hard_consonant = {
nom_p = "e", gen_s = "y", gen_p = "ów", dat_s = "y", dat_p = "óm", acc_s = "",
ins_s = "ó", ins_p = "ańï", loc_s = "y", loc_p = "ach", voc_s = "y",
},
soft_consonant = {
nom_p = "e", gen_s = "ï", gen_p = "ów", dat_s = "ï", dat_p = "óm", acc_s = "",
ins_s = "ó", ins_p = "ańï", loc_s = "ï", loc_p = "ach", voc_s = "ï",
},
},
n = {
hard = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach",
},
velar = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
soft = {
nom_p = "a", gen_s = "å", gen_p = "ów", dat_s = "u", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
hardened = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
nasal = {
nom_p = "óna", gen_s = "ëńå", gen_p = "ónów", dat_s = "ëńu", dat_p = "ónóm",
ins_s = "ëńëm", ins_p = "ónańï", loc_s = "ëńu", loc_p = "ónach",
},
latinate = {
nom_p = "a", gen_s = "um", gen_p = "ów", dat_s = "um", dat_p = "óm",
ins_s = "um", ins_p = "ańï", loc_s = "um", loc_p = "ach",
},
},
},
copies = {
m = { voc_s = "loc_s", voc_p = "nom_p" },
f = { acc_p = "nom_p", voc_p = "nom_p" },
n = { acc_s = "nom_s", voc_s = "nom_s", acc_p = "nom_p", voc_p = "nom_p" },
},
animate_copies = {
pr = { acc_p = "gen_p" },
anml = { acc_p = "nom_p" },
inan = { acc_s = "nom_s", acc_p = "nom_p" },
},
-- The other slots are shared as in the standard tables (e.g. the dative and locative feminine come from the
-- genitive), and the plural has one nominative for both genders.
adjective = {
nom_n = "e", nom_f = "å", nom_mp_pers = "e", nom_p_not_mp_pers = "e",
gen_mn = "égo", gen_f = "éj", gen_p = "éch",
dat_mn = "ëmu", dat_p = "ëm",
acc_f = "ó",
ins_mn = "ëm", ins_p = "ëńï",
},
}
-- The rule gender of each gender and animacy of a call.
data.rule_gender = {
m = { pr = "m-pr", anml = "m-anml", inan = "m-in" },
f = "f",
n = "n",
}
------------------------------------------------------------------------------------------------------------------------
-- Lexicon --
------------------------------------------------------------------------------------------------------------------------
-- The slots of a noun in the order the lexicon lists them in.
data.slot_order = {
"nom_s", "gen_s", "dat_s", "acc_s", "ins_s", "loc_s", "voc_s",
"nom_p", "gen_p", "dat_p", "acc_p", "ins_p", "loc_p", "voc_p",
}
-- The irregular nouns of `<irreg>`, by lemma, with their gender and animacy and every form, in `slot_order`.
data.irregular_nouns = {
["brat"] = { gender = "m", animacy = "pr",
"brat", "brata", "bratu", "brata", "bratem", "bracie", "bracie",
"bracia", "braci", "braciom", "braci", "braćmi", "braciach", "bracia",
},
["dziecko"] = { gender = "n",
"dziecko", "dziecka", "dziecku", "dziecko", "dzieckiem", "dziecku", "dziecko",
"dzieci", "dzieci", "dzieciom", "dzieci", "dziećmi", "dzieciach", "dzieci",
},
["ksiądz"] = { gender = "m", animacy = "pr",
"ksiądz", "księdza", "księdzu", "księdza", "księdzem", "księdzu", "księże",
"księża", "księży", "księżom", "księży", "księżmi", "księżach", "księża",
},
["książę"] = { gender = "m", animacy = "pr",
"książę", "księcia", "księciu", "księcia", "księciem", "księciu", "książę",
"książęta", "książąt", "książętom", "książąt", "książętami", "książętach", "książęta",
},
["rok"] = { gender = "m", animacy = "inan",
"rok", "roku", "rokowi", "rok", "rokiem", "roku", "roku",
"lata", "lat", "latom", "lata", "latami", "latach", "lata",
},
["arcyksiążę"] = { gender = "m", animacy = "pr",
"arcyksiążę", "arcyksięcia", "arcyksięciu", "arcyksięcia", "arcyksięciem", "arcyksięciu", "arcyksiążę",
"arcyksiążęta", "arcyksiążąt", "arcyksiążętom", "arcyksiążąt", "arcyksiążętami", "arcyksiążętach",
"arcyksiążęta",
},
}
------------------------------------------------------------------------------------------------------------------------
-- Pronouns, numerals and noun rules --
------------------------------------------------------------------------------------------------------------------------
--[==[
The pronouns of `<pron>`, by lemma, with the numbers of the table (`numberless` for ''siebie'') and the forms of each
slot, each a string or `{ form, notes = { KEY... } }` with keys of `notes`. A pronoun made of one of these plus an
ending in `pronoun_suffixes` (e.g. ''cośkolwiek'') declines like the pronoun, with the ending after every form.
]==]
data.pronouns = {
["co"] = {
numbers = { "s" },
nom_s = { "co" },
gen_s = { "czego", { "co", notes = { "rare" } } },
dat_s = { "czemu" },
acc_s = { "co" },
ins_s = { "czym" },
loc_s = { "czym" },
},
["cokolwiek"] = {
numbers = { "s" },
nom_s = { "cokolwiek" },
gen_s = { "czegokolwiek", { "cokolwiek", notes = { "rare" } } },
dat_s = { "czemukolwiek" },
acc_s = { "cokolwiek" },
ins_s = { "czymkolwiek" },
loc_s = { "czymkolwiek" },
},
["coś"] = {
numbers = { "s" },
nom_s = { "coś" },
gen_s = { "czegoś", { "coś", notes = { "rare" } } },
dat_s = { "czemuś" },
acc_s = { "coś" },
ins_s = { "czymś" },
loc_s = { "czymś" },
},
["cóż"] = {
numbers = { "s" },
nom_s = { "cóż" },
gen_s = { "czegoż", "czegóż", { "cóż", notes = { "rare" } } },
dat_s = { "czemuż" },
acc_s = { "cóż" },
ins_s = { "czymże" },
loc_s = { "czymże" },
},
["ja"] = {
numbers = { "s" },
nom_s = { "ja" },
gen_s = { "mnie", { "mię", notes = { "unstressed", "rare" } } },
dat_s = { "mnie", { "mi", notes = { "unstressed" } } },
acc_s = { "mnie", { "mię", notes = { "unstressed", "rare" } } },
ins_s = { "mną" },
loc_s = { "mnie" },
},
["kto"] = {
numbers = { "s" },
nom_s = { "kto" },
gen_s = { "kogo" },
dat_s = { "komu" },
acc_s = { "kogo" },
ins_s = { "kim" },
loc_s = { "kim" },
},
["ktokolwiek"] = {
numbers = { "s" },
nom_s = { "ktokolwiek" },
gen_s = { "kogokolwiek" },
dat_s = { "komukolwiek" },
acc_s = { "kogokolwiek" },
ins_s = { "kimkolwiek" },
loc_s = { "kimkolwiek" },
},
["ktoś"] = {
numbers = { "s" },
nom_s = { "ktoś" },
gen_s = { "kogoś" },
dat_s = { "komuś" },
acc_s = { "kogoś" },
ins_s = { "kimś" },
loc_s = { "kimś" },
},
["któż"] = {
numbers = { "s" },
nom_s = { "któż" },
gen_s = { "kogoż", "kogóż" },
dat_s = { "komuż" },
acc_s = { "kogoż", "kogóż" },
ins_s = { "kimże" },
loc_s = { "kimże" },
},
["my"] = {
numbers = { "p" },
nom_p = { "my" },
gen_p = { "nas" },
dat_p = { "nam" },
acc_p = { "nas" },
ins_p = { "nami" },
loc_p = { "nas" },
voc_p = { "my" },
},
["nic"] = {
numbers = { "s" },
nom_s = { "nic" },
gen_s = { "nic", "niczego" },
dat_s = { "niczemu" },
acc_s = { "nic" },
ins_s = { "niczym" },
loc_s = { "niczym" },
},
["nikt"] = {
numbers = { "s" },
nom_s = { "nikt" },
gen_s = { "nikogo" },
dat_s = { "nikomu" },
acc_s = { "nikogo" },
ins_s = { "nikim" },
loc_s = { "nikim" },
},
["on"] = {
numbers = { "s" },
nom_s = { "on" },
gen_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
dat_s = { "jemu", { "mu", notes = { "unstressed" } }, { "niemu", notes = { "after_preposition" } } },
acc_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
ins_s = { "nim" },
loc_s = { "nim" },
},
["ona"] = {
numbers = { "s" },
nom_s = { "ona" },
gen_s = { "jej", { "niej", notes = { "after_preposition" } } },
dat_s = { "jej", { "niej", notes = { "after_preposition" } } },
acc_s = { "ją", { "nią", notes = { "after_preposition" } } },
ins_s = { "nią" },
loc_s = { "niej" },
},
["one"] = {
numbers = { "p" },
nom_p = { "one" },
gen_p = { "ich", { "nich", notes = { "after_preposition" } } },
dat_p = { "im", { "nim", notes = { "after_preposition" } } },
acc_p = { "je", { "nie", notes = { "after_preposition" } } },
ins_p = { "nimi" },
loc_p = { "nich" },
},
["oni"] = {
numbers = { "p" },
nom_p = { "oni" },
gen_p = { "ich", { "nich", notes = { "after_preposition" } } },
dat_p = { "im", { "nim", notes = { "after_preposition" } } },
acc_p = { "ich", { "nich", notes = { "after_preposition" } } },
ins_p = { "nimi" },
loc_p = { "nich" },
},
["ono"] = {
numbers = { "s" },
nom_s = { "ono" },
gen_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
dat_s = { "jemu", { "mu", notes = { "unstressed" } }, { "niemu", notes = { "after_preposition" } } },
acc_s = { "je", { "nie", notes = { "after_preposition" } } },
ins_s = { "nim" },
loc_s = { "nim" },
},
["siebie"] = {
numbers = { "s" }, numberless = true,
gen_s = { "siebie", "się" },
dat_s = { "sobie", "se" },
acc_s = { "siebie", "się" },
ins_s = { "sobą" },
loc_s = { "sobie", "se" },
},
["ty"] = {
numbers = { "s" },
nom_s = { "ty" },
gen_s = { "ciebie", { "cię", notes = { "unstressed" } } },
dat_s = { "tobie", { "ci", notes = { "unstressed" } } },
acc_s = { "ciebie", { "cię", notes = { "unstressed" } } },
ins_s = { "tobą" },
loc_s = { "tobie" },
voc_s = { "ty", { "te", notes = { "proscribed", "colloquial" } } },
},
["wszystko"] = {
numbers = { "s" },
nom_s = { "wszystko" },
gen_s = { "wszystkiego" },
dat_s = { "wszystkiemu" },
acc_s = { "wszystko" },
ins_s = { "wszystkim" },
loc_s = { "wszystkim" },
},
["wy"] = {
numbers = { "p" },
nom_p = { "wy" },
gen_p = { "was" },
dat_p = { "wam" },
acc_p = { "was" },
ins_p = { "wami" },
loc_p = { "was" },
voc_p = { "wy" },
},
}
data.pronoun_suffixes = { "śkolwiek", "kolwiek", "ś" }
--[==[
The numerals of `<num>`, by the end of their lemma (the longest one a lemma ends in applies). `numeral_rules` has the
cardinals of {{tl|pl-adecl}} (''pięć'', ''trzy'', ''-naście'', ''-set''), with a virile and a non-virile column in the
slots of `adjective_slots`, and `collective_rules` has the collectives of {{tl|pl-ndecl}} (''pięcioro'', ''dwoje''), in
the plural slots of a noun. Each slot has the endings that follow the lemma minus its key, as in `noun_groups`, and the
comment on each rule names the numerals it was made from.
]==]
data.numeral_rules = {
["a"] = { -- kilka
nom_mp_pers = "u", nom_p_not_mp_pers = "a", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "a", ins_p = { "oma", "u" }, loc_p = "u",
},
["adziesiąt"] = { -- kilkadziesiąt
nom_mp_pers = { "udziesięciu", { "udziesiąt", note = "dated" } }, nom_p_not_mp_pers = "adziesiąt", gen_p = { "udziesięciu", { "udziesiąt", note = "dated" } }, dat_p = { "udziesięciu", { "udziesiąt", note = "dated" } }, acc_mp_pers = { "udziesięciu", { "udziesiąt", note = "dated" } }, acc_p_not_mp_pers = "adziesiąt", ins_p = { "udziesięcioma", "udziesięciu", { "udziesiąt", note = "dated" } }, loc_p = { "udziesięciu", { "udziesiąt", note = "dated" } },
},
["adzieścia"] = { -- dwadzieścia
nom_mp_pers = "udziestu", nom_p_not_mp_pers = "adzieścia", gen_p = "udziestu", dat_p = "udziestu", acc_mp_pers = "udziestu", acc_p_not_mp_pers = "adzieścia", ins_p = { "udziestoma", "udziestu" }, loc_p = "udziestu",
},
["akroć"] = { -- dwakroć
nom_mp_pers = "ukroć", nom_p_not_mp_pers = "akroć", gen_p = "ukroć", dat_p = "ukroć", acc_mp_pers = "ukroć", acc_p_not_mp_pers = "akroć", ins_p = { "ukroć", { "omakroć", note = "rare" } }, loc_p = "ukroć",
},
["anaście"] = { -- dwanaście, kilkanaście
nom_mp_pers = "unastu", nom_p_not_mp_pers = "anaście", gen_p = "unastu", dat_p = "unastu", acc_mp_pers = "unastu", acc_p_not_mp_pers = "anaście", ins_p = { "unastoma", "unastu" }, loc_p = "unastu",
},
["aset"] = { -- kilkaset
nom_mp_pers = "uset", nom_p_not_mp_pers = "aset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "aset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["edziesiąt"] = { -- wieledziesiąt
nom_mp_pers = "udziesięciu", nom_p_not_mp_pers = "edziesiąt", gen_p = "udziesięciu", dat_p = "udziesięciu", acc_mp_pers = "udziesięciu", acc_p_not_mp_pers = "edziesiąt", ins_p = { "udziesięciu", { "udziesięcioma", note = "rare" } }, loc_p = "udziesięciu",
},
["ekolwiek"] = { -- ilekolwiek
nom_mp_pers = "ukolwiek", nom_p_not_mp_pers = "ekolwiek", gen_p = "ukolwiek", dat_p = "ukolwiek", acc_mp_pers = "ukolwiek", acc_p_not_mp_pers = "ekolwiek", ins_p = { "ukolwiek", { "omakolwiek", note = "rare" } }, loc_p = "ukolwiek",
},
["ele"] = { -- niewiele, wiele
nom_mp_pers = { "elu", { "ela", note = "dated" } }, nom_p_not_mp_pers = "ele", gen_p = { "elu", { "ela", note = "dated" } }, dat_p = { "elu", { "ela", note = "dated" } }, acc_mp_pers = { "elu", { "ela", note = "dated" } }, acc_p_not_mp_pers = "ele", ins_p = { "eloma", "elu", { "ela", note = "dated" }, { "elą", note = "dated" } }, loc_p = { "elu", { "ela", note = "dated" } },
},
["em"] = { -- siedem
nom_mp_pers = "miu", nom_p_not_mp_pers = { "em", { "m", note = "dated" } }, gen_p = "miu", dat_p = "miu", acc_mp_pers = "miu", acc_p_not_mp_pers = { "em", { "m", note = "dated" } }, ins_p = { "mioma", "miu" }, loc_p = "miu",
},
["emkroć"] = { -- siedemkroć
nom_mp_pers = "miukroć", nom_p_not_mp_pers = "emkroć", gen_p = "miukroć", dat_p = "miukroć", acc_mp_pers = "miukroć", acc_p_not_mp_pers = "emkroć", ins_p = { "miukroć", { "miomakroć", note = "rare" } }, loc_p = "miukroć",
},
["emset"] = { -- siedemset
nom_mp_pers = "miuset", nom_p_not_mp_pers = { "emset", { "mset", note = "dated" } }, gen_p = "miuset", dat_p = "miuset", acc_mp_pers = "miuset", acc_p_not_mp_pers = { "emset", { "mset", note = "dated" } }, ins_p = { "miuset", { "miomaset", note = "rare" } }, loc_p = "miuset",
},
["eset"] = { -- wieleset
nom_mp_pers = "uset", nom_p_not_mp_pers = "eset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "eset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["eś"] = { -- ileś
nom_mp_pers = "uś", nom_p_not_mp_pers = "eś", gen_p = "uś", dat_p = "uś", acc_mp_pers = "uś", acc_p_not_mp_pers = "eś", ins_p = { "uś", { "omaś", note = "rare" } }, loc_p = "uś",
},
["eż"] = { -- ileż, tyleż, wieleż
nom_mp_pers = "uż", nom_p_not_mp_pers = "eż", gen_p = "uż", dat_p = "uż", acc_mp_pers = "uż", acc_p_not_mp_pers = "eż", ins_p = { "uż", { "omaż", note = "rare" } }, loc_p = "uż",
},
["ieście"] = { -- dwieście
nom_mp_pers = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, nom_p_not_mp_pers = "ieście", gen_p = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, dat_p = "ustu", acc_mp_pers = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, acc_p_not_mp_pers = "ieście", ins_p = { "ustu", { "omaset", note = "rare" }, { "ustoma", note = "rare" } }, loc_p = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } },
},
["ile"] = { -- ile
nom_mp_pers = "ilu", nom_p_not_mp_pers = "ile", gen_p = "ilu", dat_p = "ilu", acc_mp_pers = "ilu", acc_p_not_mp_pers = "ile", ins_p = { "iloma", "ilu" }, loc_p = "ilu",
},
["mset"] = { -- siedmset
nom_mp_pers = "miuset", nom_p_not_mp_pers = { "emset", "mset" }, gen_p = "miuset", dat_p = "miuset", acc_mp_pers = "miuset", acc_p_not_mp_pers = { "emset", "mset" }, ins_p = { "miuset", { "miomaset", note = "rare" } }, loc_p = "miuset",
},
["o"] = { -- sto
nom_mp_pers = "u", nom_p_not_mp_pers = "o", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "o", ins_p = { "u", { "oma", note = "rare" } }, loc_p = "u",
},
["siem"] = { -- osiem
nom_mp_pers = "śmiu", nom_p_not_mp_pers = { "siem", { "śm", note = "dated" } }, gen_p = "śmiu", dat_p = "śmiu", acc_mp_pers = "śmiu", acc_p_not_mp_pers = { "siem", { "śm", note = "dated" } }, ins_p = { "śmioma", "śmiu" }, loc_p = "śmiu",
},
["siemkroć"] = { -- osiemkroć
nom_mp_pers = "śmiukroć", nom_p_not_mp_pers = "siemkroć", gen_p = "śmiukroć", dat_p = "śmiukroć", acc_mp_pers = "śmiukroć", acc_p_not_mp_pers = "siemkroć", ins_p = { "śmiukroć", { "śmiomakroć", note = "rare" } }, loc_p = "śmiukroć",
},
["siemset"] = { -- osiemset
nom_mp_pers = "śmiuset", nom_p_not_mp_pers = { "siemset", { "śmset", note = "dated" } }, gen_p = "śmiuset", dat_p = "śmiuset", acc_mp_pers = "śmiuset", acc_p_not_mp_pers = { "siemset", { "śmset", note = "dated" } }, ins_p = { "śmiuset", { "śmiomaset", note = "rare" } }, loc_p = "śmiuset",
},
["y"] = { -- cztery, trzy
nom_mp_pers = { "ech", "ej" }, nom_p_not_mp_pers = "y", gen_p = "ech", dat_p = "em", acc_mp_pers = "ech", acc_p_not_mp_pers = "y", ins_p = "ema", loc_p = "ech",
},
["ykroć"] = { -- trzykroć
nom_mp_pers = "echkroć", nom_p_not_mp_pers = "ykroć", gen_p = "echkroć", dat_p = "echkroć", acc_mp_pers = "echkroć", acc_p_not_mp_pers = "ykroć", ins_p = { "echkroć", { "emakroć", note = "rare" } }, loc_p = "echkroć",
},
["yle"] = { -- tyle
nom_mp_pers = { "ylu", { "yla", note = "dated" } }, nom_p_not_mp_pers = "yle", gen_p = { "ylu", { "yla", note = "dated" } }, dat_p = { "ylu", { "yla", note = "dated" } }, acc_mp_pers = { "ylu", { "yla", note = "dated" } }, acc_p_not_mp_pers = "yle", ins_p = { "yloma", "ylu", { "yla", note = "dated" }, { "ylą", note = "dated" } }, loc_p = { "ylu", { "yla", note = "dated" } },
},
["ysta"] = { -- czterysta, trzysta
nom_mp_pers = { "ystu", { "echset", note = "rare" } }, nom_p_not_mp_pers = "ysta", gen_p = { "ystu", { "echset", note = "rare" } }, dat_p = "ystu", acc_mp_pers = { "ystu", { "echset", note = "rare" } }, acc_p_not_mp_pers = "ysta", ins_p = { "ystu", { "ystoma", note = "rare" } }, loc_p = { "ystu", { "echset", note = "rare" } },
},
["ąt"] = { -- dziewięćdziesiąt, osiemdziesiąt, ośmdziesiąt, pięćdziesiąt, siedemdziesiąt, siedmdziesiąt, sześćdziesiąt
nom_mp_pers = "ęciu", nom_p_not_mp_pers = "ąt", gen_p = "ęciu", dat_p = "ęciu", acc_mp_pers = "ęciu", acc_p_not_mp_pers = "ąt", ins_p = { "ęcioma", "ęciu" }, loc_p = "ęciu",
},
["ć"] = { -- dziesięć, dziewięć, pięć, sześć
nom_mp_pers = "ciu", nom_p_not_mp_pers = "ć", gen_p = "ciu", dat_p = "ciu", acc_mp_pers = "ciu", acc_p_not_mp_pers = "ć", ins_p = { "cioma", "ciu" }, loc_p = "ciu",
},
["ćkroć"] = { -- pięćkroć
nom_mp_pers = "ciukroć", nom_p_not_mp_pers = "ćkroć", gen_p = "ciukroć", dat_p = "ciukroć", acc_mp_pers = "ciukroć", acc_p_not_mp_pers = "ćkroć", ins_p = { "ciukroć", { "ciomakroć", note = "rare" } }, loc_p = "ciukroć",
},
["ćset"] = { -- dziewięćset, pięćset, sześćset
nom_mp_pers = "ciuset", nom_p_not_mp_pers = "ćset", gen_p = "ciuset", dat_p = "ciuset", acc_mp_pers = "ciuset", acc_p_not_mp_pers = "ćset", ins_p = { "ciuset", { "ciomaset", note = "rare" } }, loc_p = "ciuset",
},
["ę"] = { -- parę
nom_mp_pers = "u", nom_p_not_mp_pers = "ę", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "ę", ins_p = { "oma", "u" }, loc_p = "u",
},
["ędziesiąt"] = { -- parędziesiąt
nom_mp_pers = "udziesięciu", nom_p_not_mp_pers = "ędziesiąt", gen_p = "udziesięciu", dat_p = "udziesięciu", acc_mp_pers = "udziesięciu", acc_p_not_mp_pers = "ędziesiąt", ins_p = { "udziesięciu", { "udziesięcioma", note = "rare" } }, loc_p = "udziesięciu",
},
["ęnaście"] = { -- paręnaście
nom_mp_pers = "unastu", nom_p_not_mp_pers = "ęnaście", gen_p = "unastu", dat_p = "unastu", acc_mp_pers = "unastu", acc_p_not_mp_pers = "ęnaście", ins_p = { "unastoma", "unastu" }, loc_p = "unastu",
},
["ęset"] = { -- paręset
nom_mp_pers = "uset", nom_p_not_mp_pers = "ęset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "ęset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["ści"] = { -- czterdzieści, trzydzieści
nom_mp_pers = "stu", nom_p_not_mp_pers = "ści", gen_p = "stu", dat_p = "stu", acc_mp_pers = "stu", acc_p_not_mp_pers = "ści", ins_p = { "stoma", "stu" }, loc_p = "stu",
},
["ście"] = { -- czternaście, dziewiętnaście, jedenaście, naście, osiemnaście, ośmnaście, piętnaście, siedemnaście, siedmnaście, szesnaście, trzynaście
nom_mp_pers = "stu", nom_p_not_mp_pers = "ście", gen_p = "stu", dat_p = "stu", acc_mp_pers = "stu", acc_p_not_mp_pers = "ście", ins_p = { "stoma", "stu" }, loc_p = "stu",
},
["śmset"] = { -- ośmset
nom_mp_pers = "śmiuset", nom_p_not_mp_pers = { "siemset", "śmset" }, gen_p = "śmiuset", dat_p = "śmiuset", acc_mp_pers = "śmiuset", acc_p_not_mp_pers = { "siemset", "śmset" }, ins_p = { "śmiuset", { "śmiomaset", note = "rare" } }, loc_p = "śmiuset",
},
}
data.collective_rules = {
["e"] = { -- dwoje, oboje, obydwoje, obydwoje, troje
nom_p = "e", gen_p = "ga", dat_p = "gu", acc_p = "e", ins_p = "giem", loc_p = "gu", voc_p = "e",
},
["o"] = { -- czterdzieścioro, czternaścioro, czworo, dwadzieścioro, dwanaścioro, dziesięcioro, dziewiętnaścioro, dziewięcioro, dziewięćdziesięcioro, jedenaścioro, kilkoro, kilkadziesięcioro, kilkanaścioro, naścioro, ośmioro, osiemdziesięcioro, osiemnaścioro, ośmdziesięcioro, ośmnaścioro, piętnaścioro, pięcioro, pięćdziesięcioro, siedmioro, siedemdziesięcioro, siedemnaścioro, siedmdziesięcioro, siedmnaścioro, szesnaścioro, sześcioro, sześćdziesięcioro, trzydzieścioro, trzynaścioro
nom_p = "o", gen_p = "ga", dat_p = "gu", acc_p = "o", ins_p = "giem", loc_p = "gu", voc_p = "o",
},
}
--[==[
The noun groups, keyed `GENDER KIND NUMBER NOMINATIVE` (e.g. `m-pr common sg `, `f common sg a`, `n place pl y`):
* `copies`: the slots that take the forms of another slot (e.g. `acc_s = "gen_s"`).
* `rules`: the forms of each slot, by the ending of the stem (`""` is the default). A slot's forms are an ending (a
string) or a list of endings, and an ending given as a table can name a `stem` alternation and a `note`.
]==]
data.noun_groups = {
["f common sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_s = { "", stem = "soft" }, ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = { "", stem = "soft" } },
["A"] = { dat_p = "", ins_p = "", ins_s = "", loc_p = "" },
["D"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["M"] = { dat_p = { "", "-om" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" } },
["V"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["b"] = { dat_p = { "om", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "ą", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["c"] = { gen_s = "y", nom_p = "e" },
["e"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["edź"] = { nom_p = { "", stem = "soft" } },
["g"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["j"] = { nom_p = "e" },
["k"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["l"] = { gen_s = "i", nom_p = "e" },
["n"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["nt"] = { gen_s = "", nom_p = "" },
["o"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["oć"] = { nom_p = "e" },
["r"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["rś"] = { nom_p = { "", stem = "soft" } },
["s"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["t"] = { dat_p = "", ins_p = "", ins_s = "", loc_p = "" },
["tać"] = { nom_p = { { "", stem = "soft" }, "e" } },
["u"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["w"] = { dat_p = { "om", stem = "reduced+palatal" }, gen_s = { "", stem = "reduced+palatal" }, ins_p = { "ami", stem = "reduced+palatal" }, ins_s = { "ą", stem = "reduced+palatal" }, loc_p = { "ach", stem = "reduced+palatal" }, nom_p = { "e", stem = "reduced+palatal" } },
["y"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["z"] = { gen_s = "y", nom_p = "e" },
["é"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["ódź"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "", stem = "shortened+soft" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ól"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "i", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ąż"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "y", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ęś"] = { ins_p = { "ami", "mi" }, nom_p = { "", stem = "soft" } },
["ń"] = { nom_p = "e" },
["ś"] = { nom_p = "e" },
["ź"] = { nom_p = "e" },
["ż"] = { gen_s = "y", nom_p = "e" },
},
},
["f common sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "i", voc_s = "o" },
["acz"] = { gen_p = "" },
["aj"] = { gen_p = "" },
["ak"] = { gen_p = "" },
["all"] = { gen_p = { "", "i" } },
["ani"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["ans"] = { nom_p = "e" },
["arł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ast"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["awn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["b"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["bi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["bl"] = { gen_p = "i" },
["bn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["bni"] = { gen_p = "" },
["bol"] = { gen_p = "i" },
["bow"] = { voc_s = "a" },
["c"] = { dat_s = "y", gen_p = "", gen_s = "y", nom_p = "e" },
["ci"] = { dat_s = "", gen_p = { "", { "", stem = "final_soft" } }, gen_s = "", voc_s = "u" },
["cn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["cni"] = { gen_p = "" },
["cow"] = { voc_s = "a" },
["cz"] = { dat_s = "y", gen_p = { "", "y" }, nom_p = "e" },
["czi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["czm"] = { dat_s = "ie" },
["czn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["d"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["di"] = { gen_p = "i" },
["dl"] = { gen_p = "i" },
["dn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["dni"] = { gen_p = "" },
["dow"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "lengthened" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y" },
["dz"] = { dat_s = "y", nom_p = "e" },
["dł"] = { gen_p = { "", stem = "inserted_e" } },
["dż"] = { gen_p = { "", "y" } },
["e"] = { dat_s = "i", gen_p = "i", nom_p = "e" },
["ebn"] = { voc_s = "a" },
["ecn"] = { voc_s = "a" },
["ecz"] = { gen_p = "y" },
["ej"] = { gen_p = "" },
["ek"] = { gen_p = "" },
["eni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["eśn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["f"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["fi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["fl"] = { gen_p = "i" },
["g"] = { gen_p = "" },
["gi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["gl"] = { gen_p = "i" },
["gni"] = { gen_p = "" },
["gog"] = { gen_p = "" },
["gł"] = { gen_p = { "", stem = "inserted_ie" } },
["h"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["hi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["hl"] = { gen_p = "i" },
["hn"] = { gen_p = { "", stem = "inserted_e" } },
["hni"] = { gen_p = "" },
["how"] = { voc_s = "a" },
["hł"] = { gen_p = { "", stem = "inserted_e" } },
["i"] = { dat_s = "i", nom_p = "e" },
["ij"] = { gen_p = "" },
["ik"] = { gen_p = "" },
["ini"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["iod"] = { gen_p = "" },
["ion"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["izd"] = { dat_s = { "e", stem = "palatal" } },
["izi"] = { voc_s = "u" },
["j"] = { dat_s = "i", gen_p = "i", nom_p = "e" },
["jni"] = { gen_p = "" },
["jog"] = { gen_p = "" },
["jom"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ki"] = { gen_p = { "i", { "j", note = "archaic" } } },
["kk"] = { gen_p = "" },
["kl"] = { gen_p = "i" },
["kni"] = { gen_p = "" },
["ksz"] = { gen_p = { "", "y" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["l"] = { dat_s = "i", gen_p = { "", "i" }, nom_p = "e" },
["li"] = { gen_p = { "i", { "j", note = "archaic" } } },
["ll"] = { gen_p = "i" },
["ln"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["lni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["lsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["lsz"] = { gen_p = { "", "y" } },
["m"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["mi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["ml"] = { gen_p = "i" },
["mow"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "lengthened" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y" },
["msz"] = { gen_p = "y" },
["n"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["nan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ni"] = { dat_s = "", gen_s = "" },
["nni"] = { gen_p = "" },
["nod"] = { gen_p = "" },
["o"] = { dat_s = "a", gen_p = "a", gen_s = "a", nom_p = "a" },
["od"] = { gen_p = { "", stem = "lengthened" } },
["og"] = { gen_p = { "", stem = "lengthened" } },
["oj"] = { dat_s = "ej", gen_p = "", gen_s = "ej" },
["ok"] = { gen_p = "" },
["omn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["oni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["osz"] = { gen_p = { "", "y" } },
["otw"] = { gen_p = { "", stem = "inserted_e" } },
["ow"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["oźb"] = { gen_p = { "", stem = "lengthened" } },
["oźn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["p"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["pi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["pl"] = { gen_p = "i" },
["pn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["pow"] = { voc_s = "a" },
["r"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["raż"] = { gen_p = "y" },
["ri"] = { gen_p = "i" },
["rl"] = { gen_p = "i" },
["rni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["rol"] = { gen_p = "i" },
["rz"] = { dat_s = "y", nom_p = "e" },
["rzn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["rąż"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["rł"] = { gen_p = "ych" },
["s"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["sc"] = { dat_s = "e", gen_p = { "", stem = "inserted_e" } },
["si"] = { dat_s = "", gen_p = { { "", stem = "final_soft" }, { "", note = "rare" } }, gen_s = "", voc_s = "u" },
["skr"] = { gen_p = { "", stem = "inserted_ie" } },
["sl"] = { gen_p = "i" },
["sm"] = { dat_s = "ie" },
["sn"] = { gen_p = "ych" },
["sz"] = { dat_s = "y", nom_p = "e" },
["szw"] = { gen_p = { "", stem = "inserted_e" } },
["sł"] = { gen_p = { "", stem = "inserted_e" } },
["t"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["tel"] = { gen_p = "i" },
["ti"] = { gen_p = "i" },
["tl"] = { gen_p = "i" },
["tn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["tni"] = { gen_p = "" },
["tod"] = { gen_p = "" },
["tł"] = { gen_p = { "", stem = "inserted_e" } },
["u"] = { dat_s = "i", gen_p = "i", gen_s = { "i", "y" }, nom_p = "y" },
["uj"] = { gen_p = "" },
["uk"] = { gen_p = "" },
["uni"] = { gen_p = { { "", stem = "final_soft" }, { "", note = "rare" } }, voc_s = "u" },
["uzd"] = { dat_s = { "e", stem = "palatal" } },
["w"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["wan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["wi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["wl"] = { gen_p = "i" },
["wn"] = { gen_p = { "", stem = "inserted_ie" } },
["wni"] = { gen_p = "" },
["wol"] = { gen_p = "i" },
["wor"] = { gen_p = { "", stem = "lengthened" } },
["wsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["yj"] = { gen_p = "" },
["yk"] = { gen_p = "" },
["yni"] = { gen_p = { "", stem = "final_soft" } },
["z"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["zd"] = { dat_s = { "e", stem = "fronted+palatal" } },
["zdr"] = { gen_p = { "", stem = "inserted_e" } },
["zi"] = { dat_s = "", gen_p = { "", { "", stem = "final_soft" } }, gen_s = "" },
["zl"] = { gen_p = "i" },
["zm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["zni"] = { gen_p = "" },
["zon"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["zz"] = { dat_s = "y", nom_p = "e" },
["ój"] = { gen_p = "" },
["ók"] = { gen_p = "" },
["ąc"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["ąk"] = { gen_p = "" },
["ąt"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ęcz"] = { gen_p = "" },
["ęk"] = { gen_p = "" },
["ępi"] = { dat_s = "", gen_p = "", gen_s = "" },
["ęż"] = { gen_p = "y" },
["ł"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["łbi"] = { dat_s = "", gen_p = "", gen_s = "" },
["łob"] = { gen_p = { "", stem = "lengthened" } },
["ńsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["ści"] = { voc_s = { "o", "u" } },
["śni"] = { gen_p = "" },
["źn"] = { gen_p = "ych" },
["źni"] = { gen_p = "" },
["ż"] = { dat_s = "y", gen_p = "", gen_s = "y", nom_p = "e" },
["żi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["żn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["żni"] = { gen_p = "" },
["żon"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
},
},
["f common sg i"] = {
copies = { acc_p = "nom_p", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = { "ę", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, depr_p = {}, gen_p = "i", gen_s = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "ą", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["an"] = { acc_s = { "ą", stem = "palatal" } },
["can"] = { acc_s = { "ę", stem = "palatal" } },
["on"] = { acc_s = { "", stem = "palatal" }, dat_p = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["r"] = { acc_s = "i", dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
["san"] = { acc_s = { "ę", stem = "palatal" } },
["t"] = { acc_s = "i", dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
},
},
["f given sg "] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "", voc_s = "" },
},
},
["f given sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["aj"] = { gen_p = "", voc_s = { "o", "u" } },
["ak"] = { gen_p = "" },
["bi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["c"] = { nom_p = "e" },
["ci"] = { gen_p = { "", { "", stem = "final_soft" } } },
["di"] = { dat_s = "i", gen_p = "i", gen_s = "i", voc_s = "o" },
["e"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["fi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["g"] = { gen_s = "i", nom_p = "i" },
["gi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["i"] = { dat_s = "", gen_p = { { "", stem = "final_soft" }, { "", note = "rare" } }, gen_s = "", nom_p = "e", voc_s = "u" },
["ik"] = { gen_p = "" },
["j"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["k"] = { gen_p = { "", stem = "inserted_e" }, gen_s = "i", nom_p = "i" },
["ki"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["l"] = { dat_s = "i", gen_p = { "", "i" }, gen_s = "i", nom_p = "e", voc_s = { "o", "u" } },
["li"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["mi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["nc"] = { dat_s = "y" },
["nul"] = { gen_p = "", voc_s = "u" },
["pi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["ri"] = { dat_s = "i", gen_p = "i", gen_s = "i", voc_s = "o" },
["sz"] = { dat_s = "y", nom_p = "e" },
["ti"] = { dat_s = "i", gen_p = "i", gen_s = "i", voc_s = "o" },
["wi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["wł"] = { gen_p = { "", stem = "inserted_e" } },
["yk"] = { gen_p = "" },
["zi"] = { gen_p = { "", { "", stem = "final_soft" } } },
["ż"] = { dat_s = "y", nom_p = "e" },
},
},
["f given sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = { "", stem = "palatal" }, depr_p = {}, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["f place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", loc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = { "", stem = "soft" }, depr_p = {}, gen_p = { "", stem = "soft" }, gen_s = { "", stem = "soft" }, ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "e" },
["D"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["L"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-i" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, nom_p = { "", "-e" } },
["ać"] = { nom_p = { "", stem = "soft" } },
["e"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["eś"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "", stem = "reduced+soft" }, gen_p = { "", stem = "reduced+soft" }, gen_s = { "", stem = "reduced+soft" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "ą", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, nom_p = { { "", stem = "reduced+soft" }, { "e", stem = "reduced" } } },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["o"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["s"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["w"] = { dat_p = { "om", stem = "reduced+palatal" }, dat_s = { "", stem = "reduced+palatal" }, gen_p = { "", stem = "reduced+palatal" }, gen_s = { "", stem = "reduced+palatal" }, ins_p = { "ami", stem = "reduced+palatal" }, ins_s = { "ą", stem = "reduced+palatal" }, loc_p = { "ach", stem = "reduced+palatal" }, nom_p = { "e", stem = "reduced+palatal" } },
["z"] = { dat_s = "y", gen_p = "y", gen_s = "y" },
["ść"] = { nom_p = { "", stem = "soft" } },
["ż"] = { dat_s = "y", gen_p = "y", gen_s = "y" },
},
},
["f place sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "e", voc_s = "o" },
["ak"] = { gen_p = "" },
["al"] = { gen_p = { "", "i" } },
["ani"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["ask"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["asn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["aw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["awi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["b"] = { nom_p = "y" },
["bn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["c"] = { dat_s = "y" },
["ck"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["cz"] = { gen_p = { "", "y" } },
["czn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["d"] = { nom_p = "y" },
["di"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["dn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["dw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["e"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["ej"] = { gen_p = "" },
["ek"] = { gen_p = "" },
["el"] = { gen_p = { "", "i" } },
["eni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["enn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ew"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ewn"] = { acc_s = { "ą", "ę" }, dat_p = { "om", "ym" }, dat_s = { "ej", { "e", stem = "palatal" } }, gen_p = { "", "ych" }, gen_s = { "ej", "y" }, ins_p = { "ami", "ymi" }, loc_p = { "ach", "ych" }, nom_p = { "e", "y" }, voc_s = { "a", "o" } },
["ez"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["eśn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["f"] = { nom_p = "y" },
["g"] = { gen_s = "i", nom_p = "i" },
["gi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["gol"] = { gen_p = { "", "i" } },
["h"] = { nom_p = "y" },
["i"] = { dat_s = "", gen_s = "" },
["ibi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["iel"] = { gen_p = "i" },
["ik"] = { gen_p = "" },
["ini"] = { gen_p = { "", { "", stem = "final_soft" } } },
["iw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["iz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["j"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["k"] = { gen_p = { "", stem = "inserted_e" }, gen_s = "i", nom_p = "i" },
["kol"] = { gen_p = { "", "i" } },
["kw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["li"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["ln"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["lsk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["lw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["lz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["m"] = { nom_p = "y" },
["mbi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["mż"] = { gen_p = "y" },
["n"] = { nom_p = "y" },
["ob"] = { gen_p = { "", stem = "lengthened" } },
["od"] = { gen_p = { "", stem = "lengthened" } },
["odz"] = { gen_p = "y" },
["og"] = { gen_p = { "", stem = "lengthened" } },
["ojn"] = { gen_p = "ych" },
["omn"] = { acc_s = { "ą", "ę" }, dat_p = { "om", "ym" }, dat_s = { "ej", { "e", stem = "palatal" } }, gen_p = { "", "ych" }, gen_s = { "ej", "y" }, ins_p = { "ami", "ymi" }, loc_p = { "ach", "ych" }, nom_p = { "e", "y" }, voc_s = { "a", "o" } },
["oni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["opn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["osz"] = { gen_p = { "", "y" } },
["oz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["p"] = { nom_p = "y" },
["pcz"] = { gen_p = "y" },
["prz"] = { gen_p = { "", "y" } },
["r"] = { nom_p = "y" },
["rcz"] = { gen_p = "" },
["ri"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["rni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["rw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["rz"] = { gen_p = "y" },
["rł"] = { gen_p = { "", stem = "inserted_e" } },
["s"] = { nom_p = "y" },
["sk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["sn"] = { gen_p = { "", stem = "inserted_e" } },
["sol"] = { gen_p = { "", "i" } },
["szn"] = { gen_p = { "", stem = "inserted_e" } },
["t"] = { nom_p = "y" },
["tcz"] = { gen_p = "y" },
["ti"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["tn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["tok"] = { gen_p = "" },
["u"] = { dat_s = "i", gen_p = "i", gen_s = { "i", "y" }, nom_p = "y" },
["udz"] = { gen_p = { "", "y" } },
["uj"] = { gen_p = "" },
["usk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["uz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["w"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["wcz"] = { gen_p = "y" },
["wn"] = { gen_p = { "", stem = "inserted_ie" } },
["yj"] = { gen_p = "" },
["yk"] = { gen_p = "" },
["yni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["yst"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["z"] = { dat_s = "y" },
["zi"] = { gen_p = { "", { "", stem = "final_soft" } } },
["zw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ąc"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["ąck"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ąk"] = { gen_p = "" },
["ąsk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ęcz"] = { gen_p = "" },
["ędz"] = { gen_p = { "", "y" } },
["ęk"] = { gen_p = "" },
["ł"] = { nom_p = "y" },
["źn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ż"] = { dat_s = "y" },
["żn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
},
},
["f place sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = { "", stem = "palatal" }, depr_p = {}, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["r"] = { dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
},
},
["f proper sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["C"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-a" }, ins_p = { "", "-ami" }, ins_s = { "", "-iem" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-i" }, voc_s = { "", "-u" } },
["EP"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["F"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["M"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["N"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["OK"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-iem" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-i" }, voc_s = { "", "-u" } },
["OP"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["PR"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ze" }, nom_p = { "", "-y" }, voc_s = { "", "-ze" } },
["S"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["Z"] = { dat_p = { "", "-etom" }, dat_s = { "", "-etowi" }, gen_p = { "", "-etów" }, gen_s = { "", "-etu" }, ins_p = { "", "-etami" }, ins_s = { "", "-etem" }, loc_p = { "", "-etach" }, loc_s = { "", "-ecie" }, nom_p = { "", "-ety" }, voc_s = { "", "-ecie" } },
},
},
["f proper sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["c"] = { dat_s = "y", gen_s = "y", nom_p = "e" },
["d"] = { gen_s = "y" },
["e"] = { dat_s = "i", gen_p = "i", nom_p = "e" },
["g"] = { nom_p = "i" },
["h"] = { gen_s = "y" },
["i"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, nom_p = "e" },
["j"] = { nom_p = "e" },
["k"] = { gen_p = { "", stem = "inserted_e" }, nom_p = "i" },
["n"] = { gen_s = "y" },
["r"] = { gen_s = "y" },
["ri"] = { gen_p = "i" },
["t"] = { gen_s = "y" },
["z"] = { gen_s = "y" },
},
},
["f surname sg "] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", depr_p = {}, gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
},
},
["f surname sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ą", dat_p = "im", dat_s = "iej", depr_p = {}, gen_p = "ich", gen_s = "iej", ins_p = "imi", ins_s = "ą", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["adł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ajn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ak"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["an"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["awn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["azł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["b"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["bk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["c"] = { acc_s = "ę", dat_p = "om", dat_s = "y", gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["cz"] = { dat_s = "y", nom_p = "e" },
["d"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["dk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["dni"] = { acc_s = "ą", dat_p = "m", dat_s = "ej", gen_p = "ch", gen_s = "ej", ins_p = "mi", loc_p = "ch", voc_s = "a" },
["dz"] = { dat_s = "y", nom_p = "e" },
["dzk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["ek"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["en"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["esk"] = { dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i" },
["f"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["fk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["g"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["gł"] = { acc_s = "ą", gen_s = "ej", nom_p = "e", voc_s = "a" },
["h"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["hn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["i"] = { acc_s = "ę", dat_p = "om", dat_s = "", gen_p = "", gen_s = "", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["ian"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ik"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["in"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["izn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["j"] = { acc_s = "ę", dat_p = "om", gen_p = "", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["jew"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["jk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["jn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["kat"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["l"] = { acc_s = "ę", dat_p = "om", dat_s = "i", gen_p = { "", "i" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["lan"] = { acc_s = "ą", gen_s = "ej", nom_p = "e", voc_s = "a" },
["lk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["m"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["mk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["n"] = { dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["nk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["od"] = { gen_p = { "", stem = "lengthened" } },
["ok"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["on"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["osk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["osn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ow"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["own"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["p"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["pi"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["pk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["r"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["rk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["rz"] = { dat_s = "y", nom_p = "e" },
["s"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["sm"] = { dat_s = "ie" },
["sz"] = { dat_s = "y", nom_p = "e" },
["sł"] = { gen_p = { "", stem = "inserted_e" } },
["t"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["tk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["uk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["un"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["w"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["wan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["wi"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["wk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["wn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_ie" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["x"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "spelled+palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["y"] = { acc_s = "ę", dat_p = "om", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["yk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["yn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["yzm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["z"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["zk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["zm"] = { dat_s = "ie" },
["zł"] = { gen_p = "ych" },
["ąk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ćk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ęk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ł"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["łk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["łn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ńk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["śk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ż"] = { acc_s = "ę", dat_p = "om", dat_s = "y", gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["żk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
},
},
["f surname sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "i", depr_p = {}, gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
["m"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["n"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["s"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["z"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["m-pr common pl "] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = {}, dat_s = {}, depr_p = {}, gen_p = {}, gen_s = {}, ins_p = { "m", stem = "fronted" }, ins_s = {}, loc_p = {}, loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["m-pr common pl e"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = { "dziadków", stem = "irregular" }, gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["m-pr common pl i"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "zym", dat_s = {}, depr_p = {}, gen_p = "zych", gen_s = {}, ins_p = "zymi", ins_s = {}, loc_p = "zych", loc_s = {}, nom_s = {}, voc_s = {} },
["n"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["o"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", loc_p = "ich" },
},
},
["m-pr common pl y"] = {
copies = { },
rules = {
[""] = { acc_p = "ów", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "y", voc_s = {} },
},
},
["m-pr common sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = { "y", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["ad"] = { nom_p = { "", stem = "palatal" } },
["al"] = { gen_p = { "i", "ów" } },
["ard"] = { nom_p = { "", stem = "palatal" } },
["art"] = { nom_p = { { "", stem = "palatal" }, "y" } },
["ast"] = { nom_p = "owie" },
["az"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = { "", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["aść"] = { dat_s = { "", stem = "soft" }, gen_s = { "", stem = "soft" }, ins_s = "ą", nom_p = { "e", "owie" } },
["bel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["bl"] = { gen_p = { "i", "ów" } },
["bp"] = { nom_p = { "", stem = "palatal" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "y", stem = "reduced" }, voc_s = { { "u", stem = "reduced" }, { "ze", stem = "reduced" } } },
["cel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["cik"] = { nom_p = "owie" },
["cz"] = { gen_p = { "y", "ów" } },
["dan"] = { nom_p = "owie" },
["del"] = { gen_p = { "i", "ów", { "i", stem = "reduced" }, { "ów", stem = "reduced" } } },
["dr"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["dur"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["dyw"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["e"] = { dat_p = { "", "m" }, dat_s = { "", "mu" }, depr_p = { "", "s" }, gen_p = { "", "ch" }, gen_s = { "", "go" }, ins_p = { "", "mi" }, ins_s = { "", "m" }, loc_p = { "", "ch" }, loc_s = { "", "m" }, nom_p = { "", "s" }, voc_s = "" },
["eb"] = { nom_p = "owie" },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["ep"] = { nom_p = "owie" },
["eus"] = { nom_p = "owie" },
["eł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "owie", stem = "reduced" }, voc_s = { "e", stem = "reduced+palatal" } },
["eń"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["eś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["f"] = { nom_p = "owie" },
["fel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["g"] = { depr_p = "i", ins_s = "iem", loc_s = "u", nom_p = { { "y", stem = "palatal" }, "owie" }, voc_s = "u" },
["ger"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["gol"] = { gen_p = "ów" },
["h"] = { loc_s = "u", nom_p = "owie", voc_s = "u" },
["han"] = { nom_p = "owie" },
["hot"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["iad"] = { nom_p = "owie" },
["ib"] = { nom_p = "owie" },
["ic"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["icz"] = { gen_p = "ów" },
["id"] = { nom_p = { "", stem = "palatal" } },
["ieć"] = { loc_s = "u", voc_s = "u" },
["ień"] = { nom_p = { "e", stem = "reduced" } },
["iks"] = { nom_p = "owie" },
["il"] = { gen_p = { "i", "ów" } },
["ior"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["ir"] = { nom_p = "owie" },
["iz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie", voc_s = { "e", stem = "palatal" } },
["j"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["jas"] = { nom_p = "owie" },
["jk"] = { nom_p = "owie" },
["jor"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["k"] = { depr_p = "i", ins_s = "iem", loc_s = "u", voc_s = "u" },
["kok"] = { nom_p = "owie" },
["kon"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["kup"] = { nom_p = { "", stem = "palatal" } },
["l"] = { depr_p = "e", gen_p = "i", loc_s = "u", nom_p = "e", voc_s = "u" },
["lan"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["lar"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["len"] = { nom_p = "owie" },
["leń"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = { { "", stem = "soft" }, "ów" }, gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", voc_s = "u" },
["ll"] = { gen_p = "ów" },
["lub"] = { nom_p = { "", stem = "palatal" } },
["m"] = { nom_p = "owie" },
["mp"] = { nom_p = "owie" },
["n"] = { nom_p = { "", stem = "palatal" } },
["nc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["nel"] = { gen_p = { "i", "ów" } },
["ng"] = { nom_p = "owie" },
["nin"] = { dat_p = { "om", stem = "truncated" }, depr_p = { "y", stem = "truncated" }, gen_p = { "", stem = "truncated" }, ins_p = { "ami", stem = "truncated" }, loc_p = { "ach", stem = "truncated" }, nom_p = { "e", stem = "truncated+palatal" } },
["nuk"] = { nom_p = "owie" },
["nuś"] = { nom_p = { "e", "owie" } },
["ob"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ont"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["op"] = { nom_p = { "", stem = "palatal" } },
["ord"] = { nom_p = "owie" },
["oz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["oń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["pan"] = { dat_s = "u", loc_s = "u", nom_p = "owie" },
["pel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["pis"] = { nom_p = "owie" },
["rab"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ral"] = { gen_p = "i" },
["rb"] = { nom_p = "owie" },
["rel"] = { gen_p = { "i", "ów" } },
["rk"] = { nom_p = "owie" },
["rl"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["ruk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["rz"] = { gen_p = { "y", { "ów", note = "rare" } } },
["s"] = { nom_p = { "", stem = "palatal" } },
["san"] = { nom_p = "owie" },
["sik"] = { nom_p = "owie" },
["sul"] = { nom_p = { "e", "owie" } },
["sz"] = { gen_p = { "y", "ów" } },
["t"] = { nom_p = { "", stem = "palatal" } },
["tr"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["trz"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["tur"] = { nom_p = "owie" },
["u"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["uaw"] = { nom_p = { "", stem = "palatal" } },
["uc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["ud"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["ul"] = { gen_p = "ów" },
["uz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = { "", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["wed"] = { nom_p = { "", stem = "palatal" } },
["wun"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["wój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" }, voc_s = { "u", stem = "shortened" } },
["wór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, voc_s = { "e", stem = "shortened+palatal" } },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, depr_p = { "y", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "a", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "owie", stem = "spelled" }, voc_s = { "e", stem = "spelled+palatal" } },
["y"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["yc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["yd"] = { nom_p = { "", stem = "palatal" } },
["yl"] = { gen_p = { "i", "ów" } },
["yr"] = { nom_p = "owie" },
["yz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie", voc_s = { "e", stem = "palatal" } },
["z"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["zcz"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["zes"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["zeń"] = { nom_p = { "owie", stem = "reduced" } },
["zuk"] = { nom_p = "owie" },
["zym"] = { nom_p = { "", stem = "palatal" } },
["é"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["ób"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { { "", stem = "shortened+palatal" }, { "owie", stem = "shortened" } }, voc_s = { "e", stem = "shortened+palatal" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "e", stem = "shortened+palatal" } },
["ódz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "u", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "u", stem = "shortened" } },
["ójt"] = { nom_p = "owie" },
["ól"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["ór"] = { nom_p = "owie" },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "e", stem = "shortened+palatal" } },
["ół"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, voc_s = { "e", stem = "shortened+palatal" } },
["ąb"] = { nom_p = { "owie", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", voc_s = "u" },
["ć"] = { depr_p = "e", gen_p = { "", stem = "soft" }, loc_s = { "", stem = "soft" }, nom_p = "e", voc_s = { "", stem = "soft" } },
["ę"] = { dat_p = "tom", dat_s = { "ciu", note = "dated" }, depr_p = "ta", gen_p = { "t", stem = "lengthened" }, gen_s = { "cia", note = "dated" }, ins_p = "tami", ins_s = { "ciem", note = "dated" }, loc_p = "tach", loc_s = { "ciu", note = "dated" }, nom_p = "ta", voc_s = "" },
["ł"] = { nom_p = "owie" },
["łuk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["łup"] = { nom_p = "owie" },
["ń"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["ś"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["ź"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" }, voc_s = "u" },
["ż"] = { depr_p = "e", gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e", voc_s = "u" },
["żer"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["żeń"] = { nom_p = { "e", stem = "reduced" } },
},
},
["m-pr common sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = { "", stem = "palatal" }, voc_s = "o" },
["ak"] = { nom_p = { "y", stem = "palatal" } },
["b"] = { nom_p = "owie" },
["bi"] = { ins_s = { "ą", { "m", note = "dated" } } },
["c"] = { dat_s = "y", depr_p = "e", nom_p = "y" },
["d"] = { nom_p = "owie" },
["ek"] = { nom_p = { "y", stem = "palatal" } },
["f"] = { nom_p = "owie" },
["g"] = { depr_p = "i", gen_s = "i", nom_p = { "y", stem = "palatal" } },
["h"] = { nom_p = "owie" },
["i"] = { acc_s = { "ego", "ę" }, dat_s = { "", "emu" }, depr_p = "e", gen_s = { "", "ego" }, nom_p = "owie" },
["id"] = { nom_p = { "", stem = "palatal" } },
["j"] = { depr_p = "e", nom_p = "e" },
["k"] = { depr_p = "i", gen_s = "i", nom_p = "owie" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i", nom_p = "e" },
["m"] = { nom_p = "owie" },
["ok"] = { nom_p = { "y", stem = "palatal" } },
["p"] = { nom_p = "owie" },
["ped"] = { nom_p = { "", stem = "palatal" } },
["r"] = { nom_p = { "y", stem = "palatal" } },
["ri"] = { acc_s = "ę", dat_s = "i", gen_s = "i" },
["rz"] = { dat_s = { "e", stem = "palatal" }, depr_p = "y" },
["usz"] = { nom_p = "e" },
["uz"] = { dat_s = { "e", stem = "palatal" }, depr_p = "y" },
["w"] = { nom_p = "owie" },
["yd"] = { nom_p = { "", stem = "palatal" } },
["yk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["z"] = { dat_s = "y", depr_p = "e", nom_p = "owie" },
["ór"] = { nom_p = "owie" },
["ł"] = { nom_p = "owie" },
["łk"] = { gen_p = { { "", stem = "inserted_e" }, "ów" } },
["ż"] = { dat_s = "y", depr_p = "e", nom_p = "owie" },
},
},
["m-pr common sg e"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "e", dat_s = "e", depr_p = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e", voc_s = "e" },
},
},
["m-pr common sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = "ie", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = { "y", stem = "palatal" } },
["ac"] = { nom_p = "i" },
["as"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["bl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["bol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["c"] = { nom_p = "iowie" },
["d"] = { nom_p = "iowie" },
["dl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["ec"] = { nom_p = "i" },
["el"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["eśc"] = { nom_p = "i" },
["gl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["hl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["hol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["i"] = { dat_s = "jemu", gen_s = "jego" },
["ic"] = { nom_p = "i" },
["iol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["is"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["iśc"] = { nom_p = "i" },
["kal"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["kol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["nc"] = { nom_p = "i" },
["ns"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["oc"] = { nom_p = "i" },
["os"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["pc"] = { nom_p = "i" },
["pl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["ps"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["rc"] = { nom_p = "i" },
["rl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["s"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, depr_p = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["tn"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["u"] = { dat_s = "jemu", gen_s = "jego", nom_p = "i" },
["uc"] = { nom_p = "i" },
["ul"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["us"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["wl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["wol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["y"] = { dat_s = "jemu", gen_s = "jego", nom_p = "i" },
["yc"] = { nom_p = "i" },
["yl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["ys"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["zol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["ęs"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["śl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["źl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["źn"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["ż"] = { nom_p = "iowie" },
["żl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
},
},
["m-pr common sg o"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "a", dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie", voc_s = "u" },
["d"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["er"] = { nom_p = "o" },
["g"] = { depr_p = "i", ins_s = "iem" },
["gol"] = { acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, depr_p = { "e", "o" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", "u" }, nom_p = { "o", "owie" } },
["h"] = { voc_s = "o" },
["k"] = { depr_p = "i", ins_s = "iem" },
["m"] = { voc_s = "o" },
["ol"] = { voc_s = "o" },
["p"] = { voc_s = "o" },
["r"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["s"] = { voc_s = "o" },
["z"] = { voc_s = "o" },
["ł"] = { acc_s = "ę", dat_s = { "e", stem = "palatal" }, depr_p = { "a", "y" }, gen_s = "y", ins_s = "ą", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
},
},
["m-pr common sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = { "", stem = "palatal" } },
["acz"] = { nom_p = "y" },
["arz"] = { nom_p = "y" },
["asz"] = { nom_p = "owie" },
["aż"] = { nom_p = "y" },
["bcz"] = { nom_p = "y" },
["brz"] = { nom_p = "y" },
["c"] = { nom_p = "y" },
["drz"] = { nom_p = "y" },
["dzn"] = { nom_p = "i" },
["ecz"] = { nom_p = "y" },
["eż"] = { nom_p = "y" },
["h"] = { nom_p = { "i", stem = "virile" } },
["irz"] = { nom_p = "y" },
["lcz"] = { nom_p = "y" },
["mcz"] = { nom_p = "y" },
["ncz"] = { nom_p = "y" },
["ocz"] = { nom_p = "y" },
["on"] = { nom_p = { "", stem = "fronted+palatal" } },
["oż"] = { nom_p = "y" },
["pcz"] = { nom_p = "y" },
["r"] = { nom_p = { "y", stem = "palatal" } },
["rcz"] = { nom_p = "y" },
["ron"] = { nom_p = { "", stem = "palatal" } },
["rz"] = { nom_p = "owie" },
["soł"] = { nom_p = { "i", stem = "fronted+palatal" } },
["sz"] = { nom_p = { "i", stem = "virile" } },
["tcz"] = { nom_p = "y" },
["ucz"] = { nom_p = "y" },
["udz"] = { nom_p = "y" },
["urz"] = { nom_p = "y" },
["usz"] = { nom_p = "owie" },
["uż"] = { nom_p = "y" },
["ycz"] = { nom_p = "y" },
["ydz"] = { nom_p = "y" },
["yż"] = { nom_p = "y" },
["z"] = { nom_p = { "owie", "y" } },
["ącz"] = { nom_p = "y" },
["ęcz"] = { nom_p = "y" },
["ęż"] = { nom_p = "y" },
["ł"] = { nom_p = { "i", stem = "palatal" } },
["łcz"] = { nom_p = "y" },
["łon"] = { nom_p = { "", stem = "palatal" } },
["łzł"] = { nom_p = { { "i", stem = "virile" }, { "i", stem = "palatal" } } },
["ńcz"] = { nom_p = "y" },
["źcz"] = { nom_p = "y" },
["ż"] = { nom_p = "owie" },
["żcz"] = { nom_p = "y" },
["żd"] = { nom_p = { "", stem = "palatal", note = "rare" } },
},
},
["m-pr given sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["aak"] = { nom_p = "owie" },
["ad"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["ak"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u" },
["c"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["ck"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["der"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" } },
["dot"] = { nom_p = "owie" },
["e"] = { dat_p = "m", dat_s = "mu", depr_p = "", gen_p = "ch", gen_s = "go", ins_p = "mi", ins_s = "m", loc_p = "ch", loc_s = "m", nom_p = "" },
["eg"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["ew"] = { nom_p = "owie" },
["g"] = { depr_p = "i", ins_s = "iem", loc_s = "u" },
["h"] = { loc_s = "u" },
["ier"] = { nom_p = "owie" },
["ik"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["j"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["jan"] = { nom_p = "owie" },
["k"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["l"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["las"] = { nom_p = "owie" },
["lf"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["n"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["op"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["r"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["ros"] = { nom_p = "owie" },
["s"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ses"] = { nom_p = "owie" },
["st"] = { nom_p = "owie" },
["t"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["tan"] = { nom_p = "owie" },
["u"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ur"] = { nom_p = "owie" },
["van"] = { nom_p = "owie" },
["w"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["wer"] = { nom_p = "owie" },
["weł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "owie", stem = "reduced" } },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, depr_p = { "y", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "a", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "owie", stem = "spelled" } },
["yk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["yp"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["z"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["zor"] = { nom_p = "owie" },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { { "e", stem = "shortened" }, { "owie", stem = "shortened" } } },
["ąd"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["łk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ś"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
},
},
["m-pr given sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i" },
["sz"] = { dat_s = "y", depr_p = "e" },
["u"] = { dat_s = "i", gen_s = { "i", "y" } },
},
},
["m-pr given sg e"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "e", dat_s = "e", depr_p = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e", voc_s = "e" },
},
},
["m-pr given sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "emu", depr_p = "e", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "owie" },
["n"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "owie", stem = "palatal" } },
},
},
["m-pr given sg o"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie", voc_s = "u" },
["at"] = { dat_p = "onom", dat_s = "onowi", depr_p = "ony", gen_p = "onów", gen_s = "ona", ins_p = "onami", ins_s = "onem", loc_p = "onach", loc_s = "onie", nom_p = "onowie", voc_s = { "o", "onie" } },
["c"] = { depr_p = "o", ins_s = "o", voc_s = "o" },
["d"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["e"] = { depr_p = { "a", "o" }, loc_s = "o", voc_s = "o" },
["g"] = { dat_p = { "o", "om" }, dat_s = { "o", "owi" }, depr_p = { "i", "o" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "iem", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", "u" }, nom_p = { "o", "owie" }, voc_s = { "o", "u" } },
["k"] = { depr_p = "i", ins_s = "iem" },
["l"] = { voc_s = "o" },
["n"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["r"] = { voc_s = "o" },
["t"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
},
},
["m-pr given sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "owie" },
["rr"] = { dat_s = { "emu", "y'emu" }, depr_p = { "e", "y'e" }, gen_s = { "ego", "y'ego" }, nom_p = { "owie", "y" } },
},
},
["m-pr proper sg "] = {
copies = { acc_s = "gen_s" },
rules = {
[""] = { acc_p = "ów", dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie", voc_p = "owie", voc_s = "u" },
["ek"] = { acc_p = {}, dat_p = {}, depr_p = {}, gen_p = {}, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
["g"] = { depr_p = "i", ins_s = "iem" },
["k"] = { depr_p = "i", ins_s = "iem" },
["l"] = { depr_p = "e" },
["n"] = { loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["s"] = { loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["sz"] = { nom_p = { "e", "owie" }, voc_p = { "e", "owie" } },
["t"] = { loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["u"] = { depr_p = "", nom_p = "", voc_p = "", voc_s = "" },
["z"] = { depr_p = "e" },
},
},
["m-pr proper sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["g"] = { depr_p = "i", gen_s = "i" },
},
},
["m-pr proper sg e"] = {
copies = { },
rules = {
[""] = { acc_p = "e", acc_s = "e", dat_p = "e", dat_s = "e", depr_p = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e", voc_p = "e", voc_s = "e" },
},
},
["m-pr proper sg o"] = {
copies = { acc_s = "gen_s" },
rules = {
[""] = { acc_p = "o", dat_p = "o", dat_s = "o", depr_p = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o", voc_p = "o", voc_s = "o" },
},
},
["m-pr surname sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ac"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["acz"] = { nom_p = "owie" },
["ai"] = { dat_s = { "emu", "owi" }, gen_s = { "a", "ego" } },
["az"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["b"] = { loc_s = { "e", stem = "palatal" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["cu"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["d"] = { loc_s = { "e", stem = "palatal" } },
["dz"] = { nom_p = "owie" },
["e"] = { dat_p = "", dat_s = "mu", depr_p = "", gen_p = "", gen_s = "go", ins_p = "", ins_s = "m", loc_p = "", loc_s = "m", nom_p = "" },
["eau"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["ecz"] = { nom_p = "owie" },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["el"] = { dat_p = { "om", { "om", stem = "reduced" } }, dat_s = { "owi", { "owi", stem = "reduced" } }, depr_p = { "e", { "e", stem = "reduced" } }, gen_p = { "ów", { "ów", stem = "reduced" } }, gen_s = { "a", { "a", stem = "reduced" } }, ins_p = { "ami", { "ami", stem = "reduced" } }, ins_s = { "em", { "em", stem = "reduced" } }, loc_p = { "ach", { "ach", stem = "reduced" } }, loc_s = { "u", { "u", stem = "reduced" } }, nom_p = { "owie", { "owie", stem = "reduced" } } },
["eu"] = { dat_p = { "", "m" }, dat_s = { "", "mu" }, depr_p = "", gen_p = { "", "ch" }, gen_s = { "", "go" }, ins_p = { "", "mi" }, ins_s = { "", "m" }, loc_p = { "", "ch" }, nom_p = "" },
["ez"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["eł"] = { dat_p = { "om", { "om", stem = "reduced" } }, dat_s = { "owi", { "owi", stem = "reduced" } }, depr_p = { "y", { "y", stem = "reduced" } }, gen_p = { "ów", { "ów", stem = "reduced" } }, gen_s = { "a", { "a", stem = "reduced" } }, ins_p = { "ami", { "ami", stem = "reduced" } }, ins_s = { "em", { "em", stem = "reduced" } }, loc_p = { "ach", { "ach", stem = "reduced" } }, loc_s = { { "e", stem = "palatal" }, { "e", stem = "reduced+palatal" } }, nom_p = { "owie", { "owie", stem = "reduced" } } },
["f"] = { loc_s = { "e", stem = "palatal" } },
["g"] = { depr_p = "i", ins_s = "iem" },
["gh"] = { depr_p = "i" },
["i"] = { dat_p = { "m", "om" }, dat_s = "", depr_p = "e", gen_p = { "ch", "ów" }, gen_s = "", ins_p = { "ami", "mi" }, ins_s = { "em", "m" }, loc_p = { "ach", "ch" }, loc_s = { "m", "u" } },
["ic"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["iel"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ieu"] = { loc_s = { "", "m" } },
["ieł"] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["ii"] = { dat_p = { "", "m" }, depr_p = "", gen_p = { "", "ch" }, ins_p = { "", "mi" }, ins_s = { "", "m" }, loc_p = { "", "ch" }, loc_s = { "", "m" }, nom_p = "" },
["iz"] = { nom_p = "owie" },
["j"] = { depr_p = "e" },
["jc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["k"] = { depr_p = "i", ins_s = "iem" },
["kój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["l"] = { depr_p = "e" },
["lc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["lcz"] = { nom_p = "owie" },
["lz"] = { nom_p = "owie" },
["m"] = { loc_s = { "e", stem = "palatal" } },
["n"] = { loc_s = { "e", stem = "palatal" } },
["nc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ncz"] = { nom_p = "owie" },
["nz"] = { nom_p = "owie" },
["oc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ocz"] = { nom_p = "owie" },
["oe"] = { dat_s = "", gen_s = "", ins_s = "", loc_s = "" },
["oz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["p"] = { loc_s = { "e", stem = "palatal" } },
["pc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["que"] = { dat_p = "'om", gen_p = "'ów", ins_p = "'ami", loc_p = "'ach", nom_p = "'owie" },
["r"] = { loc_s = { "e", stem = "palatal" } },
["rc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["rcz"] = { nom_p = "owie" },
["reć"] = { dat_p = { { "om", stem = "reduced" }, "om" }, dat_s = { { "owi", stem = "reduced" }, "owi" }, depr_p = { { "e", stem = "reduced" }, "e" }, gen_p = { { "ów", stem = "reduced" }, "ów" }, gen_s = { { "a", stem = "reduced" }, "a" }, ins_p = { { "ami", stem = "reduced" }, "ami" }, ins_s = { { "em", stem = "reduced" }, "em" }, loc_p = { { "ach", stem = "reduced" }, "ach" }, loc_s = { { "u", stem = "reduced" }, "u" }, nom_p = { { "owie", stem = "reduced" }, "owie" } },
["rp"] = { dat_p = { { "om", stem = "palatal" }, "om" }, dat_s = { { "owi", stem = "palatal" }, "owi" }, depr_p = { { "e", stem = "palatal" }, "y" }, gen_p = { { "ów", stem = "palatal" }, "ów" }, gen_s = { "a", { "a", stem = "palatal" } }, ins_p = { "ami", { "ami", stem = "palatal" } }, ins_s = { "em", { "em", stem = "palatal" } }, loc_p = { "ach", { "ach", stem = "palatal" } }, loc_s = { { "e", stem = "palatal" }, { "u", stem = "palatal" } }, nom_p = { { "owie", stem = "palatal" }, "owie" } },
["rz"] = { nom_p = "owie" },
["rót"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["s"] = { loc_s = { "e", stem = "palatal" } },
["t"] = { loc_s = { "e", stem = "palatal" } },
["tz"] = { nom_p = "owie" },
["u"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, depr_p = { "", "y" }, gen_p = { "", "ów" }, gen_s = { "", "a" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = "", nom_p = { "", "owie" } },
["uc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ucz"] = { nom_p = "owie" },
["ue"] = { dat_s = "'owi", gen_s = "'a", loc_s = "'u" },
["ues"] = { dat_p = "'om", dat_s = "'owi", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", loc_p = "'ach", loc_s = "'u", nom_p = "'owie" },
["ugh"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["w"] = { loc_s = { "e", stem = "palatal" } },
["wc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["wec"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["x"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["y"] = { depr_p = "e" },
["yc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ycz"] = { nom_p = "owie" },
["yz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["z"] = { depr_p = "e", nom_p = { "e", "owie" } },
["zcz"] = { nom_p = "owie" },
["ób"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["ój"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "e", stem = "shortened" }, "e" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "u", stem = "shortened" }, "u" }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ól"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "e", stem = "shortened" }, "e" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "u", stem = "shortened" }, "u" }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ór"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ót"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["óz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["ół"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ąc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ącz"] = { nom_p = "owie" },
["ąz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["ć"] = { depr_p = "e" },
["ęc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ęcz"] = { nom_p = "owie" },
["ł"] = { loc_s = { "e", stem = "palatal" } },
["łc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["łcz"] = { nom_p = "owie" },
["ń"] = { depr_p = "e" },
["ńcz"] = { nom_p = "owie" },
["ś"] = { depr_p = "e", nom_p = { "e", "owie" } },
["ź"] = { depr_p = "e" },
["ż"] = { depr_p = "e" },
},
},
["m-pr surname sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["c"] = { dat_s = "y", depr_p = "e" },
["cz"] = { dat_s = "y", depr_p = "e" },
["dz"] = { dat_s = "y", depr_p = "e" },
["g"] = { depr_p = "i", gen_s = "i" },
["i"] = { dat_s = "", depr_p = "e", gen_s = "" },
["j"] = { depr_p = "e" },
["k"] = { depr_p = "i", gen_s = "i" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i" },
["pi"] = { dat_s = "i", gen_s = "i" },
["ri"] = { dat_s = "i", gen_s = "i" },
["rz"] = { dat_s = "y", depr_p = "e" },
["sm"] = { dat_s = "ie" },
["sz"] = { dat_s = "y", depr_p = "e" },
["wi"] = { dat_s = "i", gen_s = "i" },
["x"] = { dat_s = { "e", stem = "spelled+palatal" } },
["y"] = { dat_s = "i", depr_p = "e", gen_s = "i" },
["yzm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["zm"] = { dat_s = "ie" },
["ż"] = { dat_s = "y", depr_p = "e" },
},
},
["m-pr surname sg e"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "om", dat_s = "emu", depr_p = "e", gen_p = "ów", gen_s = "ego", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "em", nom_p = "owie", voc_s = "e" },
["ak"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "i", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "iem", loc_p = "e'ach", loc_s = "e'u", nom_p = "e'owie", voc_s = "e'u" },
["ant"] = { dat_p = "om", dat_s = "emu", depr_p = "e", gen_p = "ów", gen_s = "ego", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "em", nom_p = "owie", voc_s = "e" },
["bl"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'e", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = "e'u", nom_p = "e'owie", voc_s = "e'u" },
["c"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", nom_p = "e'owie" },
["gn"] = { depr_p = "e'e", loc_s = "e'u", voc_s = "e'u" },
["id"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'owie", voc_s = { "e", stem = "palatal" } },
["ion"] = { depr_p = "e", voc_s = "e" },
["n"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'owie", voc_s = { "e", stem = "palatal" } },
["ow"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = "e", nom_p = "e'owie" },
["r"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'owie", voc_s = { "e", stem = "palatal" } },
["rt"] = { dat_p = "om", dat_s = "emu", depr_p = "e", gen_p = "ów", gen_s = "ego", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "em", nom_p = "owie", voc_s = "e" },
["t"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'owie", voc_s = { "e", stem = "palatal" } },
["v"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", nom_p = "e'owie" },
["yl"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'e", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = "e'u", nom_p = "e'owie", voc_s = "e'u" },
},
},
["m-pr surname sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = "ie", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = { "y", stem = "palatal" } },
["ak"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["c"] = { nom_p = { "i", "iowie" } },
["czk"] = { nom_p = "owie" },
["d"] = { nom_p = { "i", "iowie" } },
["dk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["f"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["g"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["h"] = { nom_p = { "i", "iowie" } },
["hk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["l"] = { dat_s = "emu", depr_p = "e", gen_s = "ego", nom_p = { "i", "owie" } },
["lk"] = { nom_p = "owie" },
["m"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["n"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["ok"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["r"] = { nom_p = { "i", "iowie" } },
["s"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["t"] = { nom_p = { "i", "iowie" } },
["tk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["z"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["śk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
},
},
["m-pr surname sg o"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "i", gen_p = "ów", gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["and"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["b"] = { depr_p = { "o", "y" }, gen_s = { "a", "o", "y" } },
["c"] = { acc_s = "o", dat_s = "o", depr_p = "o", gen_s = "o", ins_s = "o", loc_s = "o" },
["d"] = { depr_p = "y", gen_s = { "a", "y" } },
["ejn"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o", "y" }, ins_p = { "ami", "o" }, ins_s = { "em", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "o", "owie" } },
["ett"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["h"] = { depr_p = "y", gen_s = "y" },
["i"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["ied"] = { acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "o", "owie" } },
["j"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["jd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["l"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["m"] = { depr_p = "y", gen_s = "y" },
["mb"] = { dat_p = { "o", "om" }, gen_p = { "o", "ów" }, ins_p = { "ami", "o" }, loc_p = { "ach", "o" }, nom_p = { "o", "owie" } },
["n"] = { depr_p = "y", gen_s = "y" },
["ng"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "i", "o" }, gen_p = { "o", "ów" }, gen_s = { "a", "i", "o" }, ins_p = { "ami", "o" }, ins_s = { "iem", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o", "u" }, nom_p = { "o", "owie" } },
["nt"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o", "y" }, ins_p = { "ami", "o" }, ins_s = { "em", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "o", "owie" } },
["od"] = { gen_s = { "a", "o" } },
["ott"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["p"] = { depr_p = "y", gen_s = "y" },
["r"] = { depr_p = "y", gen_s = "y" },
["rd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["rr"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["s"] = { depr_p = "y", gen_s = "a" },
["sc"] = { dat_p = "o", gen_p = "o", ins_p = "o", loc_p = "o", nom_p = "o" },
["ss"] = { acc_s = "a", dat_s = "owi", ins_s = "em" },
["t"] = { depr_p = "y", gen_s = "y" },
["ud"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["w"] = { depr_p = { "o", "y" }, gen_s = { "a", "o", "y" } },
["yd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["z"] = { acc_s = { "a", "ę" }, dat_s = { "owi", "y" }, depr_p = "e", gen_s = { "a", "y" }, ins_s = { "em", "ą" }, loc_s = { "u", "y" } },
["zad"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["ł"] = { depr_p = "y", gen_s = "y" },
["łd"] = { gen_s = "y" },
["ńd"] = { gen_s = "y" },
},
},
["m-pr surname sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "owie" },
["art"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["aw"] = { nom_p = "owie" },
["azn"] = { nom_p = { "", stem = "palatal" } },
["azł"] = { nom_p = { "owie", { "i", stem = "palatal" } } },
["er"] = { nom_p = "y" },
["ern"] = { nom_p = "owie" },
["h"] = { nom_p = { "owie", { "i", stem = "virile" } } },
["iad"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["k"] = { dat_s = "iemu", depr_p = "ie", gen_s = "iego", nom_p = { "y", stem = "palatal" } },
["l"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im" },
["n"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["sk"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im" },
["sn"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["st"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["sł"] = { nom_p = { "owie", { "i", stem = "palatal" } } },
["th"] = { dat_s = "y'emu", depr_p = "y'e", gen_s = "y'ego", nom_p = "y" },
["tzk"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im" },
["w"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["yt"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ér"] = { dat_s = "y'emu", depr_p = "y'e", gen_s = "y'ego", nom_p = "y" },
["ąc"] = { nom_p = { "owie", "y" } },
["ł"] = { nom_p = { { "i", stem = "palatal" }, "owie" } },
["źn"] = { nom_p = "owie" },
},
},
["m-anml common sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = "a", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "y" },
["ac"] = { acc_s = "a", dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["az"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["b"] = { loc_s = { "e", stem = "palatal" } },
["bal"] = { gen_p = "i" },
["bel"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["c"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["d"] = { loc_s = { "e", stem = "palatal" } },
["del"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["dz"] = { gen_p = "ów" },
["e"] = { acc_s = "", dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["eet"] = { acc_s = { "", "a" }, gen_s = { "a", "u" } },
["ek"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["ez"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["eł"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["f"] = { loc_s = { "e", stem = "palatal" } },
["g"] = { ins_s = "iem", nom_p = "i" },
["iel"] = { gen_p = "i" },
["iz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["j"] = { nom_p = "e" },
["k"] = { ins_s = "iem", nom_p = "i" },
["l"] = { gen_p = { "i", "ów" }, nom_p = "e" },
["lac"] = { gen_p = "ów" },
["m"] = { loc_s = { "e", stem = "palatal" } },
["mul"] = { gen_p = "i" },
["n"] = { loc_s = { "e", stem = "palatal" } },
["niś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["oll"] = { gen_p = "i" },
["ont"] = { acc_s = { "", "a" }, gen_s = { "a", "u" } },
["oz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["oś"] = { gen_p = { "", stem = "soft" } },
["p"] = { loc_s = { "e", stem = "palatal" } },
["paw"] = { acc_s = { "a", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["r"] = { loc_s = { "e", stem = "palatal" } },
["raś"] = { gen_p = { "", stem = "soft" } },
["rp"] = { acc_s = { "a", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["s"] = { loc_s = { "e", stem = "palatal" } },
["sz"] = { gen_p = { "y", "ów" } },
["t"] = { loc_s = { "e", stem = "palatal" } },
["tat"] = { acc_s = { "", "a" } },
["u"] = { acc_s = "", dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uc"] = { acc_s = "a", dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["uz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["w"] = { loc_s = { "e", stem = "palatal" } },
["x"] = { acc_s = { "a", stem = "spelled" }, dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "a", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "y", stem = "spelled" } },
["y"] = { nom_p = "e" },
["yz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["yś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["z"] = { gen_p = { "y", { "ów", note = "rare" } }, nom_p = "e" },
["zal"] = { gen_p = "i" },
["ób"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ód"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ól"] = { gen_p = { "i", stem = "shortened" } },
["ór"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ów"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { acc_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąb"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąc"] = { acc_s = "a", dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ć"] = { gen_p = { { "", stem = "soft" }, "ów" }, nom_p = "e" },
["ł"] = { loc_s = { "e", stem = "palatal" } },
["łż"] = { gen_p = { "y", "ów" } },
["ń"] = { gen_p = { "", stem = "soft" }, nom_p = "e" },
["ś"] = { nom_p = "e" },
["ź"] = { gen_p = { "", stem = "soft" }, nom_p = "e" },
["ż"] = { nom_p = "e" },
},
},
["m-anml common sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["c"] = { dat_s = "y", nom_p = "e" },
["j"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["k"] = { gen_s = "i", nom_p = "i" },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["o"] = { acc_s = "a", dat_p = "a", dat_s = "a", gen_p = "a", gen_s = "a", ins_p = "a", ins_s = "a", loc_p = "a", nom_p = "a", voc_s = "a" },
},
},
["m-anml common sg e"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "e'om", dat_s = "e'owi", depr_p = {}, gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = "e", nom_p = "e'y" },
},
},
["m-anml common sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "i", dat_s = "i", depr_p = {}, gen_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", loc_s = "i", nom_p = "i" },
["sk"] = { dat_p = "im", dat_s = "iemu", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
},
},
["m-anml common sg o"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "a", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "o" },
["d"] = { acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "o", "y" } },
["g"] = { acc_s = "o", dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["i"] = { voc_s = "u" },
},
},
["m-anml common sg y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_s = "ego", dat_p = "ym", dat_s = "emu", depr_p = {}, gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["m"] = { acc_s = { "ego", "y" } },
["ow"] = { acc_s = { "ego", "y" } },
["t"] = { acc_s = { "ego", "y" } },
},
},
["m-anml given sg "] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
},
},
["m-anml proper sg "] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["c"] = { ins_s = { "em", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ec"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, loc_p = { "ach", stem = "reduced" } },
["k"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["sz"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "a", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "y", stem = "spelled" } },
},
},
["m-in common sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = "", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["A"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["B"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["C"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["D"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["F"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["I"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["K"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["L"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-i", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
["M"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["ML"] = { acc_s = { "", "-a" }, gen_p = { "-i", "-ów" }, gen_s = { "-a", "-u" } },
["N"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["OP"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["P"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["R"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ze", nom_p = "-y" },
["S"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["T"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = "", nom_p = { "", "-y" } },
["V"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["abl"] = { gen_s = "a" },
["ac"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["ail"] = { gen_p = { "i", { "ów", note = "colloquial" } } },
["ak"] = { gen_s = "a" },
["am"] = { loc_s = { "e", stem = "palatal" } },
["arc"] = { gen_s = "u" },
["az"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["bel"] = { gen_p = { "i", stem = "reduced" } },
["ber"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = "a", ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["bl"] = { gen_p = { "i", "ów" } },
["bor"] = { gen_s = "u" },
["bul"] = { gen_s = "u" },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["cal"] = { gen_p = "i" },
["car"] = { gen_s = "a" },
["cel"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["cer"] = { gen_s = "a" },
["cik"] = { gen_s = "u" },
["dal"] = { gen_p = "i" },
["dej"] = { gen_s = { "a", "u" } },
["del"] = { gen_p = { "i", stem = "reduced" } },
["dol"] = { gen_p = { "i", "ów" } },
["dz"] = { gen_p = "ów" },
["dź"] = { acc_s = { "", { "a", stem = "shortened", note = "colloquial" } }, dat_p = { "om", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["e"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ecz"] = { gen_s = "u" },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["el"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["em"] = { loc_s = { "e", stem = "palatal" } },
["enc"] = { gen_s = "a" },
["eol"] = { gen_p = { "i", "ów" } },
["eor"] = { gen_s = "u" },
["eus"] = { gen_s = "a" },
["ez"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["eć"] = { gen_p = { "", stem = "reduced+soft" } },
["eł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["eń"] = { gen_p = { "", stem = "soft" } },
["fel"] = { gen_p = { "i", stem = "reduced" } },
["g"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["gal"] = { gen_p = "i" },
["gel"] = { gen_p = { "i", stem = "reduced" } },
["ger"] = { gen_s = "a" },
["gol"] = { gen_p = "i" },
["gor"] = { gen_s = "u" },
["gół"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["h"] = { loc_s = "u" },
["haj"] = { gen_s = "a" },
["hej"] = { gen_s = { "a", "u" } },
["hel"] = { gen_p = { "i", stem = "reduced" } },
["her"] = { gen_s = "a" },
["hol"] = { gen_p = { "i", "ów" } },
["how"] = { gen_s = "" },
["hyl"] = { gen_p = "i" },
["hór"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["i"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ial"] = { gen_p = { "i", "ów" } },
["ic"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["iej"] = { gen_s = "a" },
["iek"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["iel"] = { gen_p = { "i", stem = "reduced" } },
["ij"] = { gen_s = "a" },
["ik"] = { gen_s = "a" },
["il"] = { gen_p = { "i", "ów" } },
["im"] = { loc_s = { "e", stem = "palatal" } },
["iol"] = { gen_p = "i" },
["ior"] = { gen_s = "u" },
["isz"] = { gen_s = "u" },
["itr"] = { gen_s = "a" },
["iz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["izd"] = { loc_s = { "e", stem = "palatal" } },
["iąc"] = { gen_p = { "y", stem = "shortened" } },
["iąk"] = { gen_s = "u" },
["iść"] = { ins_p = "mi" },
["j"] = { loc_s = "u", nom_p = "e" },
["jas"] = { gen_s = "a" },
["jem"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "u", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["jm"] = { loc_s = { "e", stem = "palatal" } },
["k"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["kal"] = { gen_p = "i" },
["kch"] = { gen_s = { "a", "u" } },
["kej"] = { acc_s = { "", "a" }, gen_s = "a" },
["ker"] = { gen_s = "a" },
["kic"] = { gen_s = "u" },
["kl"] = { gen_p = { "i", "ów" } },
["km"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["kol"] = { gen_p = "i" },
["kor"] = { gen_s = "u" },
["kr"] = { gen_s = "a" },
["kul"] = { gen_s = "u" },
["l"] = { loc_s = "u", nom_p = "e" },
["laż"] = { gen_p = "y" },
["lc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ler"] = { gen_s = "a" },
["ll"] = { gen_p = { "i", "ów" } },
["lm"] = { loc_s = { "e", stem = "palatal" } },
["lol"] = { gen_p = { "i", "ów" } },
["lor"] = { gen_s = "u" },
["lus"] = { gen_s = "a" },
["ląg"] = { gen_s = "a" },
["ląt"] = { gen_s = "u" },
["m"] = { loc_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["maj"] = { gen_s = "a" },
["mal"] = { gen_p = "i" },
["mik"] = { gen_s = "u" },
["mol"] = { gen_p = "i" },
["mor"] = { gen_s = "u" },
["nal"] = { gen_p = { "i", "ów" } },
["nar"] = { gen_s = "a" },
["nc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["nch"] = { nom_p = "e" },
["nek"] = { gen_s = { "u", stem = "reduced" } },
["nel"] = { dat_p = "om", dat_s = "owi", gen_p = { "i", "ów" }, gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ner"] = { gen_s = "a" },
["neż"] = { gen_p = "y", gen_s = { "a", "u" } },
["nol"] = { gen_p = "i" },
["nor"] = { gen_s = "u" },
["nsz"] = { gen_s = "u" },
["nur"] = { gen_s = "a" },
["nyp"] = { gen_s = "a" },
["nóg"] = { gen_s = { "a", stem = "shortened" } },
["nóż"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["oc"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["och"] = { gen_s = "a" },
["ocz"] = { gen_s = "u" },
["oik"] = { gen_s = "u" },
["om"] = { loc_s = { "e", stem = "palatal" } },
["ool"] = { gen_p = "i" },
["or"] = { gen_s = "a" },
["our"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
["oz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["oń"] = { gen_p = { "", stem = "soft" } },
["pal"] = { gen_p = "i" },
["pel"] = { gen_p = { "i", stem = "reduced" } },
["per"] = { gen_s = "a" },
["pik"] = { gen_s = "u" },
["pol"] = { gen_p = { "i", "ów" } },
["por"] = { gen_s = "u" },
["prz"] = { gen_s = "u" },
["ral"] = { gen_p = { "i", "ów" } },
["rc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["rcz"] = { gen_s = "u" },
["rel"] = { dat_p = "om", dat_s = "owi", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["reń"] = { gen_s = { "a", { "a", stem = "reduced" } } },
["rm"] = { loc_s = { "e", stem = "palatal" } },
["rol"] = { gen_p = "i" },
["ror"] = { gen_s = "u" },
["rsz"] = { gen_s = "u" },
["rus"] = { acc_s = { "", "a" }, gen_s = "a" },
["rąg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["sal"] = { gen_p = "i" },
["sar"] = { gen_s = "a" },
["sel"] = { gen_p = { "i", stem = "reduced" } },
["ser"] = { gen_s = "a" },
["sh"] = { nom_p = "e" },
["sm"] = { loc_s = "ie" },
["sol"] = { gen_p = "i" },
["sz"] = { gen_p = { "y", "ów" } },
["tal"] = { gen_p = "i" },
["tch"] = { nom_p = "e" },
["tel"] = { gen_p = { "i", stem = "reduced" } },
["til"] = { gen_p = "ów" },
["tl"] = { gen_p = { "i", "ów" } },
["tm"] = { loc_s = { "e", stem = "palatal" } },
["tol"] = { gen_p = { "i", "ów" } },
["tus"] = { gen_s = "a" },
["tyk"] = { gen_s = "u" },
["u"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["uel"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ul"] = { gen_p = { "i", "ów" }, gen_s = "a" },
["um"] = { loc_s = { "e", stem = "palatal" } },
["unk"] = { acc_s = { "", "a" }, gen_s = "a" },
["urz"] = { gen_s = "u" },
["uz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["wl"] = { gen_p = "i" },
["wor"] = { gen_s = "u" },
["wyk"] = { gen_s = "u" },
["wyż"] = { gen_p = "ów" },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "u", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "y", stem = "spelled" } },
["y"] = { loc_s = "u", nom_p = "e" },
["yc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ycz"] = { gen_p = { "y", "ów" } },
["yj"] = { gen_s = "a" },
["yk"] = { gen_s = "a" },
["yl"] = { gen_p = { "i", "ów" } },
["ym"] = { loc_s = { "e", stem = "palatal" } },
["ysz"] = { gen_s = "u" },
["yz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["z"] = { gen_p = { "y", { "ów", note = "rare" } }, gen_s = "a", loc_s = "u", nom_p = "e" },
["zac"] = { gen_p = "ów" },
["zal"] = { gen_p = { "i", "ów" } },
["zcz"] = { gen_s = "u" },
["zd"] = { loc_s = { "e", stem = "fronted+palatal" } },
["zel"] = { gen_p = { "i", stem = "reduced" } },
["zer"] = { gen_s = "a" },
["zeń"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["zol"] = { gen_p = "i" },
["zub"] = { gen_s = "a" },
["ząg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ób"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ól"] = { gen_p = { "i", "ów" } },
["ór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["órg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ót"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óż"] = { gen_p = { { "y", stem = "shortened" }, { "ów", stem = "shortened" } } },
["ąb"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ąk"] = { gen_s = "a" },
["ąp"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["ąt"] = { gen_s = "a" },
["ąz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ć"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ęs"] = { gen_s = "a" },
["łat"] = { gen_s = { "a", "u" } },
["łn"] = { gen_s = "a" },
["łup"] = { gen_s = "a" },
["łąg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ń"] = { gen_s = "a", loc_s = "u", nom_p = "e" },
["ńc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ś"] = { gen_s = "a", loc_s = "u", nom_p = "e" },
["ść"] = { dat_p = "om", dat_s = "owi", gen_p = { "", stem = "soft" }, gen_s = "a", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ź"] = { gen_p = { "", stem = "shortened+soft" }, gen_s = "a", loc_s = "u", nom_p = "e" },
["ż"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
["żel"] = { dat_p = "om", dat_s = "owi", gen_p = "i", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["życ"] = { gen_s = "a" },
["żyk"] = { gen_s = "u" },
},
},
["m-in common sg a"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "a", depr_p = {}, gen_s = "a", ins_p = "a", ins_s = "a", loc_p = "a", nom_p = "a" },
},
},
["m-in common sg e"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = "e", dat_p = "e'om", dat_s = "e'owi", depr_p = {}, gen_p = "e'ów", gen_s = "e'u", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'y" },
["al"] = { gen_p = "e", gen_s = "e" },
["g"] = { loc_s = "e'u", nom_p = "e'e" },
["hon"] = { acc_s = { "e", "e'a" } },
["ir"] = { gen_s = "e'a" },
["l"] = { nom_p = "e'e" },
["lag"] = { gen_p = { "e'y", "e'ów" } },
["ll"] = { loc_s = "e'u" },
["on"] = { gen_s = "e'a" },
["z"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
},
},
["m-in common sg i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_s = "i", dat_p = "im", dat_s = "iemu", depr_p = {}, gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
["am"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["an"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["ban"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["bl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["bol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["dl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["el"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["gl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["hl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["hol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["i"] = { dat_s = "jemu", gen_s = "jego", nom_p = "je" },
["ian"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["im"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["kan"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["kol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["ks"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["l"] = { dat_p = "i", dat_s = "i", gen_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", loc_s = "i", nom_p = "i" },
["m"] = { acc_s = { "", stem = "palatal" }, dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["mul"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["n"] = { acc_s = { "", stem = "palatal" } },
["nom"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["pl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["ran"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["rl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["u"] = { dat_s = "jemu", gen_s = "jego", nom_p = "je" },
["wl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["wol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["y"] = { dat_s = "jemu", gen_s = "jego", nom_p = "je" },
["yl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["ym"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["zol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["ćm"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["łan"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["śl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["źl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["źm"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["żl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
},
},
["m-in common sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "o", dat_s = "o", depr_p = {}, gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o", voc_s = "o" },
["i"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
},
},
["m-in common sg y"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = {}, gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
},
},
["m-in place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["Kum"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
["N"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["R"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ab"] = { gen_s = { "a", stem = "palatal" }, loc_s = { "e", stem = "palatal" } },
["adz"] = { gen_p = { "y", "ów" } },
["aj"] = { gen_s = "u" },
["ak"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["al"] = { gen_p = "i" },
["am"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["an"] = { gen_s = "u" },
["ask"] = { gen_s = "u" },
["aw"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["az"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["azd"] = { loc_s = { "e", stem = "fronted+palatal" } },
["ał"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["bcz"] = { gen_p = "ów" },
["bel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ber"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["biń"] = { gen_p = { "", stem = "soft" } },
["boń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ceń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["ck"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["d"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["der"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["doń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["duń"] = { gen_p = { "", stem = "soft" } },
["dyń"] = { gen_p = { "", stem = "soft" } },
["dz"] = { gen_p = "ów" },
["eb"] = { loc_s = { "e", stem = "palatal" } },
["eg"] = { gen_s = "u" },
["en"] = { gen_s = "u" },
["ep"] = { gen_s = "u" },
["ew"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ez"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["eł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["eń"] = { gen_p = { "", stem = "soft" } },
["eść"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["g"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["gal"] = { gen_p = { "i", "ów" } },
["goń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["h"] = { loc_s = "u", nom_p = "y" },
["hel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ic"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ik"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["iw"] = { dat_s = "owi", gen_s = "u", loc_s = { "e", stem = "palatal" } },
["j"] = { loc_s = "u", nom_p = "e" },
["k"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["kok"] = { gen_s = "u" },
["l"] = { loc_s = "u", nom_p = "e" },
["las"] = { loc_s = { "e", stem = "fronted+palatal" } },
["lc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["leń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["lk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["lm"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["m"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["n"] = { loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ng"] = { gen_s = "u" },
["nim"] = { dat_p = { { "om", stem = "palatal" }, "om" }, dat_s = { { "owi", stem = "palatal" }, "owi" }, gen_p = { { "ów", stem = "palatal" }, "ów" }, nom_p = { { "e", stem = "palatal" }, "y" } },
["ok"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ol"] = { gen_p = "i" },
["on"] = { gen_s = "u" },
["ork"] = { gen_s = "a" },
["oł"] = { loc_s = { "e", stem = "palatal" } },
["oń"] = { gen_p = { "", stem = "soft" } },
["oś"] = { gen_p = { "", stem = "soft" } },
["ość"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["p"] = { loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["pas"] = { gen_s = "a" },
["pcz"] = { gen_p = "ów" },
["pel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["r"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ral"] = { gen_p = { "i", "ów" } },
["rb"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["rc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["reń"] = { gen_s = { "a", { "a", stem = "reduced" } } },
["rk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["rp"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { "ów", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["rsz"] = { gen_p = "y" },
["ryń"] = { gen_p = { "", stem = "soft" } },
["róz"] = { gen_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } } },
["s"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["sk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["t"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["taw"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["tel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["u"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ub"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["ud"] = { gen_s = "a" },
["ug"] = { gen_s = { "a", "u" } },
["uk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ul"] = { gen_p = "i" },
["um"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["us"] = { gen_s = "a" },
["uz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["uł"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["vik"] = { gen_s = "u" },
["w"] = { dat_p = { "om", stem = "shortened" }, dat_s = { { "owi", stem = "shortened" }, { "u", stem = "shortened", note = "archaic" } }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["wel"] = { gen_p = { "ów", stem = "reduced" } },
["wil"] = { gen_p = { "i", "ów" } },
["yc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["yk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["yl"] = { gen_p = { "i", "ów" } },
["yż"] = { gen_p = "ów" },
["z"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
["zel"] = { gen_p = "i" },
["zk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["zok"] = { gen_s = "a" },
["zyż"] = { gen_p = { "y", "ów" } },
["ząb"] = { dat_p = { "om", stem = "shortened+palatal" }, dat_s = { "owi", stem = "shortened+palatal" }, gen_p = { "", stem = "shortened+palatal" }, gen_s = { "a", stem = "shortened+palatal" }, ins_p = { "ami", stem = "shortened+palatal" }, ins_s = { "em", stem = "shortened+palatal" }, loc_p = { "ach", stem = "shortened+palatal" }, loc_s = { "u", stem = "shortened+palatal" }, nom_p = { "e", stem = "shortened+palatal" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["órz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "y", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["óz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { gen_s = { "u", stem = "shortened" } },
["ąb"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ąt"] = { gen_s = "a" },
["ć"] = { gen_p = { "", stem = "soft" }, loc_s = "u", nom_p = "e" },
["ęc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ędz"] = { gen_p = { "y", "ów" } },
["ęk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ęp"] = { gen_s = "u" },
["ł"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["łak"] = { gen_s = "u" },
["łk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["łm"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["łom"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["łub"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ń"] = { gen_p = { { "", stem = "soft" }, "ów" }, loc_s = "u", nom_p = "e" },
["ś"] = { loc_s = "u", nom_p = "e" },
["śl"] = { gen_p = { "i", "ów" } },
["ź"] = { gen_p = { "", stem = "soft" }, loc_s = "u", nom_p = "e" },
["ż"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
},
},
["m-in place sg e"] = {
copies = { },
rules = {
[""] = { acc_p = { "e", "e'y" }, acc_s = "e", dat_p = { "e", "e'om" }, dat_s = { "e", "e'owi" }, depr_p = {}, gen_p = { "e", "e'ów" }, gen_s = { "e", "e'u" }, ins_p = { "e", "e'ami" }, ins_s = { "e", "e'em" }, loc_p = { "e", "e'ach" }, loc_s = { "e", { "e", stem = "palatal" } }, nom_p = { "e", "e'y" }, voc_p = { "e", "e'y" }, voc_s = { "e", { "e", stem = "palatal" } } },
},
},
["m-in place sg i"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = {}, gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
["p"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["m-in place sg y"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = {}, gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
},
},
["m-in proper sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["AT"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, nom_p = { "", "-y" } },
["F"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["J"] = { dat_p = { "", "-otom" }, dat_s = { "", "-otowi" }, gen_p = { "", "-otów" }, gen_s = { "", "-otu" }, ins_p = { "", "-otami" }, ins_s = { "", "-otem" }, loc_p = { "", "-otach" }, loc_s = { "", "-ocie" }, nom_p = { "", "-oty" } },
["L"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-i", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
["M"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["N"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["OP"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["OT"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", nom_p = "-y" },
["Ol"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-i", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
["R"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ze", nom_p = "-y" },
["S"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["Z"] = { dat_p = { "-etom", "-om" }, dat_s = { "-etowi", "-owi" }, gen_p = { "-etów", "-ów" }, gen_s = { "-etu", "-u" }, ins_p = { "-ami", "-etami" }, ins_s = { "-em", "-etem" }, loc_p = { "-ach", "-etach" }, loc_s = "-ecie", nom_p = { "-ety", "-y" } },
["b"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["c"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["d"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["el"] = { gen_s = "a" },
["g"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["h"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "y" },
["iD"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-zie", nom_p = "-y" },
["iK"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-iem", loc_p = "-ach", loc_s = "-u", nom_p = "-i" },
["k"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["kot"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { { "e", stem = "palatal" }, "" }, nom_p = { "", "y" } },
["l"] = { dat_p = "om", dat_s = "owi", gen_p = { "i", "ów" }, gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["m"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["n"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["r"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["s"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["t"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "u", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "y", stem = "spelled" } },
["ł"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["Ś"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
},
},
["n common pl "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "", ins_s = {}, loc_p = "", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["n common pl a"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ci"] = { gen_p = { "", stem = "final_soft" } },
["ekt"] = { gen_p = "ów" },
["ik"] = { gen_p = "ów" },
["it"] = { gen_p = "ów" },
["k"] = { gen_p = { "", stem = "inserted_e" } },
["l"] = { gen_p = "i" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["nt"] = { gen_p = "ów" },
["sk"] = { gen_p = "" },
["t"] = { gen_p = { "", stem = "lengthened" } },
["ust"] = { gen_p = "" },
["zwi"] = { gen_p = "" },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n common pl e"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "ym", dat_s = {}, depr_p = {}, gen_p = "ych", gen_s = {}, ins_p = "ymi", ins_s = {}, loc_p = "ych", loc_s = {}, nom_s = {}, voc_s = {} },
["aj"] = { gen_p = "ów" },
["ani"] = { gen_p = { "", { "", stem = "final_soft" } }, ins_p = { "ami", { "mi", stem = "final_soft" } } },
["c"] = { dat_p = "om", ins_p = "ami", loc_p = "ach" },
["ej"] = { gen_p = "ów" },
["gi"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["i"] = { dat_p = "om", gen_p = "", ins_p = "ami", loc_p = "ach" },
["ic"] = { gen_p = "" },
["j"] = { dat_p = "om", gen_p = "i", ins_p = "ami", loc_p = "ach" },
["jc"] = { gen_p = "ów" },
["ki"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["l"] = { dat_p = "om", gen_p = "i", ins_p = "ami", loc_p = "ach" },
["li"] = { gen_p = "ów" },
["ns"] = { dat_p = "om", gen_p = "ów", ins_p = "ami", loc_p = "ach" },
["oj"] = { gen_p = "ów" },
["rc"] = { gen_p = "ów" },
["ri"] = { gen_p = "i" },
["sat"] = { dat_p = "e", gen_p = "e", ins_p = "e", loc_p = "e" },
["z"] = { dat_p = "om", gen_p = "y", ins_p = "ami", loc_p = "ach" },
["ąc"] = { dat_p = "ym", ins_p = "ymi", loc_p = "ych" },
["ńc"] = { gen_p = "ów" },
["ż"] = { dat_p = "om", gen_p = "y", ins_p = "ami", loc_p = "ach" },
},
},
["n common pl i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ajk"] = { gen_p = { "", stem = "inserted_e" } },
["c"] = { dat_p = "iom", gen_p = "i", ins_p = "iami", loc_p = "iach" },
["jtk"] = { gen_p = { "", stem = "inserted_e" } },
["l"] = { dat_p = "i", gen_p = "i", ins_p = "i", loc_p = "i" },
["n"] = { dat_p = { "om", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, loc_p = { "ach", stem = "palatal" } },
["nk"] = { gen_p = { "", stem = "inserted_e" } },
["rk"] = { gen_p = { "", stem = "inserted_e" } },
["unk"] = { gen_p = "ów" },
["w"] = { dat_p = { "om", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, loc_p = { "ach", stem = "palatal" } },
["wk"] = { gen_p = { "", stem = "inserted_e" } },
["łk"] = { gen_p = { "", stem = "inserted_e" } },
["ńk"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n common pl y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["m"] = { gen_p = "" },
["n"] = { gen_p = "" },
["om"] = { gen_p = "ów" },
["on"] = { gen_p = "ów" },
},
},
["n common sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ema"] = { dat_p = "tom", gen_p = "tów", ins_p = "tami", loc_p = "tach", nom_p = "ta" },
["lon"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
},
},
["n common sg e"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = { "", stem = "final_soft" }, gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "a" },
["aci"] = { gen_p = "" },
["aj"] = { gen_p = "" },
["al"] = { dat_s = "e", gen_s = "e", ins_s = "e", loc_s = "e" },
["b"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["bi"] = { gen_p = "" },
["d"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["dni"] = { gen_p = "" },
["e"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["eci"] = { gen_p = "" },
["eł"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e" },
["f"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["gi"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["il"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["jni"] = { gen_p = "" },
["k"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["ki"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", ins_s = "m", loc_p = "ch", loc_s = "m", nom_p = "e" },
["kni"] = { gen_p = "" },
["l"] = { gen_p = "i" },
["m"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["mi"] = { gen_p = "" },
["mil"] = { dat_p = "iom", gen_p = "iów", ins_p = "iami", loc_p = "iach", nom_p = "ia" },
["n"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["nal"] = { dat_p = "e", gen_p = "e", ins_p = "e", loc_p = "e", nom_p = "e" },
["nci"] = { gen_p = "" },
["o"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["oci"] = { gen_p = "" },
["oni"] = { gen_p = "" },
["pi"] = { gen_p = "" },
["r"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["rc"] = { gen_p = "" },
["si"] = { gen_p = "" },
["st"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym" },
["t"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["tel"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["w"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["wal"] = { dat_s = "u", gen_s = "a", ins_s = "em", loc_s = "u" },
["wc"] = { gen_p = { "", "ów" } },
["wi"] = { gen_p = "" },
["woj"] = { dat_s = "emu", gen_s = "ego", nom_p = "e" },
["z"] = { gen_p = "y" },
["zc"] = { gen_p = { "", stem = "inserted_ie" } },
["zi"] = { gen_p = "" },
["é"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["ąci"] = { gen_p = "" },
["ł"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["śni"] = { gen_p = "" },
["ż"] = { gen_p = "y" },
["żci"] = { gen_p = "" },
},
},
["n common sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
["a"] = { dat_p = { "o", { "om", note = "colloquial" } }, dat_s = { "o", { "u", note = "colloquial" } }, gen_p = { "o", { "ł", note = "colloquial" } }, gen_s = { "o", { "a", note = "colloquial" } }, ins_p = { "o", { "ami", note = "colloquial" } }, ins_s = { "o", { "em", note = "colloquial" } }, loc_p = { "o", { "ach", note = "colloquial" } }, loc_s = { "o", { "le", note = "colloquial" } }, nom_p = { "o", { "a", note = "colloquial" } } },
["al"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", nom_p = "o" },
["ant"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["arn"] = { gen_p = { { "", stem = "inserted_e" }, "" } },
["at"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["atł"] = { loc_s = { "e", stem = "fronted+palatal" } },
["ał"] = { gen_p = "" },
["b"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["br"] = { gen_p = { "", stem = "inserted_e" } },
["c"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["cer"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "a", "o" } },
["ck"] = { gen_p = { "", stem = "inserted_e" } },
["cz"] = { loc_s = "u" },
["dk"] = { gen_p = { "", stem = "inserted_e" } },
["dr"] = { gen_p = { "", stem = "inserted_e" } },
["e"] = { dat_p = { "o", { "om", note = "rare" } }, dat_s = { "o", { "u", note = "rare" } }, gen_p = { "o", { "ów", note = "rare" } }, gen_s = { "o", { "a", note = "rare" } }, ins_p = { "o", { "ami", note = "rare" } }, ins_s = { "o", { "em", note = "rare" } }, loc_p = { "o", { "ach", note = "rare" } }, loc_s = { "o", { "u", note = "rare" } }, nom_p = { "o", { "a", note = "rare" } } },
["eg"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", loc_p = "o", nom_p = "o" },
["end"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "a", "o" } },
["ent"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["est"] = { loc_s = "o" },
["eł"] = { gen_p = "" },
["f"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["fot"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["g"] = { ins_s = "o", loc_s = "o" },
["gn"] = { gen_p = { "", stem = "inserted_ie" } },
["gł"] = { gen_p = { "", stem = "inserted_ie" } },
["h"] = { loc_s = "u" },
["i"] = { gen_p = "ów", loc_s = "u" },
["id"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["int"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["j"] = { loc_s = "o" },
["jk"] = { gen_p = { "", stem = "inserted_e" } },
["k"] = { ins_s = "iem", loc_s = "u" },
["kn"] = { gen_p = { "", stem = "inserted_ie" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["l"] = { loc_s = "o" },
["li"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ll"] = { loc_s = "u" },
["mk"] = { gen_p = { "", stem = "inserted_e" } },
["nak"] = { dat_s = { "owi", "u" }, gen_p = { "", "ów" }, nom_p = { "a", "i" } },
["ng"] = { ins_s = "iem", loc_s = "u" },
["nk"] = { gen_p = { "", stem = "inserted_e" } },
["o"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ol"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", "u" }, nom_p = { "a", "o" } },
["ors"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["ow"] = { gen_p = { "", stem = "lengthened" } },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["pk"] = { gen_p = { "", stem = "inserted_e" } },
["pn"] = { gen_p = { { "", stem = "inserted_ie" }, "" } },
["pol"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ps"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["re"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["red"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "a", "o" } },
["rk"] = { gen_p = { "", stem = "inserted_e" } },
["st"] = { loc_s = { "e", stem = "fronted+palatal" } },
["tk"] = { gen_p = { "", stem = "inserted_e" } },
["v"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["wk"] = { gen_p = { "", stem = "inserted_e" } },
["wn"] = { gen_p = { "", stem = "inserted_ie" } },
["zk"] = { gen_p = { "", stem = "inserted_e" } },
["zm"] = { loc_s = "ie" },
["zz"] = { gen_p = "o", loc_s = "o" },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
["łk"] = { gen_p = { "", stem = "inserted_e" } },
["łn"] = { gen_p = { "", stem = "inserted_e" } },
["ńk"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n common sg um"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_p = "ów", gen_s = "um", ins_p = "ami", ins_s = "um", loc_p = "ach", nom_p = "a" },
},
},
["n common sg ę"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ętom", dat_s = "ęciu", depr_p = {}, gen_p = "ąt", gen_s = "ęcia", ins_p = "ętami", ins_s = "ęciem", loc_p = "ętach", nom_p = "ęta" },
["mi"] = { dat_p = "onom", dat_s = "eniu", gen_p = "on", gen_s = "enia", ins_p = "onami", ins_s = "eniem", loc_p = "onach", nom_p = "ona" },
},
},
["n place pl a"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ot"] = { gen_p = "" },
["t"] = { gen_p = { "", stem = "lengthened" } },
["yt"] = { gen_p = "" },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place pl e"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["aj"] = { gen_p = "ów" },
["alc"] = { gen_p = "ów" },
["bc"] = { gen_p = { "", stem = "inserted_ie" } },
["cel"] = { gen_p = "" },
["eńc"] = { gen_p = "" },
["ki"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["l"] = { gen_p = "i" },
["mc"] = { gen_p = { "", stem = "inserted_ie" } },
["n"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["oc"] = { gen_p = "ów" },
["oj"] = { gen_p = "ów" },
["olc"] = { gen_p = "ów" },
["pc"] = { gen_p = { "", stem = "inserted_ie" } },
["pel"] = { gen_p = { "i", "ów" } },
["r"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["rz"] = { gen_p = "y" },
["sel"] = { gen_p = "" },
["t"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["tel"] = { gen_p = "" },
["ul"] = { gen_p = "" },
["w"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["wc"] = { gen_p = { "", stem = "inserted_ie" } },
["wel"] = { gen_p = "" },
["ł"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["ńc"] = { gen_p = { "", stem = "inserted_e" } },
["źc"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place pl i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = { "", stem = "inserted_e" }, gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ag"] = { gen_p = "" },
["ak"] = { gen_p = "ów" },
["ek"] = { gen_p = "" },
["ik"] = { gen_p = "" },
["isk"] = { gen_p = "" },
["kok"] = { gen_p = "ów" },
["lig"] = { gen_p = "ów" },
["og"] = { gen_p = "ów" },
["ok"] = { gen_p = "" },
["ośk"] = { gen_p = "ów" },
["rg"] = { gen_p = "ów" },
["ruk"] = { gen_p = "ów" },
["rąg"] = { gen_p = "ów" },
["sęk"] = { gen_p = "ów" },
["tok"] = { gen_p = "ów" },
["ug"] = { gen_p = "" },
["uk"] = { gen_p = "" },
["yg"] = { gen_p = "" },
["yk"] = { gen_p = "" },
["zeg"] = { gen_p = "ów" },
["zg"] = { gen_p = "" },
["ók"] = { gen_p = "" },
["ąg"] = { gen_p = "" },
["łak"] = { gen_p = "" },
},
},
["n place pl y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ach"] = { gen_p = "ów" },
["br"] = { gen_p = "ów" },
["bł"] = { gen_p = "ów" },
["doł"] = { gen_p = "ów" },
["dł"] = { gen_p = { "", stem = "inserted_e" } },
["ep"] = { gen_p = "ów" },
["gn"] = { gen_p = { "", stem = "inserted_ie" } },
["gon"] = { gen_p = "ów" },
["gr"] = { gen_p = { "", stem = "inserted_ie" } },
["gw"] = { gen_p = { "", stem = "inserted_ie" } },
["gł"] = { gen_p = "ów" },
["hab"] = { gen_p = "ów" },
["hod"] = { gen_p = "ów" },
["hł"] = { gen_p = { "", stem = "inserted_e" } },
["id"] = { gen_p = { "", "ów" } },
["is"] = { gen_p = "ów" },
["kan"] = { gen_p = "ów" },
["koł"] = { gen_p = { "", stem = "lengthened" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["ndr"] = { gen_p = "ów" },
["od"] = { gen_p = { "", stem = "lengthened" } },
["ord"] = { gen_p = "ów" },
["os"] = { gen_p = "ów" },
["ow"] = { gen_p = { "", stem = "lengthened" } },
["ozd"] = { gen_p = "ów" },
["rob"] = { gen_p = "ów" },
["roz"] = { gen_p = "ów" },
["rąd"] = { gen_p = "ów" },
["rł"] = { gen_p = "ów" },
["sn"] = { gen_p = "ów" },
["sł"] = { gen_p = "ów" },
["tos"] = { gen_p = "" },
["tr"] = { gen_p = "ów" },
["um"] = { gen_p = "ów" },
["was"] = { gen_p = "ów" },
["wł"] = { gen_p = "ów" },
["zch"] = { gen_p = "ów" },
["zyb"] = { gen_p = "ów" },
["ąs"] = { gen_p = "ów" },
["ład"] = { gen_p = "ów" },
["łod"] = { gen_p = "ów" },
["łoz"] = { gen_p = { "", stem = "lengthened" } },
["łyn"] = { gen_p = "ów" },
["żn"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["nd"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
},
},
["n place sg e"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "a" },
["aci"] = { gen_p = "" },
["b"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ci"] = { gen_p = { "", stem = "final_soft" } },
["dni"] = { gen_p = "ch" },
["e"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["eci"] = { gen_p = "" },
["gi"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", loc_p = "ch", loc_s = "em", nom_p = "e" },
["h"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ki"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", loc_p = "ch", loc_s = "em", nom_p = "e" },
["l"] = { gen_p = "i" },
["n"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["oci"] = { gen_p = "" },
["oni"] = { gen_p = "" },
["p"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["r"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["s"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["t"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["w"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["z"] = { gen_p = "y" },
["ł"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ż"] = { gen_p = "y" },
},
},
["n place sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
["ad"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ag"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", loc_p = "o", nom_p = "o" },
["ajn"] = { gen_p = { "", stem = "inserted_e" } },
["amn"] = { gen_p = { { "", stem = "inserted_ie" }, "" } },
["arn"] = { gen_p = { { "", stem = "inserted_e" }, "" } },
["c"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ck"] = { gen_p = "" },
["e"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ew"] = { gen_p = "" },
["ewn"] = { gen_p = { "", stem = "inserted_ie" } },
["g"] = { ins_s = "o", loc_s = "o" },
["hn"] = { gen_p = { "", stem = "inserted_e" } },
["i"] = { gen_p = "o", loc_s = "o" },
["iw"] = { gen_p = "" },
["izn"] = { loc_s = "ie" },
["k"] = { gen_p = { "", stem = "inserted_e" }, ins_s = "iem", loc_s = "u" },
["kn"] = { gen_p = { "", stem = "inserted_ie" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["l"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ong"] = { ins_s = "iem", loc_s = "u" },
["osn"] = { gen_p = { "", stem = "inserted_ie" }, loc_s = { "e", stem = "palatal" } },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["pn"] = { gen_p = { "", stem = "inserted_ie" } },
["sk"] = { gen_p = "" },
["sn"] = { loc_s = "ie" },
["st"] = { dat_p = "om", dat_s = "u", gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "fronted+palatal" }, nom_p = "a" },
["t"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["tw"] = { gen_p = "" },
["udn"] = { gen_p = { "", stem = "inserted_e" } },
["w"] = { gen_p = { "", "ów", { "", stem = "lengthened" } } },
["ówn"] = { gen_p = { "", stem = "inserted_ie" } },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
["łot"] = { dat_p = "om", dat_s = "u", gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
["śn"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place sg um"] = {
copies = { },
rules = {
[""] = { acc_p = { "a", { "um", note = "rare" } }, acc_s = "um", dat_p = { "om", { "um", note = "rare" } }, dat_s = "um", depr_p = {}, gen_p = "um", gen_s = "um", ins_p = { "ami", { "um", note = "rare" } }, ins_s = "um", loc_p = { "ach", { "um", note = "rare" } }, loc_s = "um", nom_p = { "a", { "um", note = "rare" } }, voc_p = { "a", { "um", note = "rare" } }, voc_s = "um" },
},
},
["n proper pl "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "", ins_s = {}, loc_p = "", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["n proper pl e"] = {
copies = { },
rules = {
[""] = { acc_p = "e", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "e", voc_s = {} },
},
},
["n proper pl y"] = {
copies = { },
rules = {
[""] = { acc_p = "y", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "y", voc_s = {} },
},
},
["n proper sg "] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_p = "", voc_s = "" },
["BS"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["F"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["J"] = { acc_p = { "", "-oty" }, dat_p = { "", "-otom" }, dat_s = { "", "-otowi" }, gen_p = { "", "-otów" }, gen_s = { "", "-otu" }, ins_p = { "", "-otami" }, ins_s = { "", "-otem" }, loc_p = { "", "-otach" }, loc_s = { "", "-ocie" }, nom_p = { "", "-oty" }, voc_p = { "", "-oty" }, voc_s = { "", "-ocie" } },
["L"] = { acc_p = { "", "-e" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-i" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-e" }, voc_p = { "", "-e" }, voc_s = { "", "-u" } },
["N"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["OS"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["R"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ze" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ze" } },
["Z"] = { acc_p = { "", "-ety", "-y" }, dat_p = { "", "-etom", "-om" }, dat_s = { "", "-etowi", "-owi" }, gen_p = { "", "-etów", "-ów" }, gen_s = { "", "-etu", "-u" }, ins_p = { "", "-ami", "-etami" }, ins_s = { "", "-em", "-etem" }, loc_p = { "", "-ach", "-etach" }, loc_s = { "", "-ecie" }, nom_p = { "", "-ety", "-y" }, voc_p = { "", "-ety", "-y" }, voc_s = { "", "-ecie" } },
["k"] = { acc_p = {}, dat_p = {}, gen_p = {}, gen_s = { "", note = "rare" }, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
["m"] = { acc_p = { "", "y" }, dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" }, voc_p = { "", "y" }, voc_s = { "", { "e", stem = "palatal" } } },
["ś"] = { acc_p = {}, dat_p = {}, gen_p = {}, gen_s = { "", note = "rare" }, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
},
},
["n proper sg e"] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = "a", dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "e", nom_p = "a", voc_p = "a", voc_s = "e" },
},
},
["n proper sg o"] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = {}, dat_p = {}, dat_s = "emu", depr_p = {}, gen_p = {}, gen_s = "ego", ins_p = {}, ins_s = "ym", loc_p = {}, loc_s = "ym", nom_p = {}, voc_p = {}, voc_s = {} },
},
},
["n proper sg um"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_p = "ów", gen_s = "um", ins_p = "ami", ins_s = "um", loc_p = "ach", nom_p = "a" },
},
},
}
------------------------------------------------------------------------------------------------------------------------
-- Adjective rules --
------------------------------------------------------------------------------------------------------------------------
-- The slots of an adjective in table order: the singular by gender column (the masculine animate and inanimate share
-- most of them), then the virile and non-virile plural.
data.adjective_slots = {
"nom_m", "nom_f", "nom_n", "nom_mp_pers", "nom_p_not_mp_pers",
"gen_mn", "gen_f", "gen_p",
"dat_mn", "dat_f", "dat_p",
"acc_m_an", "acc_m_in", "acc_f", "acc_n", "acc_mp_pers", "acc_p_not_mp_pers",
"ins_mn", "ins_f", "ins_p",
"loc_mn", "loc_f", "loc_p",
"short",
}
-- The nominative endings of an adjective's lemma (its masculine singular), which pick its group in `adjective_groups`.
data.adjective_nominatives = { "y", "i" }
-- The kind of an adjective, for its title and category, given by the first pattern its lemma matches.
data.adjective_kinds = { { "y$", "cứng" }, { "[kg]i$", "âm vòm" }, { "", "mềm" } }
-- How to find the masculine of an adjectival word given in another gender (''teściowa'' → ''teściowy'', ''tania'' →
-- ''tani'', ''wielkie'' → ''wielki'', and likewise a non-virile plural such as ''Zjednoczone''). Take the first ending
-- of its rule gender (`plural` for a plural) that it has, and replace it with the soft masculine ending if the ending
-- is `soft` or the stem ends in a letter of `soft_after`, and with the hard one otherwise.
data.adjective_lemma = {
endings = {
f = { { "ia", soft = true }, { "a" } },
n = { { "ie", soft = true }, { "e" } },
plural = { { "ie", soft = true }, { "e" } },
},
soft = "i",
hard = "y",
soft_after = { k = true, g = true },
}
-- The endings that follow the softened consonant of a virile nominative plural (''krew|ni'', ''pols|c|y''), used to
-- find the masculine of a virile adjectival word.
data.virile_endings = { "", "y" }
-- The noun slot that each adjective slot of an adjectival word fills, by the rule gender of the noun. `plural` is the
-- plural of every rule gender except `m-pr`, whose plural is in its own entry. The vocative is the nominative.
data.adjectival_slots = {
["m-pr"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_an", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m", nom_p = "nom_mp_pers", acc_p = "acc_mp_pers", voc_p = "nom_mp_pers",
gen_p = "gen_p", dat_p = "dat_p", ins_p = "ins_p", loc_p = "loc_p",
},
["m-anml"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_an", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m",
},
["m-in"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_in", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m",
},
f = {
nom_s = "nom_f", gen_s = "gen_f", dat_s = "dat_f", acc_s = "acc_f", ins_s = "ins_f", loc_s = "loc_f",
voc_s = "nom_f",
},
n = {
nom_s = "nom_n", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_n", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_n",
},
plural = {
nom_p = "nom_p_not_mp_pers", gen_p = "gen_p", dat_p = "dat_p", acc_p = "acc_p_not_mp_pers",
ins_p = "ins_p", loc_p = "loc_p", voc_p = "nom_p_not_mp_pers",
},
}
-- The adjective slots that always have the forms of another slot, by source slot: the dative, instrumental and
-- locative feminine singular come from the genitive and accusative, the locative masculine singular from the
-- instrumental, and the locative plural from the genitive.
data.adjective_shared = {
gen_f = { "dat_f", "loc_f" }, acc_f = { "ins_f" }, ins_mn = { "loc_mn" }, gen_p = { "loc_p" },
}
-- The accusatives an adjective takes from other slots, as pairs of source and accusative.
data.adjective_accusatives = {
{ "nom_n", "acc_n" }, { "gen_mn", "acc_m_an" }, { "nom_m", "acc_m_in" }, { "gen_p", "acc_mp_pers" },
{ "nom_p_not_mp_pers", "acc_p_not_mp_pers" }, { "nom_mp_npers", "acc_mp_npers" }, { "nom_fp", "acc_fp" },
{ "nom_np", "acc_np" },
}
-- The last letter of an adjective stem that drops before an ending starting with the given letter (e.g. ''moj-'' +
-- ''-ich'' → ''moich'').
data.adjective_dropped = { j = "i" }
-- The archaic dative added by `archdat` (''polsku''): its ending, added to the adjective's stem, and its footnote (a
-- key of `notes`).
data.archaic_dative = { "u", note = "archaic" }
--[==[
The irregular adjectives of `<irreg>`, tried on the lemma in order.
`pattern` captures the stem (or `stem` gives it), and each of the `sets` adds forms to the stem (plus `add`), with an
optional footnote.
A set's `endings` give the slots in which a regular adjective has its own forms; the other slots are shared as for
every adjective (the dative, instrumental and locative feminine singular are the genitive, accusative and genitive; the
locative masculine singular is the instrumental; and the locative plural is the genitive). `-` as an ending means the
lemma itself. A set's `own` endings fill a slot without that sharing. `table` names a table with slots of its own
(`dwa` for the plural of ''dwa'' and ''oba'', and `plonly` for the plural only).
]==]
local function normal(nom_f, nom_n, nom_mp_pers, nom_p_not_mp_pers, gen_mn, gen_f, gen_p, dat_mn, dat_p, acc_f, ins_mn,
ins_p)
return {
nom_f = nom_f, nom_n = nom_n, nom_mp_pers = nom_mp_pers, nom_p_not_mp_pers = nom_p_not_mp_pers,
gen_mn = gen_mn, gen_f = gen_f, gen_p = gen_p, dat_mn = dat_mn, dat_p = dat_p, acc_f = acc_f, ins_mn = ins_mn,
ins_p = ins_p,
}
end
local DWA = {
table = "dwa",
sets = { {
own = {
nom_mp_pers = "aj", nom_mp_npers = "a", nom_fp = "ie", nom_np = "a", gen_p = { "u", "óch" },
dat_p = { "u", "om", "óm" }, ins_mnp = { "oma", "u" }, ins_fp = { "iema", "oma", "u" }, loc_p = { "u", "óch" },
},
} },
}
data.irregular_adjectives = {
{ pattern = "^(dw)a$", table = DWA.table, sets = DWA.sets },
{ pattern = "^(ob)a$", table = DWA.table, sets = DWA.sets },
{ pattern = "^(.*[st]w)ój$", sets = {
{ add = "oj", endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
{ endings = normal("a", "e", nil, "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi"),
note = "literary or archaic" },
} },
{ pattern = "^(.*m)ój$", sets = {
{ add = "oj", endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
{ endings = normal("a", "e", nil, "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi"),
note = "literary or archaic" },
} },
{ pattern = "^(.*)ten$", sets = {
{ endings = normal("ta", "to", "ci", "te", "tego", "tej", "tych", "temu", "tym", nil, "tym", "tymi") },
{ own = { acc_f = "tę" } },
{ own = { acc_f = "tą" }, note = "proscribed but much more common" },
{ own = { ins_f = "tą" } },
} },
-- ''tenże'' declines like ''ten'', with ''-ż'' after a vowel and ''-że'' after a consonant.
{ pattern = "^(.*)tenże$", sets = {
{ endings = normal("taż", "toż", "ciż", "też", "tegoż", "tejże", "tychże", "temuż", "tymże", nil, "tymże", "tymiż") },
{ own = { acc_f = { "tęż", "tęże", "tąż", "tąże" }, ins_f = { "tąż", "tąże" } } },
} },
{ pattern = "^(.*czyj)$", sets = {
{ endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
} },
{ pattern = "^(.*sam)$", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(.*jed)en$", sets = {
{ add = "n", endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(on)$", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^ów$", stem = "ow", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^owy$", stem = "ow", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(.*il)e$", table = "plonly", sets = {
{ endings = normal(nil, nil, "u", "e", nil, nil, "u", nil, "u", nil, nil, "u") },
{ own = { ins_p = "oma" }, note = "rare" },
} },
{ pattern = "^(.*wszys)tek$", sets = {
{ add = "tk", endings = normal("a", "o", nil, "ie", "iego", "iej", "ich", "iemu", "im", "ą", "im", "imi"),
archaic_dative = "u" },
{ add = "c", own = { nom_mp_pers = "y" } },
} },
}
--[==[
The adjective groups, keyed `adj common sg NOMINATIVE` (the lemma's ending, `y` or `i`) like the noun groups.
]==]
data.adjective_groups = {
["adj common sg "] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "emu", gen_f = "ej", gen_mn = "ego", gen_p = "ych", ins_f = "ą", ins_mn = "ym", ins_p = "ymi", nom_f = "a", nom_mp_pers = "", nom_n = "e", nom_p_not_mp_pers = "e" },
["."] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["a"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["ad"] = { acc_f = {}, dat_mn = {}, gen_f = {}, gen_mn = {}, gen_p = {}, ins_f = {}, ins_mn = {}, ins_p = {}, nom_mp_pers = { "", stem = "palatal" } },
["asz"] = { nom_mp_pers = { "i", stem = "virile" } },
["d"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "" },
["e"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["en"] = { acc_f = { "ą", stem = "reduced" }, dat_mn = { "emu", stem = "reduced" }, gen_f = { "ej", stem = "reduced" }, gen_mn = { "ego", stem = "reduced" }, gen_p = { "ych", stem = "reduced" }, ins_f = { "ą", stem = "reduced" }, ins_mn = { "ym", stem = "reduced" }, ins_p = { "ymi", stem = "reduced" }, nom_f = { "a", stem = "reduced" }, nom_mp_pers = { "", stem = "reduced+palatal" }, nom_n = { "e", stem = "reduced" }, nom_p_not_mp_pers = { "e", stem = "reduced" } },
["ent"] = { nom_mp_pers = { "", stem = "palatal" } },
["j"] = { acc_f = { "ą", stem = "shortened" }, dat_mn = { "emu", stem = "shortened" }, gen_f = { "ej", stem = "shortened" }, gen_mn = { "ego", stem = "shortened" }, ins_f = { "ą", stem = "shortened" }, nom_f = { "a", stem = "shortened" }, nom_n = { "e", stem = "shortened" }, nom_p_not_mp_pers = { "e", stem = "shortened" } },
["l"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["n"] = { nom_mp_pers = { "", stem = "palatal" } },
["nd"] = { nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["nt"] = { acc_f = {}, dat_mn = {}, gen_f = {}, gen_mn = {}, gen_p = {}, ins_f = {}, ins_mn = {}, ins_p = {} },
["o"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["om"] = { nom_mp_pers = { "", stem = "palatal" } },
["on"] = { nom_mp_pers = { "", stem = "fronted+palatal" } },
["r"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["ron"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_mp_pers = "", nom_n = "", nom_p_not_mp_pers = "" },
["rt"] = { nom_mp_pers = { "", stem = "palatal" } },
["s"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["w"] = { nom_mp_pers = { "", stem = "palatal" } },
["yj"] = { acc_f = "ą", dat_mn = "emu", gen_f = "ej", gen_mn = "ego", ins_f = "ą", nom_f = "a", nom_n = "e", nom_p_not_mp_pers = "e" },
["é"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["ż"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
},
},
["adj common sg i"] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", ins_f = "acc_f", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "iemu", gen_f = "iej", gen_mn = "iego", gen_p = "ich", ins_mn = "im", ins_p = "imi", nom_f = "a", nom_mp_pers = { "y", stem = "palatal" }, nom_n = "ie", nom_p_not_mp_pers = "ie" },
["b"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["c"] = { acc_f = "ią", nom_f = "ia", nom_mp_pers = "i" },
["f"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["i"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["ks"] = { acc_f = { "", stem = "palatal" }, dat_mn = { "", stem = "palatal" }, gen_f = { "", stem = "palatal" }, gen_mn = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_mn = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, nom_f = { "", stem = "palatal" }, nom_n = { "", stem = "palatal" }, nom_p_not_mp_pers = { "", stem = "palatal" } },
["l"] = { dat_mn = "emu", gen_f = "ej", gen_mn = "ego", nom_mp_pers = "i", nom_n = "e", nom_p_not_mp_pers = "e" },
["m"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["n"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["p"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["s"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["u"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["w"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["y"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["z"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
},
},
["adj common sg y"] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", ins_f = "acc_f", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "emu", gen_f = "ej", gen_mn = "ego", gen_p = "ych", ins_mn = "ym", ins_p = "ymi", nom_f = "a", nom_mp_pers = { "", stem = "palatal" }, nom_n = "e", nom_p_not_mp_pers = "e" },
["c"] = { nom_mp_pers = "y" },
["dzn"] = { nom_mp_pers = "i" },
["h"] = { nom_mp_pers = { "i", stem = "virile" } },
["on"] = { nom_mp_pers = { "", stem = "fronted+palatal" } },
["r"] = { nom_mp_pers = { "y", stem = "palatal" } },
["ron"] = { nom_mp_pers = { "", stem = "palatal" } },
["soł"] = { nom_mp_pers = { "i", stem = "fronted+palatal" } },
["sz"] = { nom_mp_pers = { "i", stem = "virile" } },
["won"] = { nom_mp_pers = { "", stem = "palatal" } },
["z"] = { nom_mp_pers = "y" },
["ł"] = { nom_mp_pers = { "i", stem = "palatal" } },
["łon"] = { nom_mp_pers = { "", stem = "palatal" } },
["łzł"] = { nom_mp_pers = { { "i", stem = "virile" }, { "i", stem = "palatal" } } },
["ż"] = { nom_mp_pers = "y" },
["żd"] = { nom_mp_pers = { "", stem = "palatal", note = "rare" } },
},
},
}
return data
nze4ixvrnv7ealzam1izsb060yzva40
2573729
2573725
2026-10-26T16:56:52Z
Hiyuune
50834
2573729
Scribunto
text/plain
--[==[
Polish data for [[Module:zlw-lch-decl]]: the declension rules, the stem alternations they use, the irregular words,
the footnotes, and the indicators of {{tl|pl-ndecl}} and {{tl|pl-adecl}}.
TERMINOLOGY:
* "stem" = The lemma minus its nominative ending, e.g. ''kobiet-'' from ''kobieta'' and ''okn-'' from ''okno''. A
masculine noun ending in a consonant is its own stem (''pies'').
* "group" = The nouns that share one set of rules, i.e. those with the same gender (`m-pr` masculine personal,
`m-anml` masculine animal, `m-in` masculine inanimate, `f`, `n`), kind (common nouns, surnames, given names, place names and other names) and
nominative ending (`""` for a consonant, `a`, `o`, `e`, `ę`, `um`, `i`). Pluralia tantum have groups of their own,
by the ending of their nominative plural.
* "rule" = The forms of one slot for the nouns of a group whose stem ends in particular letters. The rule for the
longest such ending applies, and `""` holds the group's default. A form is an ending added either to the stem or to
the stem changed by an alternation (e.g. with `stem = "palatal"`, ''kobiet-'' becomes ''kobieci-'' before ''-e'').
* "copy" = A slot whose forms are always those of another slot in its group, e.g. the accusative singular of a
personal noun is its genitive.
]==]
local data = {}
------------------------------------------------------------------------------------------------------------------------
-- Alternations --
------------------------------------------------------------------------------------------------------------------------
-- The vowels, used by the rules that look for the last syllable of a stem.
data.vowels = "aąeęioóuy"
--[==[
The alternations a rule can ask for (`stem = "..."`). Several are joined with "+", in this order:
* `reduced`: drop the mobile ''e'' of the stem's last syllable (''pies'' → ''ps-'', ''sweter'' → ''swetr-'').
* `inserted_e`, `inserted_ie`: put in ''e'' or ''ie'' before the last consonant (''matk-'' → ''matek'', ''okn-'' →
''okien'').
* `truncated`: drop the end of the stem given by `truncate` (''Amerykanin'' → ''Amerykan-'', ''Amerykanie'').
* `spelled`: write the end of the stem as `spelled` gives it before an ending (''appendix'' → ''appendiks-'').
* `shortened`: change ''ó'' to ''o'' and ''ą'' to ''ę'' in the last syllable (''stół'' → ''stoł-'', ''ząb'' →
''zęb-'').
* `lengthened`: change ''o'' to ''ó'' and ''ę'' to ''ą'' in the last syllable (''drog-'' → ''dróg'', ''ręk-'' →
''rąk'').
* `fronted`: change ''o'' or ''a'' to ''e'' in the last syllable (''uczony'' → ''uczeni'', ''sąsiad'' → ''sąsiedzi'').
* `soft`, `palatal`, `virile`: change the last consonant (or two) using one of the tables below.
]==]
-- How `shortened` (''stół'' → ''stołu''), `lengthened` (''droga'' → ''dróg'') and `fronted` (''uczony'' → ''uczeni'',
-- ''sąsiad'' → ''sąsiedzi'') change the vowel of a stem's last syllable.
data.shorten = { ["ó"] = "o", ["ą"] = "ę" }
data.lengthen = { ["o"] = "ó", ["ę"] = "ą" }
data.front = { ["o"] = "e", ["a"] = "e" }
-- How `truncated` cuts a stem (the plural of the nouns in ''-anin'' has no ''-in'': ''mieszczanin'' → ''mieszczanie'',
-- ''mieszczan'') and how `spelled` writes one before an ending (''appendix'' → ''appendiksu'', ''appendiksie'').
data.truncate = { nin = "n" }
data.spelled = { x = "ks" }
-- How a soft consonant at the end of a stem is written before a vowel, e.g. ''koń'' → ''konia''.
data.soft = { ["dź"] = "dzi", ["ć"] = "ci", ["ń"] = "ni", ["ś"] = "si", ["ź"] = "zi" }
-- The reverse: how a stem's soft consonant spelled with ''i'' is written at the end of a word with no ending, e.g.
-- ''danie'' → ''dań''. The module also uses `soft` to respell a final soft consonant before a vowel, as Polish
-- spelling always does (''niedźwiedź'' + ''-a'' → ''niedźwiedzia''), so a rule's ending doesn't need `soft` for that.
data.final_soft = { ["dzi"] = "dź", ["ci"] = "ć", ["ni"] = "ń", ["si"] = "ś", ["zi"] = "ź" }
-- The consonants that stay soft when a mobile ''ie'' before them drops, e.g. ''goniec'' → ''gońca'', ''wrzesień'' →
-- ''września''. Before the other consonants, the ''i'' only marked their softness and goes with it (''pies'' →
-- ''psa'', ''łokieć'' → ''łokcia'').
data.reduced_soft = { n = "ń", s = "ś", z = "ź", c = "ć", dz = "dź" }
-- The first palatalization, before ''-e'' (in the locative singular and the feminine dative singular).
data.palatal = {
-- After ''c'', ''r'' and ''s'', the ''z'' of ''-zn-'' and ''-zł-'' is part of a digraph and doesn't soften
-- (''logiczny'' → ''logiczni'', ''Leszno'' → ''Lesznie'', ''zeszły'' → ''zeszli'', but ''żelazny'' → ''żelaźni'').
["czn"] = "czni", ["rzn"] = "rzni", ["szn"] = "szni", ["czł"] = "czl", ["rzł"] = "rzl", ["szł"] = "szl",
["st"] = "ści", ["zd"] = "ździ", ["sł"] = "śl", ["zł"] = "źl", ["sn"] = "śni", ["zn"] = "źni", ["sm"] = "śmi",
["zm"] = "źmi", ["ch"] = "sz", ["p"] = "pi", ["b"] = "bi", ["f"] = "fi", ["w"] = "wi", ["v"] = "vi", ["m"] = "mi",
["n"] = "ni", ["s"] = "si", ["z"] = "zi", ["t"] = "ci", ["d"] = "dzi", ["r"] = "rz", ["ł"] = "l", ["k"] = "c",
["g"] = "dz", ["h"] = "ż",
}
-- The tooltip over the row header of each case, giving its Polish name and questions.
data.case_titles = {
nom = "mianownik (kto? co?)", gen = "dopełniacz (kogo? czego?)", dat = "celownik (komu? czemu?)",
acc = "biernik (kogo? co?)", ins = "narzędnik (kim? czym?)", loc = "miejscownik (o kim? o czym?)", voc = "wołacz (o!)",
}
-- The nominative endings split off a lemma to get its stem, by gender (and `plural` for a plurale tantum), tried in
-- order. For example, ''kobieta'' is ''kobiet-'' plus ''-a'', a masculine in ''-y'' or ''-i'' is an adjectival noun
-- (''Kowalski''), and one in ''-e'' declines as an adjective in the singular (''Bethke'', ''Bethkego'', ''Bethkowie'').
-- A lemma with none of them is its own stem (''pies'').
data.nominative_endings = {
m = { "a", "o", "y", "i", "e" },
f = { "a", "i" },
n = { "um", "o", "e", "ę" },
plural = { "i", "y", "e", "a" },
}
-- The endings of `nominative_endings` that are only a nominative after a consonant, by gender. After a vowel they belong
-- to the stem (''playboy'', ''playboya''; ''Halley'', ''Halleya'').
data.nominative_after_consonant = { m = { y = true, i = true, e = true } }
-- The mobile vowels that `reduced` drops, tried in order: ''ie'' after a consonant, which stays soft according to
-- `soften` (''goniec'' → ''gońc-''), and ''e'' (''pies'' → ''ps-'').
data.mobile_vowels = {
{ "ie", after_consonant = true, soften = "reduced_soft" },
{ "e" },
}
-- The mobile vowel that `*` puts into a bare form: ''ie'' after the letters in `after` (''okno'' → ''okien'', ''igła''
-- → ''igieł''), and otherwise `default` (''matka'' → ''matek'').
data.inserted_vowel = { default = "e", after = { k = "ie", g = "ie" } }
-- The vowel that spells a soft consonant before another vowel (''koń'' + ''-a'' → ''konia''). An ending drops its first
-- vowel after it if that vowel is one of `soft_vowel_absorbs` (''goleń'' + ''-i'' → ''goleni''), and also after a
-- softening of the stem that ends in it (''Herod'' + virile ''-y'' → ''Herodzi'', ''Twardy'' + ''-i'' → ''Twardzi'').
data.soft_vowel = "i"
data.soft_vowel_absorbs = { "i", "y" }
-- The vowel never written after the soft vowel. After a stem's own ''i'', it is dropped if the ''i'' spells a soft
-- consonant (the stem ends in a key of `final_soft`: ''niunia'' + ''-y'' → ''niuni'') and written as the soft vowel if
-- the ''i'' is a vowel (''Ilia'' + ''-y'' → ''Ilii'').
data.hard_vowel = "y"
-- The digraphs a stem can end in, which count as one consonant (for the stem type in the categories, and for Standard
-- Kurpie).
data.digraphs = { ch = true, cz = true, dz = true, ["dź"] = true, ["dż"] = true, rz = true, sz = true }
-- The softening in the masculine personal nominative plural (''student'' → ''studenci'', ''Polak'' → ''Polacy'').
data.virile = {
["st"] = "ści", ["ch"] = "s", ["t"] = "c", ["d"] = "dz", ["r"] = "rz", ["k"] = "c", ["g"] = "dz", ["ł"] = "l",
["sz"] = "s", ["s"] = "s", ["z"] = "z", ["n"] = "n", ["p"] = "p", ["b"] = "b", ["m"] = "m", ["w"] = "w",
["f"] = "f",
}
------------------------------------------------------------------------------------------------------------------------
-- Notes --
------------------------------------------------------------------------------------------------------------------------
-- The footnotes a rule or an override can give a form, by key: `note = "dated"` in a rule, or `[dated]` in a spec.
data.notes = {
archaic = "cổ xưa",
colloquial = "thông tục",
dated = "lỗi thời",
deprecative = "không còn dùng",
dialectal = "phương ngữ",
humorous = "từ hài hước",
literary = "ngôn ngữ văn chương",
obsolete = "không còn dùng",
pejorative = "nghĩa xấu",
proscribed = "bị phản đối",
rare = "hiếm",
regional = "từ địa phương",
vulgar = "thô tục",
-- Notes for the forms of a pronoun that are only clitics (''go'', ''mi'') or only follow a preposition (''niego'').
unstressed = "không nhấn trọng âm",
after_preposition = "sau giới từ",
}
------------------------------------------------------------------------------------------------------------------------
-- Indicators --
------------------------------------------------------------------------------------------------------------------------
--[==[
The indicators of each template, by name. Indicators with the same `group` exclude each other, and the group names
what they set (read with `Spec:group`). `sets` is the value the indicator gives its group if that isn't its own name,
and `value` means it takes a value (e.g. `decllemma:dń`).
]==]
data.indicators = {
noun = {
m = { group = "gender" }, f = { group = "gender" }, n = { group = "gender" },
pr = { group = "animacy" }, anml = { group = "animacy" }, inan = { group = "animacy" },
sg = { group = "number" }, pl = { group = "number" },
["*"] = { group = "reducible" }, ["-*"] = { group = "reducible" },
["#"] = { group = "quantity" }, ["-#"] = { group = "quantity" },
surname = { group = "kind" }, given = { group = "kind" }, place = { group = "kind" },
proper = { group = "kind" },
irreg = { group = "type" }, indecl = { group = "type" }, ["!"] = { group = "type" }, ["+"] = { group = "type" },
pron = { group = "type" }, num = { group = "type" },
decllemma = { group = "declined", value = "word" }, r = { group = "declined", value = "word" },
lect = { group = "table", value = "code" }, dialectal = { group = "table" },
recon = { value = "word" }, du = {}, soft = {},
},
adjective = {
irreg = {}, plonly = {}, archdat = {},
decllemma = { value = "word" },
lect = { group = "table", value = "code" }, dialectal = { group = "table" }, num = {},
recon = { value = "word" }, du = {},
pos = { value = "part of speech" },
},
}
-- The parts of speech an adjective table can be categorized under (given with `pos:` on one of its words, with
-- `adjective` as the default), along with the plural its categories use ("Polish hard pronouns").
data.parts_of_speech = {
adjective = "tính từ",
pronoun = "đại từ",
determiner = "từ hạn định",
numeral = "số từ",
suffix = "hậu tố",
}
------------------------------------------------------------------------------------------------------------------------
-- Lects --
------------------------------------------------------------------------------------------------------------------------
--[==[
The lects that have a table of their own (`lect:CODE`), by their code in [[Module:zlw-lch-IPA/data/pl]]. An
"attested" table lists the forms given and nothing else (`respelling` gives the link target of each form), and a
"paradigm" generates the forms from the `rules` named. The forms of any other lect go in the `dialectal` table, each
tagged with its lect. The names of the lects are read from [[Module:zlw-lch-IPA/data/pl]].
]==]
data.lect_tables = {
-- The Middle Polish forms link to their modern spelling, using `middle_polish_respelling`.
mpl = { table = "attested", respelling = "middle_polish_respelling" },
-- The Standard Kurpie forms are generated from `kurpie`.
skur = { table = "paradigm", rules = "kurpie" },
}
-- The data module of the lects, with their codes, names and aliases.
data.lect_module = "Module:zlw-lch-IPA/data/pl"
-- The start of the title of a lect's table (or of the dialectal table), before its head.
data.lect_titles = {
mpl = "Dạng biến thể hình thái chứng thực tiếng Ba Lan trung đại của ",
skur = "Biến cách phương ngữ Kurpie tiêu chuẩn của ",
dialectal = "Dạng biến thể hình thái chứng thực theo phương ngữ của ",
}
------------------------------------------------------------------------------------------------------------------------
-- Categories --
------------------------------------------------------------------------------------------------------------------------
--[==[
The categories of a table of the standard language, each after the language's name ("Polish singularia tantum"). A
noun table of one word is categorized by its stem type and gender (`stem`, e.g. "velar feminine nouns"), by what its
forms show (`reducible` for a mobile ''e'', `quantitative` for ''ó''/''o'' or ''ą''/''ę''), and by its type
(`irregular`, `adjectival`, `indeclinable`). A phrase, a pronoun or a numeral is only categorized by its number. An
adjective table is categorized by its kind and part of speech (`adjective_kind`, e.g. "hard adjectives" or "soft
pronouns"), and by any short forms and irregular stem.
]==]
data.categories = {
singularia_tantum = "Danh từ chỉ có số ít",
pluralia_tantum = "Danh từ chỉ có số nhiều",
stem = "Danh từ %s %s",
reducible = "Danh từ với thân từ rút gọn",
quantitative = "nouns with quantitative vowel alternation",
irregular = "Danh từ bất quy tắc",
adjectival = "Danh tính từ",
indeclinable = "Danh từ không biến cách",
adjective_kind = "%s %s",
short_forms = "%s với dạng ngắn",
irregular_stem = "%s với thân từ bất quy tắc",
}
-- The gender of a noun as its stem category names it, by gender and (for masculines) animacy.
data.category_genders = {
m = { pr = "giống đực nhân xưng", anml = "giống đực hữu sinh", inan = "giống đực vô sinh" },
f = "giống cái",
n = "giống trung",
}
-- The stem type of a noun by the last consonant of its stem: velar, soft (including the functionally soft ''c'',
-- ''cz'', ''dz'', ''dż'', ''rz'', ''sz'' and ''ż''), or otherwise hard.
data.stem_types = {
velar = { k = true, g = true, ch = true },
soft = {
["ć"] = true, ["ń"] = true, ["ś"] = true, ["ź"] = true, ["dź"] = true, j = true, l = true, i = true,
c = true, cz = true, dz = true, ["dż"] = true, rz = true, sz = true, ["ż"] = true,
},
}
-- The Middle Polish letters that are respelled in the link target of a form (''ptåka'' links to [[ptaka]]). The form
-- itself is shown as written.
data.middle_polish_respelling = {
["å"] = "a", ["á"] = "a", ["é"] = "e",
["Å"] = "A", ["Á"] = "A", ["É"] = "E",
}
--[==[
The Standard Kurpie paradigm (`lect:skur`)
* `palatal`: what the last consonant (or cluster) of a stem becomes before an ending with `stem = "palatal"`. An ''s''
or ''z'' before a softened consonant is softened too (''masło'' → ''maśle'', ''źosna'' → ''źośńe''), but not the
''z'' of ''rz''. The velars only change before the ''-e'' of a feminine; a masculine or neuter velar takes ''-u''.
* `hardened`: the consonants after which an ending's ''ï'' is written ''y'' (''ulicy'', ''nocy'').
* `soft` and `velar`: the last consonants that make a stem soft or velar, which decide the type of a lemma.
* `mazurated`: the last consonants that can come from mazuration (''s'', ''z'', ''c'', ''dz'' for ''sz'', ''ż'',
''cz'', ''dż''). The indicator `soft` makes such a stem soft, as in ''lystonos'' (< ''listonosz''), whose spelling
doesn't show it; ''sołtys'' stays hard.
* `nouns[GENDER][TYPE]`: the ending of each slot, as in `noun_groups` (a string, or `{ ending, stem = "palatal" }`).
The type comes from the lemma; see `paradigm_type` in [[Module:zlw-lch-decl]].
* `copies[GENDER]` and `animate_copies[ANIMACY]`: the slots that take the forms of another slot.
* `clear`, `clear_before_nasal` and `nasals`: the alternation of `#`, by which the slanted vowel of the last syllable
of a consonant-final lemma is clear before an ending (''kśądz'', ''kśę̈dza''). Before one of the `nasals`, where
''o'' is always written ''ó'', the slanted ''ó'' alternates with ''a''.
* `adjective`: the endings of the single adjective declension, by slot of `adjective_slots`, added to the lemma minus
its last letter.
]==]
data.kurpie = {
palatal = {
["rzn"] = "rzń", ["rzł"] = "rzl",
st = "ść", zd = "źdź", sn = "śń", zn = "źń", ["sł"] = "śl", ["zł"] = "źl", sm = "śń", zm = "źń",
b = "bź", p = "pś", f = "ś", w = "ź", m = "ń", s = "ś", z = "ź", t = "ć", d = "dź", n = "ń", r = "rz",
["ł"] = "l", ch = "s", k = "c", g = "dz",
},
hardened = { c = true, cz = true, dz = true, ["dż"] = true, rz = true, sz = true, ["ż"] = true },
-- The type of a lemma, by gender. Take the first entry whose ending the lemma has (`""` for none; with
-- `consonant_final`, only if it doesn't end in one of the `vowels`). The type is that of the first class in the
-- entry's `by_final` that has the last consonant of the stem, and otherwise `default`; it is a type of the gender
-- `declension` if the entry gives one. With the indicator `soft`, it is the entry's `soft`.
types = {
f = {
{ ending = "a", by_final = { { "soft", "soft" }, { "hardened", "soft" } }, default = "cứng" },
-- After a soft consonant, the ending is written ''-å'' (''sukńå'').
{ ending = "å", default = "soft" },
{ ending = "", by_final = { { "soft", "soft_consonant" } }, default = "hard_consonant" },
},
n = {
{ ending = "um", default = "latinate" },
-- A final ''ę'' is written ''ë'' (''wyńë'').
{ ending = "ë", default = "nasal" },
-- A soft stem in ''-o'' is a j-stem (''jajo'').
{ ending = "o", by_final = { { "velar", "velar" }, { "hardened", "hardened" }, { "soft", "soft" } },
default = "cứng" },
{ ending = "e", by_final = { { "hardened", "hardened" } }, default = "soft" },
},
m = {
{ ending = "", consonant_final = true,
by_final = { { "velar", "velar" }, { "soft", "soft" }, { "hardened", "soft" } }, default = "cứng",
soft = "soft" },
-- An animate masculine in ''-a'' or ''-å'' (''starosta'', ''sę̈dźå'') declines as a feminine, with the
-- accusative plural of its animacy.
{ ending = "a", declension = "f", by_final = { { "soft", "soft" }, { "hardened", "soft" } }, default = "cứng" },
{ ending = "å", declension = "f", default = "soft" },
},
},
-- The nominative plural endings a plurale tantum can have, tried in order (''Ńëmcy'').
plural_nominatives = { "y", "ï", "e", "a" },
vowels = "aąeęioóuyåéëï",
-- A personal or animal velar has a type of its own, with the genitive and accusative in ''-a'' (''ptaka'').
animate_types = { velar = "animate_velar" },
-- How the first letter of an ending is written after a hardened consonant (''ï'' as ''y'').
hardened_spelling = { ["ï"] = "y" },
soft = { ["ć"] = true, ["ń"] = true, ["ś"] = true, ["ź"] = true, ["dź"] = true, j = true, l = true },
velar = { k = true, g = true, ch = true },
mazurated = { s = true, z = true, c = true, dz = true },
-- The consonants after which an adjective has ''-ï'' for ''-y'' (''głupśï'').
adjective_soft = { ["ś"] = true, ["ź"] = true, ["ć"] = true, ["dź"] = true, ["ń"] = true, j = true },
clear = { ["ó"] = "o", ["é"] = "e", ["å"] = "a", ["ą"] = "ę̈" },
clear_before_nasal = { ["ó"] = "a" },
nasals = { m = true, n = true, ["ń"] = true },
nouns = {
m = {
hard = {
nom_p = "y", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach",
},
velar = {
nom_p = "y", gen_s = "u", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
-- A personal or animal velar takes the genitive (and accusative) in ''-a'' (''ptaka'').
animate_velar = {
nom_p = "y", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
soft = {
nom_p = "e", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
},
f = {
hard = {
nom_p = "y", gen_s = "y", gen_p = "ów", dat_s = { "e", stem = "palatal" }, dat_p = "óm", acc_s = "ë",
ins_s = "ó", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach", voc_s = "o",
},
soft = {
nom_p = "e", gen_s = "ï", gen_p = "ów", dat_s = "ï", dat_p = "óm", acc_s = "ë",
ins_s = "ó", ins_p = "ańï", loc_s = "ï", loc_p = "ach", voc_s = "o",
},
hard_consonant = {
nom_p = "e", gen_s = "y", gen_p = "ów", dat_s = "y", dat_p = "óm", acc_s = "",
ins_s = "ó", ins_p = "ańï", loc_s = "y", loc_p = "ach", voc_s = "y",
},
soft_consonant = {
nom_p = "e", gen_s = "ï", gen_p = "ów", dat_s = "ï", dat_p = "óm", acc_s = "",
ins_s = "ó", ins_p = "ańï", loc_s = "ï", loc_p = "ach", voc_s = "ï",
},
},
n = {
hard = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach",
},
velar = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
soft = {
nom_p = "a", gen_s = "å", gen_p = "ów", dat_s = "u", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
hardened = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
nasal = {
nom_p = "óna", gen_s = "ëńå", gen_p = "ónów", dat_s = "ëńu", dat_p = "ónóm",
ins_s = "ëńëm", ins_p = "ónańï", loc_s = "ëńu", loc_p = "ónach",
},
latinate = {
nom_p = "a", gen_s = "um", gen_p = "ów", dat_s = "um", dat_p = "óm",
ins_s = "um", ins_p = "ańï", loc_s = "um", loc_p = "ach",
},
},
},
copies = {
m = { voc_s = "loc_s", voc_p = "nom_p" },
f = { acc_p = "nom_p", voc_p = "nom_p" },
n = { acc_s = "nom_s", voc_s = "nom_s", acc_p = "nom_p", voc_p = "nom_p" },
},
animate_copies = {
pr = { acc_p = "gen_p" },
anml = { acc_p = "nom_p" },
inan = { acc_s = "nom_s", acc_p = "nom_p" },
},
-- The other slots are shared as in the standard tables (e.g. the dative and locative feminine come from the
-- genitive), and the plural has one nominative for both genders.
adjective = {
nom_n = "e", nom_f = "å", nom_mp_pers = "e", nom_p_not_mp_pers = "e",
gen_mn = "égo", gen_f = "éj", gen_p = "éch",
dat_mn = "ëmu", dat_p = "ëm",
acc_f = "ó",
ins_mn = "ëm", ins_p = "ëńï",
},
}
-- The rule gender of each gender and animacy of a call.
data.rule_gender = {
m = { pr = "m-pr", anml = "m-anml", inan = "m-in" },
f = "f",
n = "n",
}
------------------------------------------------------------------------------------------------------------------------
-- Lexicon --
------------------------------------------------------------------------------------------------------------------------
-- The slots of a noun in the order the lexicon lists them in.
data.slot_order = {
"nom_s", "gen_s", "dat_s", "acc_s", "ins_s", "loc_s", "voc_s",
"nom_p", "gen_p", "dat_p", "acc_p", "ins_p", "loc_p", "voc_p",
}
-- The irregular nouns of `<irreg>`, by lemma, with their gender and animacy and every form, in `slot_order`.
data.irregular_nouns = {
["brat"] = { gender = "m", animacy = "pr",
"brat", "brata", "bratu", "brata", "bratem", "bracie", "bracie",
"bracia", "braci", "braciom", "braci", "braćmi", "braciach", "bracia",
},
["dziecko"] = { gender = "n",
"dziecko", "dziecka", "dziecku", "dziecko", "dzieckiem", "dziecku", "dziecko",
"dzieci", "dzieci", "dzieciom", "dzieci", "dziećmi", "dzieciach", "dzieci",
},
["ksiądz"] = { gender = "m", animacy = "pr",
"ksiądz", "księdza", "księdzu", "księdza", "księdzem", "księdzu", "księże",
"księża", "księży", "księżom", "księży", "księżmi", "księżach", "księża",
},
["książę"] = { gender = "m", animacy = "pr",
"książę", "księcia", "księciu", "księcia", "księciem", "księciu", "książę",
"książęta", "książąt", "książętom", "książąt", "książętami", "książętach", "książęta",
},
["rok"] = { gender = "m", animacy = "inan",
"rok", "roku", "rokowi", "rok", "rokiem", "roku", "roku",
"lata", "lat", "latom", "lata", "latami", "latach", "lata",
},
["arcyksiążę"] = { gender = "m", animacy = "pr",
"arcyksiążę", "arcyksięcia", "arcyksięciu", "arcyksięcia", "arcyksięciem", "arcyksięciu", "arcyksiążę",
"arcyksiążęta", "arcyksiążąt", "arcyksiążętom", "arcyksiążąt", "arcyksiążętami", "arcyksiążętach",
"arcyksiążęta",
},
}
------------------------------------------------------------------------------------------------------------------------
-- Pronouns, numerals and noun rules --
------------------------------------------------------------------------------------------------------------------------
--[==[
The pronouns of `<pron>`, by lemma, with the numbers of the table (`numberless` for ''siebie'') and the forms of each
slot, each a string or `{ form, notes = { KEY... } }` with keys of `notes`. A pronoun made of one of these plus an
ending in `pronoun_suffixes` (e.g. ''cośkolwiek'') declines like the pronoun, with the ending after every form.
]==]
data.pronouns = {
["co"] = {
numbers = { "s" },
nom_s = { "co" },
gen_s = { "czego", { "co", notes = { "rare" } } },
dat_s = { "czemu" },
acc_s = { "co" },
ins_s = { "czym" },
loc_s = { "czym" },
},
["cokolwiek"] = {
numbers = { "s" },
nom_s = { "cokolwiek" },
gen_s = { "czegokolwiek", { "cokolwiek", notes = { "rare" } } },
dat_s = { "czemukolwiek" },
acc_s = { "cokolwiek" },
ins_s = { "czymkolwiek" },
loc_s = { "czymkolwiek" },
},
["coś"] = {
numbers = { "s" },
nom_s = { "coś" },
gen_s = { "czegoś", { "coś", notes = { "rare" } } },
dat_s = { "czemuś" },
acc_s = { "coś" },
ins_s = { "czymś" },
loc_s = { "czymś" },
},
["cóż"] = {
numbers = { "s" },
nom_s = { "cóż" },
gen_s = { "czegoż", "czegóż", { "cóż", notes = { "rare" } } },
dat_s = { "czemuż" },
acc_s = { "cóż" },
ins_s = { "czymże" },
loc_s = { "czymże" },
},
["ja"] = {
numbers = { "s" },
nom_s = { "ja" },
gen_s = { "mnie", { "mię", notes = { "unstressed", "rare" } } },
dat_s = { "mnie", { "mi", notes = { "unstressed" } } },
acc_s = { "mnie", { "mię", notes = { "unstressed", "rare" } } },
ins_s = { "mną" },
loc_s = { "mnie" },
},
["kto"] = {
numbers = { "s" },
nom_s = { "kto" },
gen_s = { "kogo" },
dat_s = { "komu" },
acc_s = { "kogo" },
ins_s = { "kim" },
loc_s = { "kim" },
},
["ktokolwiek"] = {
numbers = { "s" },
nom_s = { "ktokolwiek" },
gen_s = { "kogokolwiek" },
dat_s = { "komukolwiek" },
acc_s = { "kogokolwiek" },
ins_s = { "kimkolwiek" },
loc_s = { "kimkolwiek" },
},
["ktoś"] = {
numbers = { "s" },
nom_s = { "ktoś" },
gen_s = { "kogoś" },
dat_s = { "komuś" },
acc_s = { "kogoś" },
ins_s = { "kimś" },
loc_s = { "kimś" },
},
["któż"] = {
numbers = { "s" },
nom_s = { "któż" },
gen_s = { "kogoż", "kogóż" },
dat_s = { "komuż" },
acc_s = { "kogoż", "kogóż" },
ins_s = { "kimże" },
loc_s = { "kimże" },
},
["my"] = {
numbers = { "p" },
nom_p = { "my" },
gen_p = { "nas" },
dat_p = { "nam" },
acc_p = { "nas" },
ins_p = { "nami" },
loc_p = { "nas" },
voc_p = { "my" },
},
["nic"] = {
numbers = { "s" },
nom_s = { "nic" },
gen_s = { "nic", "niczego" },
dat_s = { "niczemu" },
acc_s = { "nic" },
ins_s = { "niczym" },
loc_s = { "niczym" },
},
["nikt"] = {
numbers = { "s" },
nom_s = { "nikt" },
gen_s = { "nikogo" },
dat_s = { "nikomu" },
acc_s = { "nikogo" },
ins_s = { "nikim" },
loc_s = { "nikim" },
},
["on"] = {
numbers = { "s" },
nom_s = { "on" },
gen_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
dat_s = { "jemu", { "mu", notes = { "unstressed" } }, { "niemu", notes = { "after_preposition" } } },
acc_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
ins_s = { "nim" },
loc_s = { "nim" },
},
["ona"] = {
numbers = { "s" },
nom_s = { "ona" },
gen_s = { "jej", { "niej", notes = { "after_preposition" } } },
dat_s = { "jej", { "niej", notes = { "after_preposition" } } },
acc_s = { "ją", { "nią", notes = { "after_preposition" } } },
ins_s = { "nią" },
loc_s = { "niej" },
},
["one"] = {
numbers = { "p" },
nom_p = { "one" },
gen_p = { "ich", { "nich", notes = { "after_preposition" } } },
dat_p = { "im", { "nim", notes = { "after_preposition" } } },
acc_p = { "je", { "nie", notes = { "after_preposition" } } },
ins_p = { "nimi" },
loc_p = { "nich" },
},
["oni"] = {
numbers = { "p" },
nom_p = { "oni" },
gen_p = { "ich", { "nich", notes = { "after_preposition" } } },
dat_p = { "im", { "nim", notes = { "after_preposition" } } },
acc_p = { "ich", { "nich", notes = { "after_preposition" } } },
ins_p = { "nimi" },
loc_p = { "nich" },
},
["ono"] = {
numbers = { "s" },
nom_s = { "ono" },
gen_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
dat_s = { "jemu", { "mu", notes = { "unstressed" } }, { "niemu", notes = { "after_preposition" } } },
acc_s = { "je", { "nie", notes = { "after_preposition" } } },
ins_s = { "nim" },
loc_s = { "nim" },
},
["siebie"] = {
numbers = { "s" }, numberless = true,
gen_s = { "siebie", "się" },
dat_s = { "sobie", "se" },
acc_s = { "siebie", "się" },
ins_s = { "sobą" },
loc_s = { "sobie", "se" },
},
["ty"] = {
numbers = { "s" },
nom_s = { "ty" },
gen_s = { "ciebie", { "cię", notes = { "unstressed" } } },
dat_s = { "tobie", { "ci", notes = { "unstressed" } } },
acc_s = { "ciebie", { "cię", notes = { "unstressed" } } },
ins_s = { "tobą" },
loc_s = { "tobie" },
voc_s = { "ty", { "te", notes = { "proscribed", "colloquial" } } },
},
["wszystko"] = {
numbers = { "s" },
nom_s = { "wszystko" },
gen_s = { "wszystkiego" },
dat_s = { "wszystkiemu" },
acc_s = { "wszystko" },
ins_s = { "wszystkim" },
loc_s = { "wszystkim" },
},
["wy"] = {
numbers = { "p" },
nom_p = { "wy" },
gen_p = { "was" },
dat_p = { "wam" },
acc_p = { "was" },
ins_p = { "wami" },
loc_p = { "was" },
voc_p = { "wy" },
},
}
data.pronoun_suffixes = { "śkolwiek", "kolwiek", "ś" }
--[==[
The numerals of `<num>`, by the end of their lemma (the longest one a lemma ends in applies). `numeral_rules` has the
cardinals of {{tl|pl-adecl}} (''pięć'', ''trzy'', ''-naście'', ''-set''), with a virile and a non-virile column in the
slots of `adjective_slots`, and `collective_rules` has the collectives of {{tl|pl-ndecl}} (''pięcioro'', ''dwoje''), in
the plural slots of a noun. Each slot has the endings that follow the lemma minus its key, as in `noun_groups`, and the
comment on each rule names the numerals it was made from.
]==]
data.numeral_rules = {
["a"] = { -- kilka
nom_mp_pers = "u", nom_p_not_mp_pers = "a", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "a", ins_p = { "oma", "u" }, loc_p = "u",
},
["adziesiąt"] = { -- kilkadziesiąt
nom_mp_pers = { "udziesięciu", { "udziesiąt", note = "dated" } }, nom_p_not_mp_pers = "adziesiąt", gen_p = { "udziesięciu", { "udziesiąt", note = "dated" } }, dat_p = { "udziesięciu", { "udziesiąt", note = "dated" } }, acc_mp_pers = { "udziesięciu", { "udziesiąt", note = "dated" } }, acc_p_not_mp_pers = "adziesiąt", ins_p = { "udziesięcioma", "udziesięciu", { "udziesiąt", note = "dated" } }, loc_p = { "udziesięciu", { "udziesiąt", note = "dated" } },
},
["adzieścia"] = { -- dwadzieścia
nom_mp_pers = "udziestu", nom_p_not_mp_pers = "adzieścia", gen_p = "udziestu", dat_p = "udziestu", acc_mp_pers = "udziestu", acc_p_not_mp_pers = "adzieścia", ins_p = { "udziestoma", "udziestu" }, loc_p = "udziestu",
},
["akroć"] = { -- dwakroć
nom_mp_pers = "ukroć", nom_p_not_mp_pers = "akroć", gen_p = "ukroć", dat_p = "ukroć", acc_mp_pers = "ukroć", acc_p_not_mp_pers = "akroć", ins_p = { "ukroć", { "omakroć", note = "rare" } }, loc_p = "ukroć",
},
["anaście"] = { -- dwanaście, kilkanaście
nom_mp_pers = "unastu", nom_p_not_mp_pers = "anaście", gen_p = "unastu", dat_p = "unastu", acc_mp_pers = "unastu", acc_p_not_mp_pers = "anaście", ins_p = { "unastoma", "unastu" }, loc_p = "unastu",
},
["aset"] = { -- kilkaset
nom_mp_pers = "uset", nom_p_not_mp_pers = "aset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "aset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["edziesiąt"] = { -- wieledziesiąt
nom_mp_pers = "udziesięciu", nom_p_not_mp_pers = "edziesiąt", gen_p = "udziesięciu", dat_p = "udziesięciu", acc_mp_pers = "udziesięciu", acc_p_not_mp_pers = "edziesiąt", ins_p = { "udziesięciu", { "udziesięcioma", note = "rare" } }, loc_p = "udziesięciu",
},
["ekolwiek"] = { -- ilekolwiek
nom_mp_pers = "ukolwiek", nom_p_not_mp_pers = "ekolwiek", gen_p = "ukolwiek", dat_p = "ukolwiek", acc_mp_pers = "ukolwiek", acc_p_not_mp_pers = "ekolwiek", ins_p = { "ukolwiek", { "omakolwiek", note = "rare" } }, loc_p = "ukolwiek",
},
["ele"] = { -- niewiele, wiele
nom_mp_pers = { "elu", { "ela", note = "dated" } }, nom_p_not_mp_pers = "ele", gen_p = { "elu", { "ela", note = "dated" } }, dat_p = { "elu", { "ela", note = "dated" } }, acc_mp_pers = { "elu", { "ela", note = "dated" } }, acc_p_not_mp_pers = "ele", ins_p = { "eloma", "elu", { "ela", note = "dated" }, { "elą", note = "dated" } }, loc_p = { "elu", { "ela", note = "dated" } },
},
["em"] = { -- siedem
nom_mp_pers = "miu", nom_p_not_mp_pers = { "em", { "m", note = "dated" } }, gen_p = "miu", dat_p = "miu", acc_mp_pers = "miu", acc_p_not_mp_pers = { "em", { "m", note = "dated" } }, ins_p = { "mioma", "miu" }, loc_p = "miu",
},
["emkroć"] = { -- siedemkroć
nom_mp_pers = "miukroć", nom_p_not_mp_pers = "emkroć", gen_p = "miukroć", dat_p = "miukroć", acc_mp_pers = "miukroć", acc_p_not_mp_pers = "emkroć", ins_p = { "miukroć", { "miomakroć", note = "rare" } }, loc_p = "miukroć",
},
["emset"] = { -- siedemset
nom_mp_pers = "miuset", nom_p_not_mp_pers = { "emset", { "mset", note = "dated" } }, gen_p = "miuset", dat_p = "miuset", acc_mp_pers = "miuset", acc_p_not_mp_pers = { "emset", { "mset", note = "dated" } }, ins_p = { "miuset", { "miomaset", note = "rare" } }, loc_p = "miuset",
},
["eset"] = { -- wieleset
nom_mp_pers = "uset", nom_p_not_mp_pers = "eset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "eset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["eś"] = { -- ileś
nom_mp_pers = "uś", nom_p_not_mp_pers = "eś", gen_p = "uś", dat_p = "uś", acc_mp_pers = "uś", acc_p_not_mp_pers = "eś", ins_p = { "uś", { "omaś", note = "rare" } }, loc_p = "uś",
},
["eż"] = { -- ileż, tyleż, wieleż
nom_mp_pers = "uż", nom_p_not_mp_pers = "eż", gen_p = "uż", dat_p = "uż", acc_mp_pers = "uż", acc_p_not_mp_pers = "eż", ins_p = { "uż", { "omaż", note = "rare" } }, loc_p = "uż",
},
["ieście"] = { -- dwieście
nom_mp_pers = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, nom_p_not_mp_pers = "ieście", gen_p = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, dat_p = "ustu", acc_mp_pers = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, acc_p_not_mp_pers = "ieście", ins_p = { "ustu", { "omaset", note = "rare" }, { "ustoma", note = "rare" } }, loc_p = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } },
},
["ile"] = { -- ile
nom_mp_pers = "ilu", nom_p_not_mp_pers = "ile", gen_p = "ilu", dat_p = "ilu", acc_mp_pers = "ilu", acc_p_not_mp_pers = "ile", ins_p = { "iloma", "ilu" }, loc_p = "ilu",
},
["mset"] = { -- siedmset
nom_mp_pers = "miuset", nom_p_not_mp_pers = { "emset", "mset" }, gen_p = "miuset", dat_p = "miuset", acc_mp_pers = "miuset", acc_p_not_mp_pers = { "emset", "mset" }, ins_p = { "miuset", { "miomaset", note = "rare" } }, loc_p = "miuset",
},
["o"] = { -- sto
nom_mp_pers = "u", nom_p_not_mp_pers = "o", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "o", ins_p = { "u", { "oma", note = "rare" } }, loc_p = "u",
},
["siem"] = { -- osiem
nom_mp_pers = "śmiu", nom_p_not_mp_pers = { "siem", { "śm", note = "dated" } }, gen_p = "śmiu", dat_p = "śmiu", acc_mp_pers = "śmiu", acc_p_not_mp_pers = { "siem", { "śm", note = "dated" } }, ins_p = { "śmioma", "śmiu" }, loc_p = "śmiu",
},
["siemkroć"] = { -- osiemkroć
nom_mp_pers = "śmiukroć", nom_p_not_mp_pers = "siemkroć", gen_p = "śmiukroć", dat_p = "śmiukroć", acc_mp_pers = "śmiukroć", acc_p_not_mp_pers = "siemkroć", ins_p = { "śmiukroć", { "śmiomakroć", note = "rare" } }, loc_p = "śmiukroć",
},
["siemset"] = { -- osiemset
nom_mp_pers = "śmiuset", nom_p_not_mp_pers = { "siemset", { "śmset", note = "dated" } }, gen_p = "śmiuset", dat_p = "śmiuset", acc_mp_pers = "śmiuset", acc_p_not_mp_pers = { "siemset", { "śmset", note = "dated" } }, ins_p = { "śmiuset", { "śmiomaset", note = "rare" } }, loc_p = "śmiuset",
},
["y"] = { -- cztery, trzy
nom_mp_pers = { "ech", "ej" }, nom_p_not_mp_pers = "y", gen_p = "ech", dat_p = "em", acc_mp_pers = "ech", acc_p_not_mp_pers = "y", ins_p = "ema", loc_p = "ech",
},
["ykroć"] = { -- trzykroć
nom_mp_pers = "echkroć", nom_p_not_mp_pers = "ykroć", gen_p = "echkroć", dat_p = "echkroć", acc_mp_pers = "echkroć", acc_p_not_mp_pers = "ykroć", ins_p = { "echkroć", { "emakroć", note = "rare" } }, loc_p = "echkroć",
},
["yle"] = { -- tyle
nom_mp_pers = { "ylu", { "yla", note = "dated" } }, nom_p_not_mp_pers = "yle", gen_p = { "ylu", { "yla", note = "dated" } }, dat_p = { "ylu", { "yla", note = "dated" } }, acc_mp_pers = { "ylu", { "yla", note = "dated" } }, acc_p_not_mp_pers = "yle", ins_p = { "yloma", "ylu", { "yla", note = "dated" }, { "ylą", note = "dated" } }, loc_p = { "ylu", { "yla", note = "dated" } },
},
["ysta"] = { -- czterysta, trzysta
nom_mp_pers = { "ystu", { "echset", note = "rare" } }, nom_p_not_mp_pers = "ysta", gen_p = { "ystu", { "echset", note = "rare" } }, dat_p = "ystu", acc_mp_pers = { "ystu", { "echset", note = "rare" } }, acc_p_not_mp_pers = "ysta", ins_p = { "ystu", { "ystoma", note = "rare" } }, loc_p = { "ystu", { "echset", note = "rare" } },
},
["ąt"] = { -- dziewięćdziesiąt, osiemdziesiąt, ośmdziesiąt, pięćdziesiąt, siedemdziesiąt, siedmdziesiąt, sześćdziesiąt
nom_mp_pers = "ęciu", nom_p_not_mp_pers = "ąt", gen_p = "ęciu", dat_p = "ęciu", acc_mp_pers = "ęciu", acc_p_not_mp_pers = "ąt", ins_p = { "ęcioma", "ęciu" }, loc_p = "ęciu",
},
["ć"] = { -- dziesięć, dziewięć, pięć, sześć
nom_mp_pers = "ciu", nom_p_not_mp_pers = "ć", gen_p = "ciu", dat_p = "ciu", acc_mp_pers = "ciu", acc_p_not_mp_pers = "ć", ins_p = { "cioma", "ciu" }, loc_p = "ciu",
},
["ćkroć"] = { -- pięćkroć
nom_mp_pers = "ciukroć", nom_p_not_mp_pers = "ćkroć", gen_p = "ciukroć", dat_p = "ciukroć", acc_mp_pers = "ciukroć", acc_p_not_mp_pers = "ćkroć", ins_p = { "ciukroć", { "ciomakroć", note = "rare" } }, loc_p = "ciukroć",
},
["ćset"] = { -- dziewięćset, pięćset, sześćset
nom_mp_pers = "ciuset", nom_p_not_mp_pers = "ćset", gen_p = "ciuset", dat_p = "ciuset", acc_mp_pers = "ciuset", acc_p_not_mp_pers = "ćset", ins_p = { "ciuset", { "ciomaset", note = "rare" } }, loc_p = "ciuset",
},
["ę"] = { -- parę
nom_mp_pers = "u", nom_p_not_mp_pers = "ę", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "ę", ins_p = { "oma", "u" }, loc_p = "u",
},
["ędziesiąt"] = { -- parędziesiąt
nom_mp_pers = "udziesięciu", nom_p_not_mp_pers = "ędziesiąt", gen_p = "udziesięciu", dat_p = "udziesięciu", acc_mp_pers = "udziesięciu", acc_p_not_mp_pers = "ędziesiąt", ins_p = { "udziesięciu", { "udziesięcioma", note = "rare" } }, loc_p = "udziesięciu",
},
["ęnaście"] = { -- paręnaście
nom_mp_pers = "unastu", nom_p_not_mp_pers = "ęnaście", gen_p = "unastu", dat_p = "unastu", acc_mp_pers = "unastu", acc_p_not_mp_pers = "ęnaście", ins_p = { "unastoma", "unastu" }, loc_p = "unastu",
},
["ęset"] = { -- paręset
nom_mp_pers = "uset", nom_p_not_mp_pers = "ęset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "ęset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["ści"] = { -- czterdzieści, trzydzieści
nom_mp_pers = "stu", nom_p_not_mp_pers = "ści", gen_p = "stu", dat_p = "stu", acc_mp_pers = "stu", acc_p_not_mp_pers = "ści", ins_p = { "stoma", "stu" }, loc_p = "stu",
},
["ście"] = { -- czternaście, dziewiętnaście, jedenaście, naście, osiemnaście, ośmnaście, piętnaście, siedemnaście, siedmnaście, szesnaście, trzynaście
nom_mp_pers = "stu", nom_p_not_mp_pers = "ście", gen_p = "stu", dat_p = "stu", acc_mp_pers = "stu", acc_p_not_mp_pers = "ście", ins_p = { "stoma", "stu" }, loc_p = "stu",
},
["śmset"] = { -- ośmset
nom_mp_pers = "śmiuset", nom_p_not_mp_pers = { "siemset", "śmset" }, gen_p = "śmiuset", dat_p = "śmiuset", acc_mp_pers = "śmiuset", acc_p_not_mp_pers = { "siemset", "śmset" }, ins_p = { "śmiuset", { "śmiomaset", note = "rare" } }, loc_p = "śmiuset",
},
}
data.collective_rules = {
["e"] = { -- dwoje, oboje, obydwoje, obydwoje, troje
nom_p = "e", gen_p = "ga", dat_p = "gu", acc_p = "e", ins_p = "giem", loc_p = "gu", voc_p = "e",
},
["o"] = { -- czterdzieścioro, czternaścioro, czworo, dwadzieścioro, dwanaścioro, dziesięcioro, dziewiętnaścioro, dziewięcioro, dziewięćdziesięcioro, jedenaścioro, kilkoro, kilkadziesięcioro, kilkanaścioro, naścioro, ośmioro, osiemdziesięcioro, osiemnaścioro, ośmdziesięcioro, ośmnaścioro, piętnaścioro, pięcioro, pięćdziesięcioro, siedmioro, siedemdziesięcioro, siedemnaścioro, siedmdziesięcioro, siedmnaścioro, szesnaścioro, sześcioro, sześćdziesięcioro, trzydzieścioro, trzynaścioro
nom_p = "o", gen_p = "ga", dat_p = "gu", acc_p = "o", ins_p = "giem", loc_p = "gu", voc_p = "o",
},
}
--[==[
The noun groups, keyed `GENDER KIND NUMBER NOMINATIVE` (e.g. `m-pr common sg `, `f common sg a`, `n place pl y`):
* `copies`: the slots that take the forms of another slot (e.g. `acc_s = "gen_s"`).
* `rules`: the forms of each slot, by the ending of the stem (`""` is the default). A slot's forms are an ending (a
string) or a list of endings, and an ending given as a table can name a `stem` alternation and a `note`.
]==]
data.noun_groups = {
["f common sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_s = { "", stem = "soft" }, ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = { "", stem = "soft" } },
["A"] = { dat_p = "", ins_p = "", ins_s = "", loc_p = "" },
["D"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["M"] = { dat_p = { "", "-om" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" } },
["V"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["b"] = { dat_p = { "om", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "ą", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["c"] = { gen_s = "y", nom_p = "e" },
["e"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["edź"] = { nom_p = { "", stem = "soft" } },
["g"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["j"] = { nom_p = "e" },
["k"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["l"] = { gen_s = "i", nom_p = "e" },
["n"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["nt"] = { gen_s = "", nom_p = "" },
["o"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["oć"] = { nom_p = "e" },
["r"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["rś"] = { nom_p = { "", stem = "soft" } },
["s"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["t"] = { dat_p = "", ins_p = "", ins_s = "", loc_p = "" },
["tać"] = { nom_p = { { "", stem = "soft" }, "e" } },
["u"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["w"] = { dat_p = { "om", stem = "reduced+palatal" }, gen_s = { "", stem = "reduced+palatal" }, ins_p = { "ami", stem = "reduced+palatal" }, ins_s = { "ą", stem = "reduced+palatal" }, loc_p = { "ach", stem = "reduced+palatal" }, nom_p = { "e", stem = "reduced+palatal" } },
["y"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["z"] = { gen_s = "y", nom_p = "e" },
["é"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["ódź"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "", stem = "shortened+soft" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ól"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "i", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ąż"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "y", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ęś"] = { ins_p = { "ami", "mi" }, nom_p = { "", stem = "soft" } },
["ń"] = { nom_p = "e" },
["ś"] = { nom_p = "e" },
["ź"] = { nom_p = "e" },
["ż"] = { gen_s = "y", nom_p = "e" },
},
},
["f common sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "i", voc_s = "o" },
["acz"] = { gen_p = "" },
["aj"] = { gen_p = "" },
["ak"] = { gen_p = "" },
["all"] = { gen_p = { "", "i" } },
["ani"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["ans"] = { nom_p = "e" },
["arł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ast"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["awn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["b"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["bi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["bl"] = { gen_p = "i" },
["bn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["bni"] = { gen_p = "" },
["bol"] = { gen_p = "i" },
["bow"] = { voc_s = "a" },
["c"] = { dat_s = "y", gen_p = "", gen_s = "y", nom_p = "e" },
["ci"] = { dat_s = "", gen_p = { "", { "", stem = "final_soft" } }, gen_s = "", voc_s = "u" },
["cn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["cni"] = { gen_p = "" },
["cow"] = { voc_s = "a" },
["cz"] = { dat_s = "y", gen_p = { "", "y" }, nom_p = "e" },
["czi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["czm"] = { dat_s = "ie" },
["czn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["d"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["di"] = { gen_p = "i" },
["dl"] = { gen_p = "i" },
["dn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["dni"] = { gen_p = "" },
["dow"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "lengthened" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y" },
["dz"] = { dat_s = "y", nom_p = "e" },
["dł"] = { gen_p = { "", stem = "inserted_e" } },
["dż"] = { gen_p = { "", "y" } },
["e"] = { dat_s = "i", gen_p = "i", nom_p = "e" },
["ebn"] = { voc_s = "a" },
["ecn"] = { voc_s = "a" },
["ecz"] = { gen_p = "y" },
["ej"] = { gen_p = "" },
["ek"] = { gen_p = "" },
["eni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["eśn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["f"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["fi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["fl"] = { gen_p = "i" },
["g"] = { gen_p = "" },
["gi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["gl"] = { gen_p = "i" },
["gni"] = { gen_p = "" },
["gog"] = { gen_p = "" },
["gł"] = { gen_p = { "", stem = "inserted_ie" } },
["h"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["hi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["hl"] = { gen_p = "i" },
["hn"] = { gen_p = { "", stem = "inserted_e" } },
["hni"] = { gen_p = "" },
["how"] = { voc_s = "a" },
["hł"] = { gen_p = { "", stem = "inserted_e" } },
["i"] = { dat_s = "i", nom_p = "e" },
["ij"] = { gen_p = "" },
["ik"] = { gen_p = "" },
["ini"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["iod"] = { gen_p = "" },
["ion"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["izd"] = { dat_s = { "e", stem = "palatal" } },
["izi"] = { voc_s = "u" },
["j"] = { dat_s = "i", gen_p = "i", nom_p = "e" },
["jni"] = { gen_p = "" },
["jog"] = { gen_p = "" },
["jom"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ki"] = { gen_p = { "i", { "j", note = "archaic" } } },
["kk"] = { gen_p = "" },
["kl"] = { gen_p = "i" },
["kni"] = { gen_p = "" },
["ksz"] = { gen_p = { "", "y" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["l"] = { dat_s = "i", gen_p = { "", "i" }, nom_p = "e" },
["li"] = { gen_p = { "i", { "j", note = "archaic" } } },
["ll"] = { gen_p = "i" },
["ln"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["lni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["lsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["lsz"] = { gen_p = { "", "y" } },
["m"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["mi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["ml"] = { gen_p = "i" },
["mow"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "lengthened" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y" },
["msz"] = { gen_p = "y" },
["n"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["nan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ni"] = { dat_s = "", gen_s = "" },
["nni"] = { gen_p = "" },
["nod"] = { gen_p = "" },
["o"] = { dat_s = "a", gen_p = "a", gen_s = "a", nom_p = "a" },
["od"] = { gen_p = { "", stem = "lengthened" } },
["og"] = { gen_p = { "", stem = "lengthened" } },
["oj"] = { dat_s = "ej", gen_p = "", gen_s = "ej" },
["ok"] = { gen_p = "" },
["omn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["oni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["osz"] = { gen_p = { "", "y" } },
["otw"] = { gen_p = { "", stem = "inserted_e" } },
["ow"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["oźb"] = { gen_p = { "", stem = "lengthened" } },
["oźn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["p"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["pi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["pl"] = { gen_p = "i" },
["pn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["pow"] = { voc_s = "a" },
["r"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["raż"] = { gen_p = "y" },
["ri"] = { gen_p = "i" },
["rl"] = { gen_p = "i" },
["rni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["rol"] = { gen_p = "i" },
["rz"] = { dat_s = "y", nom_p = "e" },
["rzn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["rąż"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["rł"] = { gen_p = "ych" },
["s"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["sc"] = { dat_s = "e", gen_p = { "", stem = "inserted_e" } },
["si"] = { dat_s = "", gen_p = { { "", stem = "final_soft" }, { "", note = "rare" } }, gen_s = "", voc_s = "u" },
["skr"] = { gen_p = { "", stem = "inserted_ie" } },
["sl"] = { gen_p = "i" },
["sm"] = { dat_s = "ie" },
["sn"] = { gen_p = "ych" },
["sz"] = { dat_s = "y", nom_p = "e" },
["szw"] = { gen_p = { "", stem = "inserted_e" } },
["sł"] = { gen_p = { "", stem = "inserted_e" } },
["t"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["tel"] = { gen_p = "i" },
["ti"] = { gen_p = "i" },
["tl"] = { gen_p = "i" },
["tn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["tni"] = { gen_p = "" },
["tod"] = { gen_p = "" },
["tł"] = { gen_p = { "", stem = "inserted_e" } },
["u"] = { dat_s = "i", gen_p = "i", gen_s = { "i", "y" }, nom_p = "y" },
["uj"] = { gen_p = "" },
["uk"] = { gen_p = "" },
["uni"] = { gen_p = { { "", stem = "final_soft" }, { "", note = "rare" } }, voc_s = "u" },
["uzd"] = { dat_s = { "e", stem = "palatal" } },
["w"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["wan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["wi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["wl"] = { gen_p = "i" },
["wn"] = { gen_p = { "", stem = "inserted_ie" } },
["wni"] = { gen_p = "" },
["wol"] = { gen_p = "i" },
["wor"] = { gen_p = { "", stem = "lengthened" } },
["wsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["yj"] = { gen_p = "" },
["yk"] = { gen_p = "" },
["yni"] = { gen_p = { "", stem = "final_soft" } },
["z"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["zd"] = { dat_s = { "e", stem = "fronted+palatal" } },
["zdr"] = { gen_p = { "", stem = "inserted_e" } },
["zi"] = { dat_s = "", gen_p = { "", { "", stem = "final_soft" } }, gen_s = "" },
["zl"] = { gen_p = "i" },
["zm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["zni"] = { gen_p = "" },
["zon"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["zz"] = { dat_s = "y", nom_p = "e" },
["ój"] = { gen_p = "" },
["ók"] = { gen_p = "" },
["ąc"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["ąk"] = { gen_p = "" },
["ąt"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ęcz"] = { gen_p = "" },
["ęk"] = { gen_p = "" },
["ępi"] = { dat_s = "", gen_p = "", gen_s = "" },
["ęż"] = { gen_p = "y" },
["ł"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["łbi"] = { dat_s = "", gen_p = "", gen_s = "" },
["łob"] = { gen_p = { "", stem = "lengthened" } },
["ńsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["ści"] = { voc_s = { "o", "u" } },
["śni"] = { gen_p = "" },
["źn"] = { gen_p = "ych" },
["źni"] = { gen_p = "" },
["ż"] = { dat_s = "y", gen_p = "", gen_s = "y", nom_p = "e" },
["żi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["żn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["żni"] = { gen_p = "" },
["żon"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
},
},
["f common sg i"] = {
copies = { acc_p = "nom_p", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = { "ę", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, depr_p = {}, gen_p = "i", gen_s = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "ą", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["an"] = { acc_s = { "ą", stem = "palatal" } },
["can"] = { acc_s = { "ę", stem = "palatal" } },
["on"] = { acc_s = { "", stem = "palatal" }, dat_p = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["r"] = { acc_s = "i", dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
["san"] = { acc_s = { "ę", stem = "palatal" } },
["t"] = { acc_s = "i", dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
},
},
["f given sg "] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "", voc_s = "" },
},
},
["f given sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["aj"] = { gen_p = "", voc_s = { "o", "u" } },
["ak"] = { gen_p = "" },
["bi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["c"] = { nom_p = "e" },
["ci"] = { gen_p = { "", { "", stem = "final_soft" } } },
["di"] = { dat_s = "i", gen_p = "i", gen_s = "i", voc_s = "o" },
["e"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["fi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["g"] = { gen_s = "i", nom_p = "i" },
["gi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["i"] = { dat_s = "", gen_p = { { "", stem = "final_soft" }, { "", note = "rare" } }, gen_s = "", nom_p = "e", voc_s = "u" },
["ik"] = { gen_p = "" },
["j"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["k"] = { gen_p = { "", stem = "inserted_e" }, gen_s = "i", nom_p = "i" },
["ki"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["l"] = { dat_s = "i", gen_p = { "", "i" }, gen_s = "i", nom_p = "e", voc_s = { "o", "u" } },
["li"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["mi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["nc"] = { dat_s = "y" },
["nul"] = { gen_p = "", voc_s = "u" },
["pi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["ri"] = { dat_s = "i", gen_p = "i", gen_s = "i", voc_s = "o" },
["sz"] = { dat_s = "y", nom_p = "e" },
["ti"] = { dat_s = "i", gen_p = "i", gen_s = "i", voc_s = "o" },
["wi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["wł"] = { gen_p = { "", stem = "inserted_e" } },
["yk"] = { gen_p = "" },
["zi"] = { gen_p = { "", { "", stem = "final_soft" } } },
["ż"] = { dat_s = "y", nom_p = "e" },
},
},
["f given sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = { "", stem = "palatal" }, depr_p = {}, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["f place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", loc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = { "", stem = "soft" }, depr_p = {}, gen_p = { "", stem = "soft" }, gen_s = { "", stem = "soft" }, ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "e" },
["D"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["L"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-i" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, nom_p = { "", "-e" } },
["ać"] = { nom_p = { "", stem = "soft" } },
["e"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["eś"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "", stem = "reduced+soft" }, gen_p = { "", stem = "reduced+soft" }, gen_s = { "", stem = "reduced+soft" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "ą", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, nom_p = { { "", stem = "reduced+soft" }, { "e", stem = "reduced" } } },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["o"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["s"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["w"] = { dat_p = { "om", stem = "reduced+palatal" }, dat_s = { "", stem = "reduced+palatal" }, gen_p = { "", stem = "reduced+palatal" }, gen_s = { "", stem = "reduced+palatal" }, ins_p = { "ami", stem = "reduced+palatal" }, ins_s = { "ą", stem = "reduced+palatal" }, loc_p = { "ach", stem = "reduced+palatal" }, nom_p = { "e", stem = "reduced+palatal" } },
["z"] = { dat_s = "y", gen_p = "y", gen_s = "y" },
["ść"] = { nom_p = { "", stem = "soft" } },
["ż"] = { dat_s = "y", gen_p = "y", gen_s = "y" },
},
},
["f place sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "e", voc_s = "o" },
["ak"] = { gen_p = "" },
["al"] = { gen_p = { "", "i" } },
["ani"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["ask"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["asn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["aw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["awi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["b"] = { nom_p = "y" },
["bn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["c"] = { dat_s = "y" },
["ck"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["cz"] = { gen_p = { "", "y" } },
["czn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["d"] = { nom_p = "y" },
["di"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["dn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["dw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["e"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["ej"] = { gen_p = "" },
["ek"] = { gen_p = "" },
["el"] = { gen_p = { "", "i" } },
["eni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["enn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ew"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ewn"] = { acc_s = { "ą", "ę" }, dat_p = { "om", "ym" }, dat_s = { "ej", { "e", stem = "palatal" } }, gen_p = { "", "ych" }, gen_s = { "ej", "y" }, ins_p = { "ami", "ymi" }, loc_p = { "ach", "ych" }, nom_p = { "e", "y" }, voc_s = { "a", "o" } },
["ez"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["eśn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["f"] = { nom_p = "y" },
["g"] = { gen_s = "i", nom_p = "i" },
["gi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["gol"] = { gen_p = { "", "i" } },
["h"] = { nom_p = "y" },
["i"] = { dat_s = "", gen_s = "" },
["ibi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["iel"] = { gen_p = "i" },
["ik"] = { gen_p = "" },
["ini"] = { gen_p = { "", { "", stem = "final_soft" } } },
["iw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["iz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["j"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["k"] = { gen_p = { "", stem = "inserted_e" }, gen_s = "i", nom_p = "i" },
["kol"] = { gen_p = { "", "i" } },
["kw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["li"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["ln"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["lsk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["lw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["lz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["m"] = { nom_p = "y" },
["mbi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["mż"] = { gen_p = "y" },
["n"] = { nom_p = "y" },
["ob"] = { gen_p = { "", stem = "lengthened" } },
["od"] = { gen_p = { "", stem = "lengthened" } },
["odz"] = { gen_p = "y" },
["og"] = { gen_p = { "", stem = "lengthened" } },
["ojn"] = { gen_p = "ych" },
["omn"] = { acc_s = { "ą", "ę" }, dat_p = { "om", "ym" }, dat_s = { "ej", { "e", stem = "palatal" } }, gen_p = { "", "ych" }, gen_s = { "ej", "y" }, ins_p = { "ami", "ymi" }, loc_p = { "ach", "ych" }, nom_p = { "e", "y" }, voc_s = { "a", "o" } },
["oni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["opn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["osz"] = { gen_p = { "", "y" } },
["oz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["p"] = { nom_p = "y" },
["pcz"] = { gen_p = "y" },
["prz"] = { gen_p = { "", "y" } },
["r"] = { nom_p = "y" },
["rcz"] = { gen_p = "" },
["ri"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["rni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["rw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["rz"] = { gen_p = "y" },
["rł"] = { gen_p = { "", stem = "inserted_e" } },
["s"] = { nom_p = "y" },
["sk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["sn"] = { gen_p = { "", stem = "inserted_e" } },
["sol"] = { gen_p = { "", "i" } },
["szn"] = { gen_p = { "", stem = "inserted_e" } },
["t"] = { nom_p = "y" },
["tcz"] = { gen_p = "y" },
["ti"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["tn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["tok"] = { gen_p = "" },
["u"] = { dat_s = "i", gen_p = "i", gen_s = { "i", "y" }, nom_p = "y" },
["udz"] = { gen_p = { "", "y" } },
["uj"] = { gen_p = "" },
["usk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["uz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["w"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["wcz"] = { gen_p = "y" },
["wn"] = { gen_p = { "", stem = "inserted_ie" } },
["yj"] = { gen_p = "" },
["yk"] = { gen_p = "" },
["yni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["yst"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["z"] = { dat_s = "y" },
["zi"] = { gen_p = { "", { "", stem = "final_soft" } } },
["zw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ąc"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["ąck"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ąk"] = { gen_p = "" },
["ąsk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ęcz"] = { gen_p = "" },
["ędz"] = { gen_p = { "", "y" } },
["ęk"] = { gen_p = "" },
["ł"] = { nom_p = "y" },
["źn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ż"] = { dat_s = "y" },
["żn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
},
},
["f place sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = { "", stem = "palatal" }, depr_p = {}, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["r"] = { dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
},
},
["f proper sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["C"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-a" }, ins_p = { "", "-ami" }, ins_s = { "", "-iem" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-i" }, voc_s = { "", "-u" } },
["EP"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["F"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["M"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["N"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["OK"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-iem" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-i" }, voc_s = { "", "-u" } },
["OP"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["PR"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ze" }, nom_p = { "", "-y" }, voc_s = { "", "-ze" } },
["S"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["Z"] = { dat_p = { "", "-etom" }, dat_s = { "", "-etowi" }, gen_p = { "", "-etów" }, gen_s = { "", "-etu" }, ins_p = { "", "-etami" }, ins_s = { "", "-etem" }, loc_p = { "", "-etach" }, loc_s = { "", "-ecie" }, nom_p = { "", "-ety" }, voc_s = { "", "-ecie" } },
},
},
["f proper sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["c"] = { dat_s = "y", gen_s = "y", nom_p = "e" },
["d"] = { gen_s = "y" },
["e"] = { dat_s = "i", gen_p = "i", nom_p = "e" },
["g"] = { nom_p = "i" },
["h"] = { gen_s = "y" },
["i"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, nom_p = "e" },
["j"] = { nom_p = "e" },
["k"] = { gen_p = { "", stem = "inserted_e" }, nom_p = "i" },
["n"] = { gen_s = "y" },
["r"] = { gen_s = "y" },
["ri"] = { gen_p = "i" },
["t"] = { gen_s = "y" },
["z"] = { gen_s = "y" },
},
},
["f surname sg "] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", depr_p = {}, gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
},
},
["f surname sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ą", dat_p = "im", dat_s = "iej", depr_p = {}, gen_p = "ich", gen_s = "iej", ins_p = "imi", ins_s = "ą", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["adł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ajn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ak"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["an"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["awn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["azł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["b"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["bk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["c"] = { acc_s = "ę", dat_p = "om", dat_s = "y", gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["cz"] = { dat_s = "y", nom_p = "e" },
["d"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["dk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["dni"] = { acc_s = "ą", dat_p = "m", dat_s = "ej", gen_p = "ch", gen_s = "ej", ins_p = "mi", loc_p = "ch", voc_s = "a" },
["dz"] = { dat_s = "y", nom_p = "e" },
["dzk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["ek"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["en"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["esk"] = { dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i" },
["f"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["fk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["g"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["gł"] = { acc_s = "ą", gen_s = "ej", nom_p = "e", voc_s = "a" },
["h"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["hn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["i"] = { acc_s = "ę", dat_p = "om", dat_s = "", gen_p = "", gen_s = "", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["ian"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ik"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["in"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["izn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["j"] = { acc_s = "ę", dat_p = "om", gen_p = "", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["jew"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["jk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["jn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["kat"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["l"] = { acc_s = "ę", dat_p = "om", dat_s = "i", gen_p = { "", "i" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["lan"] = { acc_s = "ą", gen_s = "ej", nom_p = "e", voc_s = "a" },
["lk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["m"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["mk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["n"] = { dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["nk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["od"] = { gen_p = { "", stem = "lengthened" } },
["ok"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["on"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["osk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["osn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ow"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["own"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["p"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["pi"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["pk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["r"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["rk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["rz"] = { dat_s = "y", nom_p = "e" },
["s"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["sm"] = { dat_s = "ie" },
["sz"] = { dat_s = "y", nom_p = "e" },
["sł"] = { gen_p = { "", stem = "inserted_e" } },
["t"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["tk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["uk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["un"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["w"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["wan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["wi"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["wk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["wn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_ie" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["x"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "spelled+palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["y"] = { acc_s = "ę", dat_p = "om", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["yk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["yn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["yzm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["z"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["zk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["zm"] = { dat_s = "ie" },
["zł"] = { gen_p = "ych" },
["ąk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ćk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ęk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ł"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["łk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["łn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ńk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["śk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ż"] = { acc_s = "ę", dat_p = "om", dat_s = "y", gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["żk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
},
},
["f surname sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "i", depr_p = {}, gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
["m"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["n"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["s"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["z"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["m-pr common pl "] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = {}, dat_s = {}, depr_p = {}, gen_p = {}, gen_s = {}, ins_p = { "m", stem = "fronted" }, ins_s = {}, loc_p = {}, loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["m-pr common pl e"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = { "dziadków", stem = "irregular" }, gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["m-pr common pl i"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "zym", dat_s = {}, depr_p = {}, gen_p = "zych", gen_s = {}, ins_p = "zymi", ins_s = {}, loc_p = "zych", loc_s = {}, nom_s = {}, voc_s = {} },
["n"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["o"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", loc_p = "ich" },
},
},
["m-pr common pl y"] = {
copies = { },
rules = {
[""] = { acc_p = "ów", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "y", voc_s = {} },
},
},
["m-pr common sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = { "y", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["ad"] = { nom_p = { "", stem = "palatal" } },
["al"] = { gen_p = { "i", "ów" } },
["ard"] = { nom_p = { "", stem = "palatal" } },
["art"] = { nom_p = { { "", stem = "palatal" }, "y" } },
["ast"] = { nom_p = "owie" },
["az"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = { "", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["aść"] = { dat_s = { "", stem = "soft" }, gen_s = { "", stem = "soft" }, ins_s = "ą", nom_p = { "e", "owie" } },
["bel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["bl"] = { gen_p = { "i", "ów" } },
["bp"] = { nom_p = { "", stem = "palatal" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "y", stem = "reduced" }, voc_s = { { "u", stem = "reduced" }, { "ze", stem = "reduced" } } },
["cel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["cik"] = { nom_p = "owie" },
["cz"] = { gen_p = { "y", "ów" } },
["dan"] = { nom_p = "owie" },
["del"] = { gen_p = { "i", "ów", { "i", stem = "reduced" }, { "ów", stem = "reduced" } } },
["dr"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["dur"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["dyw"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["e"] = { dat_p = { "", "m" }, dat_s = { "", "mu" }, depr_p = { "", "s" }, gen_p = { "", "ch" }, gen_s = { "", "go" }, ins_p = { "", "mi" }, ins_s = { "", "m" }, loc_p = { "", "ch" }, loc_s = { "", "m" }, nom_p = { "", "s" }, voc_s = "" },
["eb"] = { nom_p = "owie" },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["ep"] = { nom_p = "owie" },
["eus"] = { nom_p = "owie" },
["eł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "owie", stem = "reduced" }, voc_s = { "e", stem = "reduced+palatal" } },
["eń"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["eś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["f"] = { nom_p = "owie" },
["fel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["g"] = { depr_p = "i", ins_s = "iem", loc_s = "u", nom_p = { { "y", stem = "palatal" }, "owie" }, voc_s = "u" },
["ger"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["gol"] = { gen_p = "ów" },
["h"] = { loc_s = "u", nom_p = "owie", voc_s = "u" },
["han"] = { nom_p = "owie" },
["hot"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["iad"] = { nom_p = "owie" },
["ib"] = { nom_p = "owie" },
["ic"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["icz"] = { gen_p = "ów" },
["id"] = { nom_p = { "", stem = "palatal" } },
["ieć"] = { loc_s = "u", voc_s = "u" },
["ień"] = { nom_p = { "e", stem = "reduced" } },
["iks"] = { nom_p = "owie" },
["il"] = { gen_p = { "i", "ów" } },
["ior"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["ir"] = { nom_p = "owie" },
["iz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie", voc_s = { "e", stem = "palatal" } },
["j"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["jas"] = { nom_p = "owie" },
["jk"] = { nom_p = "owie" },
["jor"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["k"] = { depr_p = "i", ins_s = "iem", loc_s = "u", voc_s = "u" },
["kok"] = { nom_p = "owie" },
["kon"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["kup"] = { nom_p = { "", stem = "palatal" } },
["l"] = { depr_p = "e", gen_p = "i", loc_s = "u", nom_p = "e", voc_s = "u" },
["lan"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["lar"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["len"] = { nom_p = "owie" },
["leń"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = { { "", stem = "soft" }, "ów" }, gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", voc_s = "u" },
["ll"] = { gen_p = "ów" },
["lub"] = { nom_p = { "", stem = "palatal" } },
["m"] = { nom_p = "owie" },
["mp"] = { nom_p = "owie" },
["n"] = { nom_p = { "", stem = "palatal" } },
["nc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["nel"] = { gen_p = { "i", "ów" } },
["ng"] = { nom_p = "owie" },
["nin"] = { dat_p = { "om", stem = "truncated" }, depr_p = { "y", stem = "truncated" }, gen_p = { "", stem = "truncated" }, ins_p = { "ami", stem = "truncated" }, loc_p = { "ach", stem = "truncated" }, nom_p = { "e", stem = "truncated+palatal" } },
["nuk"] = { nom_p = "owie" },
["nuś"] = { nom_p = { "e", "owie" } },
["ob"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ont"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["op"] = { nom_p = { "", stem = "palatal" } },
["ord"] = { nom_p = "owie" },
["oz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["oń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["pan"] = { dat_s = "u", loc_s = "u", nom_p = "owie" },
["pel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["pis"] = { nom_p = "owie" },
["rab"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ral"] = { gen_p = "i" },
["rb"] = { nom_p = "owie" },
["rel"] = { gen_p = { "i", "ów" } },
["rk"] = { nom_p = "owie" },
["rl"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["ruk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["rz"] = { gen_p = { "y", { "ów", note = "rare" } } },
["s"] = { nom_p = { "", stem = "palatal" } },
["san"] = { nom_p = "owie" },
["sik"] = { nom_p = "owie" },
["sul"] = { nom_p = { "e", "owie" } },
["sz"] = { gen_p = { "y", "ów" } },
["t"] = { nom_p = { "", stem = "palatal" } },
["tr"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["trz"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["tur"] = { nom_p = "owie" },
["u"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["uaw"] = { nom_p = { "", stem = "palatal" } },
["uc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["ud"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["ul"] = { gen_p = "ów" },
["uz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = { "", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["wed"] = { nom_p = { "", stem = "palatal" } },
["wun"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["wój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" }, voc_s = { "u", stem = "shortened" } },
["wór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, voc_s = { "e", stem = "shortened+palatal" } },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, depr_p = { "y", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "a", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "owie", stem = "spelled" }, voc_s = { "e", stem = "spelled+palatal" } },
["y"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["yc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["yd"] = { nom_p = { "", stem = "palatal" } },
["yl"] = { gen_p = { "i", "ów" } },
["yr"] = { nom_p = "owie" },
["yz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie", voc_s = { "e", stem = "palatal" } },
["z"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["zcz"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["zes"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["zeń"] = { nom_p = { "owie", stem = "reduced" } },
["zuk"] = { nom_p = "owie" },
["zym"] = { nom_p = { "", stem = "palatal" } },
["é"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["ób"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { { "", stem = "shortened+palatal" }, { "owie", stem = "shortened" } }, voc_s = { "e", stem = "shortened+palatal" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "e", stem = "shortened+palatal" } },
["ódz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "u", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "u", stem = "shortened" } },
["ójt"] = { nom_p = "owie" },
["ól"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["ór"] = { nom_p = "owie" },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "e", stem = "shortened+palatal" } },
["ół"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, voc_s = { "e", stem = "shortened+palatal" } },
["ąb"] = { nom_p = { "owie", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", voc_s = "u" },
["ć"] = { depr_p = "e", gen_p = { "", stem = "soft" }, loc_s = { "", stem = "soft" }, nom_p = "e", voc_s = { "", stem = "soft" } },
["ę"] = { dat_p = "tom", dat_s = { "ciu", note = "dated" }, depr_p = "ta", gen_p = { "t", stem = "lengthened" }, gen_s = { "cia", note = "dated" }, ins_p = "tami", ins_s = { "ciem", note = "dated" }, loc_p = "tach", loc_s = { "ciu", note = "dated" }, nom_p = "ta", voc_s = "" },
["ł"] = { nom_p = "owie" },
["łuk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["łup"] = { nom_p = "owie" },
["ń"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["ś"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["ź"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" }, voc_s = "u" },
["ż"] = { depr_p = "e", gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e", voc_s = "u" },
["żer"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["żeń"] = { nom_p = { "e", stem = "reduced" } },
},
},
["m-pr common sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = { "", stem = "palatal" }, voc_s = "o" },
["ak"] = { nom_p = { "y", stem = "palatal" } },
["b"] = { nom_p = "owie" },
["bi"] = { ins_s = { "ą", { "m", note = "dated" } } },
["c"] = { dat_s = "y", depr_p = "e", nom_p = "y" },
["d"] = { nom_p = "owie" },
["ek"] = { nom_p = { "y", stem = "palatal" } },
["f"] = { nom_p = "owie" },
["g"] = { depr_p = "i", gen_s = "i", nom_p = { "y", stem = "palatal" } },
["h"] = { nom_p = "owie" },
["i"] = { acc_s = { "ego", "ę" }, dat_s = { "", "emu" }, depr_p = "e", gen_s = { "", "ego" }, nom_p = "owie" },
["id"] = { nom_p = { "", stem = "palatal" } },
["j"] = { depr_p = "e", nom_p = "e" },
["k"] = { depr_p = "i", gen_s = "i", nom_p = "owie" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i", nom_p = "e" },
["m"] = { nom_p = "owie" },
["ok"] = { nom_p = { "y", stem = "palatal" } },
["p"] = { nom_p = "owie" },
["ped"] = { nom_p = { "", stem = "palatal" } },
["r"] = { nom_p = { "y", stem = "palatal" } },
["ri"] = { acc_s = "ę", dat_s = "i", gen_s = "i" },
["rz"] = { dat_s = { "e", stem = "palatal" }, depr_p = "y" },
["usz"] = { nom_p = "e" },
["uz"] = { dat_s = { "e", stem = "palatal" }, depr_p = "y" },
["w"] = { nom_p = "owie" },
["yd"] = { nom_p = { "", stem = "palatal" } },
["yk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["z"] = { dat_s = "y", depr_p = "e", nom_p = "owie" },
["ór"] = { nom_p = "owie" },
["ł"] = { nom_p = "owie" },
["łk"] = { gen_p = { { "", stem = "inserted_e" }, "ów" } },
["ż"] = { dat_s = "y", depr_p = "e", nom_p = "owie" },
},
},
["m-pr common sg e"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "e", dat_s = "e", depr_p = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e", voc_s = "e" },
},
},
["m-pr common sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = "ie", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = { "y", stem = "palatal" } },
["ac"] = { nom_p = "i" },
["as"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["bl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["bol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["c"] = { nom_p = "iowie" },
["d"] = { nom_p = "iowie" },
["dl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["ec"] = { nom_p = "i" },
["el"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["eśc"] = { nom_p = "i" },
["gl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["hl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["hol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["i"] = { dat_s = "jemu", gen_s = "jego" },
["ic"] = { nom_p = "i" },
["iol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["is"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["iśc"] = { nom_p = "i" },
["kal"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["kol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["nc"] = { nom_p = "i" },
["ns"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["oc"] = { nom_p = "i" },
["os"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["pc"] = { nom_p = "i" },
["pl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["ps"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["rc"] = { nom_p = "i" },
["rl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["s"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, depr_p = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["tn"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["u"] = { dat_s = "jemu", gen_s = "jego", nom_p = "i" },
["uc"] = { nom_p = "i" },
["ul"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["us"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["wl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["wol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["y"] = { dat_s = "jemu", gen_s = "jego", nom_p = "i" },
["yc"] = { nom_p = "i" },
["yl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["ys"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["zol"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["ęs"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["śl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["źl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
["źn"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["ż"] = { nom_p = "iowie" },
["żl"] = { dat_s = "emu", gen_s = "ego", nom_p = "i" },
},
},
["m-pr common sg o"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "a", dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie", voc_s = "u" },
["d"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["er"] = { nom_p = "o" },
["g"] = { depr_p = "i", ins_s = "iem" },
["gol"] = { acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, depr_p = { "e", "o" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", "u" }, nom_p = { "o", "owie" } },
["h"] = { voc_s = "o" },
["k"] = { depr_p = "i", ins_s = "iem" },
["m"] = { voc_s = "o" },
["ol"] = { voc_s = "o" },
["p"] = { voc_s = "o" },
["r"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["s"] = { voc_s = "o" },
["z"] = { voc_s = "o" },
["ł"] = { acc_s = "ę", dat_s = { "e", stem = "palatal" }, depr_p = { "a", "y" }, gen_s = "y", ins_s = "ą", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
},
},
["m-pr common sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = { "", stem = "palatal" } },
["acz"] = { nom_p = "y" },
["arz"] = { nom_p = "y" },
["asz"] = { nom_p = "owie" },
["aż"] = { nom_p = "y" },
["bcz"] = { nom_p = "y" },
["brz"] = { nom_p = "y" },
["c"] = { nom_p = "y" },
["drz"] = { nom_p = "y" },
["dzn"] = { nom_p = "i" },
["ecz"] = { nom_p = "y" },
["eż"] = { nom_p = "y" },
["h"] = { nom_p = { "i", stem = "virile" } },
["irz"] = { nom_p = "y" },
["lcz"] = { nom_p = "y" },
["mcz"] = { nom_p = "y" },
["ncz"] = { nom_p = "y" },
["ocz"] = { nom_p = "y" },
["on"] = { nom_p = { "", stem = "fronted+palatal" } },
["oż"] = { nom_p = "y" },
["pcz"] = { nom_p = "y" },
["r"] = { nom_p = { "y", stem = "palatal" } },
["rcz"] = { nom_p = "y" },
["ron"] = { nom_p = { "", stem = "palatal" } },
["rz"] = { nom_p = "owie" },
["soł"] = { nom_p = { "i", stem = "fronted+palatal" } },
["sz"] = { nom_p = { "i", stem = "virile" } },
["tcz"] = { nom_p = "y" },
["ucz"] = { nom_p = "y" },
["udz"] = { nom_p = "y" },
["urz"] = { nom_p = "y" },
["usz"] = { nom_p = "owie" },
["uż"] = { nom_p = "y" },
["ycz"] = { nom_p = "y" },
["ydz"] = { nom_p = "y" },
["yż"] = { nom_p = "y" },
["z"] = { nom_p = { "owie", "y" } },
["ącz"] = { nom_p = "y" },
["ęcz"] = { nom_p = "y" },
["ęż"] = { nom_p = "y" },
["ł"] = { nom_p = { "i", stem = "palatal" } },
["łcz"] = { nom_p = "y" },
["łon"] = { nom_p = { "", stem = "palatal" } },
["łzł"] = { nom_p = { { "i", stem = "virile" }, { "i", stem = "palatal" } } },
["ńcz"] = { nom_p = "y" },
["źcz"] = { nom_p = "y" },
["ż"] = { nom_p = "owie" },
["żcz"] = { nom_p = "y" },
["żd"] = { nom_p = { "", stem = "palatal", note = "rare" } },
},
},
["m-pr given sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["aak"] = { nom_p = "owie" },
["ad"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["ak"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u" },
["c"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["ck"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["der"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" } },
["dot"] = { nom_p = "owie" },
["e"] = { dat_p = "m", dat_s = "mu", depr_p = "", gen_p = "ch", gen_s = "go", ins_p = "mi", ins_s = "m", loc_p = "ch", loc_s = "m", nom_p = "" },
["eg"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["ew"] = { nom_p = "owie" },
["g"] = { depr_p = "i", ins_s = "iem", loc_s = "u" },
["h"] = { loc_s = "u" },
["ier"] = { nom_p = "owie" },
["ik"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["j"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["jan"] = { nom_p = "owie" },
["k"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["l"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["las"] = { nom_p = "owie" },
["lf"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["n"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["op"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["r"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["ros"] = { nom_p = "owie" },
["s"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ses"] = { nom_p = "owie" },
["st"] = { nom_p = "owie" },
["t"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["tan"] = { nom_p = "owie" },
["u"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ur"] = { nom_p = "owie" },
["van"] = { nom_p = "owie" },
["w"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["wer"] = { nom_p = "owie" },
["weł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "owie", stem = "reduced" } },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, depr_p = { "y", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "a", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "owie", stem = "spelled" } },
["yk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["yp"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["z"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["zor"] = { nom_p = "owie" },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { { "e", stem = "shortened" }, { "owie", stem = "shortened" } } },
["ąd"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["łk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ś"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
},
},
["m-pr given sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i" },
["sz"] = { dat_s = "y", depr_p = "e" },
["u"] = { dat_s = "i", gen_s = { "i", "y" } },
},
},
["m-pr given sg e"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "e", dat_s = "e", depr_p = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e", voc_s = "e" },
},
},
["m-pr given sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "emu", depr_p = "e", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "owie" },
["n"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "owie", stem = "palatal" } },
},
},
["m-pr given sg o"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie", voc_s = "u" },
["at"] = { dat_p = "onom", dat_s = "onowi", depr_p = "ony", gen_p = "onów", gen_s = "ona", ins_p = "onami", ins_s = "onem", loc_p = "onach", loc_s = "onie", nom_p = "onowie", voc_s = { "o", "onie" } },
["c"] = { depr_p = "o", ins_s = "o", voc_s = "o" },
["d"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["e"] = { depr_p = { "a", "o" }, loc_s = "o", voc_s = "o" },
["g"] = { dat_p = { "o", "om" }, dat_s = { "o", "owi" }, depr_p = { "i", "o" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "iem", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", "u" }, nom_p = { "o", "owie" }, voc_s = { "o", "u" } },
["k"] = { depr_p = "i", ins_s = "iem" },
["l"] = { voc_s = "o" },
["n"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["r"] = { voc_s = "o" },
["t"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
},
},
["m-pr given sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "owie" },
["rr"] = { dat_s = { "emu", "y'emu" }, depr_p = { "e", "y'e" }, gen_s = { "ego", "y'ego" }, nom_p = { "owie", "y" } },
},
},
["m-pr proper sg "] = {
copies = { acc_s = "gen_s" },
rules = {
[""] = { acc_p = "ów", dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie", voc_p = "owie", voc_s = "u" },
["ek"] = { acc_p = {}, dat_p = {}, depr_p = {}, gen_p = {}, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
["g"] = { depr_p = "i", ins_s = "iem" },
["k"] = { depr_p = "i", ins_s = "iem" },
["l"] = { depr_p = "e" },
["n"] = { loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["s"] = { loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["sz"] = { nom_p = { "e", "owie" }, voc_p = { "e", "owie" } },
["t"] = { loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["u"] = { depr_p = "", nom_p = "", voc_p = "", voc_s = "" },
["z"] = { depr_p = "e" },
},
},
["m-pr proper sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["g"] = { depr_p = "i", gen_s = "i" },
},
},
["m-pr proper sg e"] = {
copies = { },
rules = {
[""] = { acc_p = "e", acc_s = "e", dat_p = "e", dat_s = "e", depr_p = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e", voc_p = "e", voc_s = "e" },
},
},
["m-pr proper sg o"] = {
copies = { acc_s = "gen_s" },
rules = {
[""] = { acc_p = "o", dat_p = "o", dat_s = "o", depr_p = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o", voc_p = "o", voc_s = "o" },
},
},
["m-pr surname sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ac"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["acz"] = { nom_p = "owie" },
["ai"] = { dat_s = { "emu", "owi" }, gen_s = { "a", "ego" } },
["az"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["b"] = { loc_s = { "e", stem = "palatal" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["cu"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["d"] = { loc_s = { "e", stem = "palatal" } },
["dz"] = { nom_p = "owie" },
["e"] = { dat_p = "", dat_s = "mu", depr_p = "", gen_p = "", gen_s = "go", ins_p = "", ins_s = "m", loc_p = "", loc_s = "m", nom_p = "" },
["eau"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["ecz"] = { nom_p = "owie" },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["el"] = { dat_p = { "om", { "om", stem = "reduced" } }, dat_s = { "owi", { "owi", stem = "reduced" } }, depr_p = { "e", { "e", stem = "reduced" } }, gen_p = { "ów", { "ów", stem = "reduced" } }, gen_s = { "a", { "a", stem = "reduced" } }, ins_p = { "ami", { "ami", stem = "reduced" } }, ins_s = { "em", { "em", stem = "reduced" } }, loc_p = { "ach", { "ach", stem = "reduced" } }, loc_s = { "u", { "u", stem = "reduced" } }, nom_p = { "owie", { "owie", stem = "reduced" } } },
["eu"] = { dat_p = { "", "m" }, dat_s = { "", "mu" }, depr_p = "", gen_p = { "", "ch" }, gen_s = { "", "go" }, ins_p = { "", "mi" }, ins_s = { "", "m" }, loc_p = { "", "ch" }, nom_p = "" },
["ez"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["eł"] = { dat_p = { "om", { "om", stem = "reduced" } }, dat_s = { "owi", { "owi", stem = "reduced" } }, depr_p = { "y", { "y", stem = "reduced" } }, gen_p = { "ów", { "ów", stem = "reduced" } }, gen_s = { "a", { "a", stem = "reduced" } }, ins_p = { "ami", { "ami", stem = "reduced" } }, ins_s = { "em", { "em", stem = "reduced" } }, loc_p = { "ach", { "ach", stem = "reduced" } }, loc_s = { { "e", stem = "palatal" }, { "e", stem = "reduced+palatal" } }, nom_p = { "owie", { "owie", stem = "reduced" } } },
["f"] = { loc_s = { "e", stem = "palatal" } },
["g"] = { depr_p = "i", ins_s = "iem" },
["gh"] = { depr_p = "i" },
["i"] = { dat_p = { "m", "om" }, dat_s = "", depr_p = "e", gen_p = { "ch", "ów" }, gen_s = "", ins_p = { "ami", "mi" }, ins_s = { "em", "m" }, loc_p = { "ach", "ch" }, loc_s = { "m", "u" } },
["ic"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["iel"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ieu"] = { loc_s = { "", "m" } },
["ieł"] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["ii"] = { dat_p = { "", "m" }, depr_p = "", gen_p = { "", "ch" }, ins_p = { "", "mi" }, ins_s = { "", "m" }, loc_p = { "", "ch" }, loc_s = { "", "m" }, nom_p = "" },
["iz"] = { nom_p = "owie" },
["j"] = { depr_p = "e" },
["jc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["k"] = { depr_p = "i", ins_s = "iem" },
["kój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["l"] = { depr_p = "e" },
["lc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["lcz"] = { nom_p = "owie" },
["lz"] = { nom_p = "owie" },
["m"] = { loc_s = { "e", stem = "palatal" } },
["n"] = { loc_s = { "e", stem = "palatal" } },
["nc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ncz"] = { nom_p = "owie" },
["nz"] = { nom_p = "owie" },
["oc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ocz"] = { nom_p = "owie" },
["oe"] = { dat_s = "", gen_s = "", ins_s = "", loc_s = "" },
["oz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["p"] = { loc_s = { "e", stem = "palatal" } },
["pc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["que"] = { dat_p = "'om", gen_p = "'ów", ins_p = "'ami", loc_p = "'ach", nom_p = "'owie" },
["r"] = { loc_s = { "e", stem = "palatal" } },
["rc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["rcz"] = { nom_p = "owie" },
["reć"] = { dat_p = { { "om", stem = "reduced" }, "om" }, dat_s = { { "owi", stem = "reduced" }, "owi" }, depr_p = { { "e", stem = "reduced" }, "e" }, gen_p = { { "ów", stem = "reduced" }, "ów" }, gen_s = { { "a", stem = "reduced" }, "a" }, ins_p = { { "ami", stem = "reduced" }, "ami" }, ins_s = { { "em", stem = "reduced" }, "em" }, loc_p = { { "ach", stem = "reduced" }, "ach" }, loc_s = { { "u", stem = "reduced" }, "u" }, nom_p = { { "owie", stem = "reduced" }, "owie" } },
["rp"] = { dat_p = { { "om", stem = "palatal" }, "om" }, dat_s = { { "owi", stem = "palatal" }, "owi" }, depr_p = { { "e", stem = "palatal" }, "y" }, gen_p = { { "ów", stem = "palatal" }, "ów" }, gen_s = { "a", { "a", stem = "palatal" } }, ins_p = { "ami", { "ami", stem = "palatal" } }, ins_s = { "em", { "em", stem = "palatal" } }, loc_p = { "ach", { "ach", stem = "palatal" } }, loc_s = { { "e", stem = "palatal" }, { "u", stem = "palatal" } }, nom_p = { { "owie", stem = "palatal" }, "owie" } },
["rz"] = { nom_p = "owie" },
["rót"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["s"] = { loc_s = { "e", stem = "palatal" } },
["t"] = { loc_s = { "e", stem = "palatal" } },
["tz"] = { nom_p = "owie" },
["u"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, depr_p = { "", "y" }, gen_p = { "", "ów" }, gen_s = { "", "a" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = "", nom_p = { "", "owie" } },
["uc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ucz"] = { nom_p = "owie" },
["ue"] = { dat_s = "'owi", gen_s = "'a", loc_s = "'u" },
["ues"] = { dat_p = "'om", dat_s = "'owi", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", loc_p = "'ach", loc_s = "'u", nom_p = "'owie" },
["ugh"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["w"] = { loc_s = { "e", stem = "palatal" } },
["wc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["wec"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["x"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["y"] = { depr_p = "e" },
["yc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ycz"] = { nom_p = "owie" },
["yz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["z"] = { depr_p = "e", nom_p = { "e", "owie" } },
["zcz"] = { nom_p = "owie" },
["ób"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["ój"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "e", stem = "shortened" }, "e" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "u", stem = "shortened" }, "u" }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ól"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "e", stem = "shortened" }, "e" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "u", stem = "shortened" }, "u" }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ór"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ót"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["óz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["ół"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ąc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ącz"] = { nom_p = "owie" },
["ąz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["ć"] = { depr_p = "e" },
["ęc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ęcz"] = { nom_p = "owie" },
["ł"] = { loc_s = { "e", stem = "palatal" } },
["łc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["łcz"] = { nom_p = "owie" },
["ń"] = { depr_p = "e" },
["ńcz"] = { nom_p = "owie" },
["ś"] = { depr_p = "e", nom_p = { "e", "owie" } },
["ź"] = { depr_p = "e" },
["ż"] = { depr_p = "e" },
},
},
["m-pr surname sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["c"] = { dat_s = "y", depr_p = "e" },
["cz"] = { dat_s = "y", depr_p = "e" },
["dz"] = { dat_s = "y", depr_p = "e" },
["g"] = { depr_p = "i", gen_s = "i" },
["i"] = { dat_s = "", depr_p = "e", gen_s = "" },
["j"] = { depr_p = "e" },
["k"] = { depr_p = "i", gen_s = "i" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i" },
["pi"] = { dat_s = "i", gen_s = "i" },
["ri"] = { dat_s = "i", gen_s = "i" },
["rz"] = { dat_s = "y", depr_p = "e" },
["sm"] = { dat_s = "ie" },
["sz"] = { dat_s = "y", depr_p = "e" },
["wi"] = { dat_s = "i", gen_s = "i" },
["x"] = { dat_s = { "e", stem = "spelled+palatal" } },
["y"] = { dat_s = "i", depr_p = "e", gen_s = "i" },
["yzm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["zm"] = { dat_s = "ie" },
["ż"] = { dat_s = "y", depr_p = "e" },
},
},
["m-pr surname sg e"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "om", dat_s = "emu", depr_p = "e", gen_p = "ów", gen_s = "ego", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "em", nom_p = "owie", voc_s = "e" },
["ak"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "i", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "iem", loc_p = "e'ach", loc_s = "e'u", nom_p = "e'owie", voc_s = "e'u" },
["ant"] = { dat_p = "om", dat_s = "emu", depr_p = "e", gen_p = "ów", gen_s = "ego", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "em", nom_p = "owie", voc_s = "e" },
["bl"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'e", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = "e'u", nom_p = "e'owie", voc_s = "e'u" },
["c"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", nom_p = "e'owie" },
["gn"] = { depr_p = "e'e", loc_s = "e'u", voc_s = "e'u" },
["id"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'owie", voc_s = { "e", stem = "palatal" } },
["ion"] = { depr_p = "e", voc_s = "e" },
["n"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'owie", voc_s = { "e", stem = "palatal" } },
["ow"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = "e", nom_p = "e'owie" },
["r"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'owie", voc_s = { "e", stem = "palatal" } },
["rt"] = { dat_p = "om", dat_s = "emu", depr_p = "e", gen_p = "ów", gen_s = "ego", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "em", nom_p = "owie", voc_s = "e" },
["t"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'owie", voc_s = { "e", stem = "palatal" } },
["v"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'y", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", nom_p = "e'owie" },
["yl"] = { dat_p = "e'om", dat_s = "e'owi", depr_p = "e'e", gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = "e'u", nom_p = "e'owie", voc_s = "e'u" },
},
},
["m-pr surname sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = "ie", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = { "y", stem = "palatal" } },
["ak"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["c"] = { nom_p = { "i", "iowie" } },
["czk"] = { nom_p = "owie" },
["d"] = { nom_p = { "i", "iowie" } },
["dk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["f"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["g"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["h"] = { nom_p = { "i", "iowie" } },
["hk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["l"] = { dat_s = "emu", depr_p = "e", gen_s = "ego", nom_p = { "i", "owie" } },
["lk"] = { nom_p = "owie" },
["m"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["n"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["ok"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["r"] = { nom_p = { "i", "iowie" } },
["s"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["t"] = { nom_p = { "i", "iowie" } },
["tk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["z"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["śk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
},
},
["m-pr surname sg o"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "i", gen_p = "ów", gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["and"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["b"] = { depr_p = { "o", "y" }, gen_s = { "a", "o", "y" } },
["c"] = { acc_s = "o", dat_s = "o", depr_p = "o", gen_s = "o", ins_s = "o", loc_s = "o" },
["d"] = { depr_p = "y", gen_s = { "a", "y" } },
["ejn"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o", "y" }, ins_p = { "ami", "o" }, ins_s = { "em", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "o", "owie" } },
["ett"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["h"] = { depr_p = "y", gen_s = "y" },
["i"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["ied"] = { acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "o", "owie" } },
["j"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["jd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["l"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["m"] = { depr_p = "y", gen_s = "y" },
["mb"] = { dat_p = { "o", "om" }, gen_p = { "o", "ów" }, ins_p = { "ami", "o" }, loc_p = { "ach", "o" }, nom_p = { "o", "owie" } },
["n"] = { depr_p = "y", gen_s = "y" },
["ng"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "i", "o" }, gen_p = { "o", "ów" }, gen_s = { "a", "i", "o" }, ins_p = { "ami", "o" }, ins_s = { "iem", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o", "u" }, nom_p = { "o", "owie" } },
["nt"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o", "y" }, ins_p = { "ami", "o" }, ins_s = { "em", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "o", "owie" } },
["od"] = { gen_s = { "a", "o" } },
["ott"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["p"] = { depr_p = "y", gen_s = "y" },
["r"] = { depr_p = "y", gen_s = "y" },
["rd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["rr"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["s"] = { depr_p = "y", gen_s = "a" },
["sc"] = { dat_p = "o", gen_p = "o", ins_p = "o", loc_p = "o", nom_p = "o" },
["ss"] = { acc_s = "a", dat_s = "owi", ins_s = "em" },
["t"] = { depr_p = "y", gen_s = "y" },
["ud"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["w"] = { depr_p = { "o", "y" }, gen_s = { "a", "o", "y" } },
["yd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["z"] = { acc_s = { "a", "ę" }, dat_s = { "owi", "y" }, depr_p = "e", gen_s = { "a", "y" }, ins_s = { "em", "ą" }, loc_s = { "u", "y" } },
["zad"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, ins_s = { "em", "ą" } },
["ł"] = { depr_p = "y", gen_s = "y" },
["łd"] = { gen_s = "y" },
["ńd"] = { gen_s = "y" },
},
},
["m-pr surname sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "owie" },
["art"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["aw"] = { nom_p = "owie" },
["azn"] = { nom_p = { "", stem = "palatal" } },
["azł"] = { nom_p = { "owie", { "i", stem = "palatal" } } },
["er"] = { nom_p = "y" },
["ern"] = { nom_p = "owie" },
["h"] = { nom_p = { "owie", { "i", stem = "virile" } } },
["iad"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["k"] = { dat_s = "iemu", depr_p = "ie", gen_s = "iego", nom_p = { "y", stem = "palatal" } },
["l"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im" },
["n"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["sk"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im" },
["sn"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["st"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["sł"] = { nom_p = { "owie", { "i", stem = "palatal" } } },
["th"] = { dat_s = "y'emu", depr_p = "y'e", gen_s = "y'ego", nom_p = "y" },
["tzk"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im" },
["w"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["yt"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ér"] = { dat_s = "y'emu", depr_p = "y'e", gen_s = "y'ego", nom_p = "y" },
["ąc"] = { nom_p = { "owie", "y" } },
["ł"] = { nom_p = { { "i", stem = "palatal" }, "owie" } },
["źn"] = { nom_p = "owie" },
},
},
["m-anml common sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = "a", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "y" },
["ac"] = { acc_s = "a", dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["az"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["b"] = { loc_s = { "e", stem = "palatal" } },
["bal"] = { gen_p = "i" },
["bel"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["c"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["d"] = { loc_s = { "e", stem = "palatal" } },
["del"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["dz"] = { gen_p = "ów" },
["e"] = { acc_s = "", dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["eet"] = { acc_s = { "", "a" }, gen_s = { "a", "u" } },
["ek"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["ez"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["eł"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["f"] = { loc_s = { "e", stem = "palatal" } },
["g"] = { ins_s = "iem", nom_p = "i" },
["iel"] = { gen_p = "i" },
["iz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["j"] = { nom_p = "e" },
["k"] = { ins_s = "iem", nom_p = "i" },
["l"] = { gen_p = { "i", "ów" }, nom_p = "e" },
["lac"] = { gen_p = "ów" },
["m"] = { loc_s = { "e", stem = "palatal" } },
["mul"] = { gen_p = "i" },
["n"] = { loc_s = { "e", stem = "palatal" } },
["niś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["oll"] = { gen_p = "i" },
["ont"] = { acc_s = { "", "a" }, gen_s = { "a", "u" } },
["oz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["oś"] = { gen_p = { "", stem = "soft" } },
["p"] = { loc_s = { "e", stem = "palatal" } },
["paw"] = { acc_s = { "a", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["r"] = { loc_s = { "e", stem = "palatal" } },
["raś"] = { gen_p = { "", stem = "soft" } },
["rp"] = { acc_s = { "a", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["s"] = { loc_s = { "e", stem = "palatal" } },
["sz"] = { gen_p = { "y", "ów" } },
["t"] = { loc_s = { "e", stem = "palatal" } },
["tat"] = { acc_s = { "", "a" } },
["u"] = { acc_s = "", dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uc"] = { acc_s = "a", dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["uz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["w"] = { loc_s = { "e", stem = "palatal" } },
["x"] = { acc_s = { "a", stem = "spelled" }, dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "a", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "y", stem = "spelled" } },
["y"] = { nom_p = "e" },
["yz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["yś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["z"] = { gen_p = { "y", { "ów", note = "rare" } }, nom_p = "e" },
["zal"] = { gen_p = "i" },
["ób"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ód"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ól"] = { gen_p = { "i", stem = "shortened" } },
["ór"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ów"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { acc_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąb"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąc"] = { acc_s = "a", dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ć"] = { gen_p = { { "", stem = "soft" }, "ów" }, nom_p = "e" },
["ł"] = { loc_s = { "e", stem = "palatal" } },
["łż"] = { gen_p = { "y", "ów" } },
["ń"] = { gen_p = { "", stem = "soft" }, nom_p = "e" },
["ś"] = { nom_p = "e" },
["ź"] = { gen_p = { "", stem = "soft" }, nom_p = "e" },
["ż"] = { nom_p = "e" },
},
},
["m-anml common sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["c"] = { dat_s = "y", nom_p = "e" },
["j"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["k"] = { gen_s = "i", nom_p = "i" },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["o"] = { acc_s = "a", dat_p = "a", dat_s = "a", gen_p = "a", gen_s = "a", ins_p = "a", ins_s = "a", loc_p = "a", nom_p = "a", voc_s = "a" },
},
},
["m-anml common sg e"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "e'om", dat_s = "e'owi", depr_p = {}, gen_p = "e'ów", gen_s = "e'a", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = "e", nom_p = "e'y" },
},
},
["m-anml common sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "i", dat_s = "i", depr_p = {}, gen_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", loc_s = "i", nom_p = "i" },
["sk"] = { dat_p = "im", dat_s = "iemu", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
},
},
["m-anml common sg o"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "a", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "o" },
["d"] = { acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "o", "y" } },
["g"] = { acc_s = "o", dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["i"] = { voc_s = "u" },
},
},
["m-anml common sg y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_s = "ego", dat_p = "ym", dat_s = "emu", depr_p = {}, gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["m"] = { acc_s = { "ego", "y" } },
["ow"] = { acc_s = { "ego", "y" } },
["t"] = { acc_s = { "ego", "y" } },
},
},
["m-anml given sg "] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
},
},
["m-anml proper sg "] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["c"] = { ins_s = { "em", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ec"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, loc_p = { "ach", stem = "reduced" } },
["k"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["sz"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "a", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "y", stem = "spelled" } },
},
},
["m-in common sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = "", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["A"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["B"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["C"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["D"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["F"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["I"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["K"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["L"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-i", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
["M"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["ML"] = { acc_s = { "", "-a" }, gen_p = { "-i", "-ów" }, gen_s = { "-a", "-u" } },
["N"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["OP"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["P"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["R"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ze", nom_p = "-y" },
["S"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["T"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = "", nom_p = { "", "-y" } },
["V"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["abl"] = { gen_s = "a" },
["ac"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["ail"] = { gen_p = { "i", { "ów", note = "colloquial" } } },
["ak"] = { gen_s = "a" },
["am"] = { loc_s = { "e", stem = "palatal" } },
["arc"] = { gen_s = "u" },
["az"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["bel"] = { gen_p = { "i", stem = "reduced" } },
["ber"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = "a", ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["bl"] = { gen_p = { "i", "ów" } },
["bor"] = { gen_s = "u" },
["bul"] = { gen_s = "u" },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["cal"] = { gen_p = "i" },
["car"] = { gen_s = "a" },
["cel"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["cer"] = { gen_s = "a" },
["cik"] = { gen_s = "u" },
["dal"] = { gen_p = "i" },
["dej"] = { gen_s = { "a", "u" } },
["del"] = { gen_p = { "i", stem = "reduced" } },
["dol"] = { gen_p = { "i", "ów" } },
["dz"] = { gen_p = "ów" },
["dź"] = { acc_s = { "", { "a", stem = "shortened", note = "colloquial" } }, dat_p = { "om", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["e"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ecz"] = { gen_s = "u" },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["el"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["em"] = { loc_s = { "e", stem = "palatal" } },
["enc"] = { gen_s = "a" },
["eol"] = { gen_p = { "i", "ów" } },
["eor"] = { gen_s = "u" },
["eus"] = { gen_s = "a" },
["ez"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["eć"] = { gen_p = { "", stem = "reduced+soft" } },
["eł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["eń"] = { gen_p = { "", stem = "soft" } },
["fel"] = { gen_p = { "i", stem = "reduced" } },
["g"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["gal"] = { gen_p = "i" },
["gel"] = { gen_p = { "i", stem = "reduced" } },
["ger"] = { gen_s = "a" },
["gol"] = { gen_p = "i" },
["gor"] = { gen_s = "u" },
["gół"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["h"] = { loc_s = "u" },
["haj"] = { gen_s = "a" },
["hej"] = { gen_s = { "a", "u" } },
["hel"] = { gen_p = { "i", stem = "reduced" } },
["her"] = { gen_s = "a" },
["hol"] = { gen_p = { "i", "ów" } },
["how"] = { gen_s = "" },
["hyl"] = { gen_p = "i" },
["hór"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["i"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ial"] = { gen_p = { "i", "ów" } },
["ic"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["iej"] = { gen_s = "a" },
["iek"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["iel"] = { gen_p = { "i", stem = "reduced" } },
["ij"] = { gen_s = "a" },
["ik"] = { gen_s = "a" },
["il"] = { gen_p = { "i", "ów" } },
["im"] = { loc_s = { "e", stem = "palatal" } },
["iol"] = { gen_p = "i" },
["ior"] = { gen_s = "u" },
["isz"] = { gen_s = "u" },
["itr"] = { gen_s = "a" },
["iz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["izd"] = { loc_s = { "e", stem = "palatal" } },
["iąc"] = { gen_p = { "y", stem = "shortened" } },
["iąk"] = { gen_s = "u" },
["iść"] = { ins_p = "mi" },
["j"] = { loc_s = "u", nom_p = "e" },
["jas"] = { gen_s = "a" },
["jem"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "u", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["jm"] = { loc_s = { "e", stem = "palatal" } },
["k"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["kal"] = { gen_p = "i" },
["kch"] = { gen_s = { "a", "u" } },
["kej"] = { acc_s = { "", "a" }, gen_s = "a" },
["ker"] = { gen_s = "a" },
["kic"] = { gen_s = "u" },
["kl"] = { gen_p = { "i", "ów" } },
["km"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["kol"] = { gen_p = "i" },
["kor"] = { gen_s = "u" },
["kr"] = { gen_s = "a" },
["kul"] = { gen_s = "u" },
["l"] = { loc_s = "u", nom_p = "e" },
["laż"] = { gen_p = "y" },
["lc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ler"] = { gen_s = "a" },
["ll"] = { gen_p = { "i", "ów" } },
["lm"] = { loc_s = { "e", stem = "palatal" } },
["lol"] = { gen_p = { "i", "ów" } },
["lor"] = { gen_s = "u" },
["lus"] = { gen_s = "a" },
["ląg"] = { gen_s = "a" },
["ląt"] = { gen_s = "u" },
["m"] = { loc_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["maj"] = { gen_s = "a" },
["mal"] = { gen_p = "i" },
["mik"] = { gen_s = "u" },
["mol"] = { gen_p = "i" },
["mor"] = { gen_s = "u" },
["nal"] = { gen_p = { "i", "ów" } },
["nar"] = { gen_s = "a" },
["nc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["nch"] = { nom_p = "e" },
["nek"] = { gen_s = { "u", stem = "reduced" } },
["nel"] = { dat_p = "om", dat_s = "owi", gen_p = { "i", "ów" }, gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ner"] = { gen_s = "a" },
["neż"] = { gen_p = "y", gen_s = { "a", "u" } },
["nol"] = { gen_p = "i" },
["nor"] = { gen_s = "u" },
["nsz"] = { gen_s = "u" },
["nur"] = { gen_s = "a" },
["nyp"] = { gen_s = "a" },
["nóg"] = { gen_s = { "a", stem = "shortened" } },
["nóż"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["oc"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["och"] = { gen_s = "a" },
["ocz"] = { gen_s = "u" },
["oik"] = { gen_s = "u" },
["om"] = { loc_s = { "e", stem = "palatal" } },
["ool"] = { gen_p = "i" },
["or"] = { gen_s = "a" },
["our"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
["oz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["oń"] = { gen_p = { "", stem = "soft" } },
["pal"] = { gen_p = "i" },
["pel"] = { gen_p = { "i", stem = "reduced" } },
["per"] = { gen_s = "a" },
["pik"] = { gen_s = "u" },
["pol"] = { gen_p = { "i", "ów" } },
["por"] = { gen_s = "u" },
["prz"] = { gen_s = "u" },
["ral"] = { gen_p = { "i", "ów" } },
["rc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["rcz"] = { gen_s = "u" },
["rel"] = { dat_p = "om", dat_s = "owi", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["reń"] = { gen_s = { "a", { "a", stem = "reduced" } } },
["rm"] = { loc_s = { "e", stem = "palatal" } },
["rol"] = { gen_p = "i" },
["ror"] = { gen_s = "u" },
["rsz"] = { gen_s = "u" },
["rus"] = { acc_s = { "", "a" }, gen_s = "a" },
["rąg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["sal"] = { gen_p = "i" },
["sar"] = { gen_s = "a" },
["sel"] = { gen_p = { "i", stem = "reduced" } },
["ser"] = { gen_s = "a" },
["sh"] = { nom_p = "e" },
["sm"] = { loc_s = "ie" },
["sol"] = { gen_p = "i" },
["sz"] = { gen_p = { "y", "ów" } },
["tal"] = { gen_p = "i" },
["tch"] = { nom_p = "e" },
["tel"] = { gen_p = { "i", stem = "reduced" } },
["til"] = { gen_p = "ów" },
["tl"] = { gen_p = { "i", "ów" } },
["tm"] = { loc_s = { "e", stem = "palatal" } },
["tol"] = { gen_p = { "i", "ów" } },
["tus"] = { gen_s = "a" },
["tyk"] = { gen_s = "u" },
["u"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["uel"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ul"] = { gen_p = { "i", "ów" }, gen_s = "a" },
["um"] = { loc_s = { "e", stem = "palatal" } },
["unk"] = { acc_s = { "", "a" }, gen_s = "a" },
["urz"] = { gen_s = "u" },
["uz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["wl"] = { gen_p = "i" },
["wor"] = { gen_s = "u" },
["wyk"] = { gen_s = "u" },
["wyż"] = { gen_p = "ów" },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "u", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "y", stem = "spelled" } },
["y"] = { loc_s = "u", nom_p = "e" },
["yc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ycz"] = { gen_p = { "y", "ów" } },
["yj"] = { gen_s = "a" },
["yk"] = { gen_s = "a" },
["yl"] = { gen_p = { "i", "ów" } },
["ym"] = { loc_s = { "e", stem = "palatal" } },
["ysz"] = { gen_s = "u" },
["yz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["z"] = { gen_p = { "y", { "ów", note = "rare" } }, gen_s = "a", loc_s = "u", nom_p = "e" },
["zac"] = { gen_p = "ów" },
["zal"] = { gen_p = { "i", "ów" } },
["zcz"] = { gen_s = "u" },
["zd"] = { loc_s = { "e", stem = "fronted+palatal" } },
["zel"] = { gen_p = { "i", stem = "reduced" } },
["zer"] = { gen_s = "a" },
["zeń"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["zol"] = { gen_p = "i" },
["zub"] = { gen_s = "a" },
["ząg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ób"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ól"] = { gen_p = { "i", "ów" } },
["ór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["órg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ót"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óż"] = { gen_p = { { "y", stem = "shortened" }, { "ów", stem = "shortened" } } },
["ąb"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ąk"] = { gen_s = "a" },
["ąp"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["ąt"] = { gen_s = "a" },
["ąz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ć"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ęs"] = { gen_s = "a" },
["łat"] = { gen_s = { "a", "u" } },
["łn"] = { gen_s = "a" },
["łup"] = { gen_s = "a" },
["łąg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ń"] = { gen_s = "a", loc_s = "u", nom_p = "e" },
["ńc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ś"] = { gen_s = "a", loc_s = "u", nom_p = "e" },
["ść"] = { dat_p = "om", dat_s = "owi", gen_p = { "", stem = "soft" }, gen_s = "a", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ź"] = { gen_p = { "", stem = "shortened+soft" }, gen_s = "a", loc_s = "u", nom_p = "e" },
["ż"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
["żel"] = { dat_p = "om", dat_s = "owi", gen_p = "i", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["życ"] = { gen_s = "a" },
["żyk"] = { gen_s = "u" },
},
},
["m-in common sg a"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "a", depr_p = {}, gen_s = "a", ins_p = "a", ins_s = "a", loc_p = "a", nom_p = "a" },
},
},
["m-in common sg e"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = "e", dat_p = "e'om", dat_s = "e'owi", depr_p = {}, gen_p = "e'ów", gen_s = "e'u", ins_p = "e'ami", ins_s = "e'em", loc_p = "e'ach", loc_s = { "e", stem = "palatal" }, nom_p = "e'y" },
["al"] = { gen_p = "e", gen_s = "e" },
["g"] = { loc_s = "e'u", nom_p = "e'e" },
["hon"] = { acc_s = { "e", "e'a" } },
["ir"] = { gen_s = "e'a" },
["l"] = { nom_p = "e'e" },
["lag"] = { gen_p = { "e'y", "e'ów" } },
["ll"] = { loc_s = "e'u" },
["on"] = { gen_s = "e'a" },
["z"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
},
},
["m-in common sg i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_s = "i", dat_p = "im", dat_s = "iemu", depr_p = {}, gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
["am"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["an"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["ban"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["bl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["bol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["dl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["el"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["gl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["hl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["hol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["i"] = { dat_s = "jemu", gen_s = "jego", nom_p = "je" },
["ian"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["im"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["kan"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["kol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["ks"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["l"] = { dat_p = "i", dat_s = "i", gen_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", loc_s = "i", nom_p = "i" },
["m"] = { acc_s = { "", stem = "palatal" }, dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["mul"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["n"] = { acc_s = { "", stem = "palatal" } },
["nom"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["pl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["ran"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["rl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["u"] = { dat_s = "jemu", gen_s = "jego", nom_p = "je" },
["wl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["wol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["y"] = { dat_s = "jemu", gen_s = "jego", nom_p = "je" },
["yl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["ym"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["zol"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["ćm"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["łan"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["śl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["źl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
["źm"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["żl"] = { dat_p = "im", dat_s = "emu", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "e" },
},
},
["m-in common sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "o", dat_s = "o", depr_p = {}, gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o", voc_s = "o" },
["i"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
},
},
["m-in common sg y"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = {}, gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
},
},
["m-in place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["Kum"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
["N"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["R"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ab"] = { gen_s = { "a", stem = "palatal" }, loc_s = { "e", stem = "palatal" } },
["adz"] = { gen_p = { "y", "ów" } },
["aj"] = { gen_s = "u" },
["ak"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["al"] = { gen_p = "i" },
["am"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["an"] = { gen_s = "u" },
["ask"] = { gen_s = "u" },
["aw"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["az"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["azd"] = { loc_s = { "e", stem = "fronted+palatal" } },
["ał"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["bcz"] = { gen_p = "ów" },
["bel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ber"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["biń"] = { gen_p = { "", stem = "soft" } },
["boń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ceń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["ck"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["d"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["der"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["doń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["duń"] = { gen_p = { "", stem = "soft" } },
["dyń"] = { gen_p = { "", stem = "soft" } },
["dz"] = { gen_p = "ów" },
["eb"] = { loc_s = { "e", stem = "palatal" } },
["eg"] = { gen_s = "u" },
["en"] = { gen_s = "u" },
["ep"] = { gen_s = "u" },
["ew"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ez"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["eł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["eń"] = { gen_p = { "", stem = "soft" } },
["eść"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["g"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["gal"] = { gen_p = { "i", "ów" } },
["goń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["h"] = { loc_s = "u", nom_p = "y" },
["hel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ic"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ik"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["iw"] = { dat_s = "owi", gen_s = "u", loc_s = { "e", stem = "palatal" } },
["j"] = { loc_s = "u", nom_p = "e" },
["k"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["kok"] = { gen_s = "u" },
["l"] = { loc_s = "u", nom_p = "e" },
["las"] = { loc_s = { "e", stem = "fronted+palatal" } },
["lc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["leń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["lk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["lm"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["m"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["n"] = { loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ng"] = { gen_s = "u" },
["nim"] = { dat_p = { { "om", stem = "palatal" }, "om" }, dat_s = { { "owi", stem = "palatal" }, "owi" }, gen_p = { { "ów", stem = "palatal" }, "ów" }, nom_p = { { "e", stem = "palatal" }, "y" } },
["ok"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ol"] = { gen_p = "i" },
["on"] = { gen_s = "u" },
["ork"] = { gen_s = "a" },
["oł"] = { loc_s = { "e", stem = "palatal" } },
["oń"] = { gen_p = { "", stem = "soft" } },
["oś"] = { gen_p = { "", stem = "soft" } },
["ość"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["p"] = { loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["pas"] = { gen_s = "a" },
["pcz"] = { gen_p = "ów" },
["pel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["r"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ral"] = { gen_p = { "i", "ów" } },
["rb"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["rc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["reń"] = { gen_s = { "a", { "a", stem = "reduced" } } },
["rk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["rp"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { "ów", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["rsz"] = { gen_p = "y" },
["ryń"] = { gen_p = { "", stem = "soft" } },
["róz"] = { gen_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } } },
["s"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["sk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["t"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["taw"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["tel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["u"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ub"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["ud"] = { gen_s = "a" },
["ug"] = { gen_s = { "a", "u" } },
["uk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ul"] = { gen_p = "i" },
["um"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["us"] = { gen_s = "a" },
["uz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["uł"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["vik"] = { gen_s = "u" },
["w"] = { dat_p = { "om", stem = "shortened" }, dat_s = { { "owi", stem = "shortened" }, { "u", stem = "shortened", note = "archaic" } }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["wel"] = { gen_p = { "ów", stem = "reduced" } },
["wil"] = { gen_p = { "i", "ów" } },
["yc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["yk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["yl"] = { gen_p = { "i", "ów" } },
["yż"] = { gen_p = "ów" },
["z"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
["zel"] = { gen_p = "i" },
["zk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["zok"] = { gen_s = "a" },
["zyż"] = { gen_p = { "y", "ów" } },
["ząb"] = { dat_p = { "om", stem = "shortened+palatal" }, dat_s = { "owi", stem = "shortened+palatal" }, gen_p = { "", stem = "shortened+palatal" }, gen_s = { "a", stem = "shortened+palatal" }, ins_p = { "ami", stem = "shortened+palatal" }, ins_s = { "em", stem = "shortened+palatal" }, loc_p = { "ach", stem = "shortened+palatal" }, loc_s = { "u", stem = "shortened+palatal" }, nom_p = { "e", stem = "shortened+palatal" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["órz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "y", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["óz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { gen_s = { "u", stem = "shortened" } },
["ąb"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ąt"] = { gen_s = "a" },
["ć"] = { gen_p = { "", stem = "soft" }, loc_s = "u", nom_p = "e" },
["ęc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ędz"] = { gen_p = { "y", "ów" } },
["ęk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ęp"] = { gen_s = "u" },
["ł"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["łak"] = { gen_s = "u" },
["łk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["łm"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["łom"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["łub"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ń"] = { gen_p = { { "", stem = "soft" }, "ów" }, loc_s = "u", nom_p = "e" },
["ś"] = { loc_s = "u", nom_p = "e" },
["śl"] = { gen_p = { "i", "ów" } },
["ź"] = { gen_p = { "", stem = "soft" }, loc_s = "u", nom_p = "e" },
["ż"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
},
},
["m-in place sg e"] = {
copies = { },
rules = {
[""] = { acc_p = { "e", "e'y" }, acc_s = "e", dat_p = { "e", "e'om" }, dat_s = { "e", "e'owi" }, depr_p = {}, gen_p = { "e", "e'ów" }, gen_s = { "e", "e'u" }, ins_p = { "e", "e'ami" }, ins_s = { "e", "e'em" }, loc_p = { "e", "e'ach" }, loc_s = { "e", { "e", stem = "palatal" } }, nom_p = { "e", "e'y" }, voc_p = { "e", "e'y" }, voc_s = { "e", { "e", stem = "palatal" } } },
},
},
["m-in place sg i"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = {}, gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
["p"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["m-in place sg y"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = {}, gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
},
},
["m-in proper sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["AT"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, nom_p = { "", "-y" } },
["F"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["J"] = { dat_p = { "", "-otom" }, dat_s = { "", "-otowi" }, gen_p = { "", "-otów" }, gen_s = { "", "-otu" }, ins_p = { "", "-otami" }, ins_s = { "", "-otem" }, loc_p = { "", "-otach" }, loc_s = { "", "-ocie" }, nom_p = { "", "-oty" } },
["L"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-i", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
["M"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["N"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["OP"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["OT"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", nom_p = "-y" },
["Ol"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-i", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
["R"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ze", nom_p = "-y" },
["S"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["Z"] = { dat_p = { "-etom", "-om" }, dat_s = { "-etowi", "-owi" }, gen_p = { "-etów", "-ów" }, gen_s = { "-etu", "-u" }, ins_p = { "-ami", "-etami" }, ins_s = { "-em", "-etem" }, loc_p = { "-ach", "-etach" }, loc_s = "-ecie", nom_p = { "-ety", "-y" } },
["b"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["c"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["d"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["el"] = { gen_s = "a" },
["g"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["h"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "y" },
["iD"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-zie", nom_p = "-y" },
["iK"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-iem", loc_p = "-ach", loc_s = "-u", nom_p = "-i" },
["k"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["kot"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { { "e", stem = "palatal" }, "" }, nom_p = { "", "y" } },
["l"] = { dat_p = "om", dat_s = "owi", gen_p = { "i", "ów" }, gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["m"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["n"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["r"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["s"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["t"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["x"] = { dat_p = { "om", stem = "spelled" }, dat_s = { "owi", stem = "spelled" }, gen_p = { "ów", stem = "spelled" }, gen_s = { "u", stem = "spelled" }, ins_p = { "ami", stem = "spelled" }, ins_s = { "em", stem = "spelled" }, loc_p = { "ach", stem = "spelled" }, loc_s = { "e", stem = "spelled+palatal" }, nom_p = { "y", stem = "spelled" } },
["ł"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["Ś"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
},
},
["n common pl "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "", ins_s = {}, loc_p = "", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["n common pl a"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ci"] = { gen_p = { "", stem = "final_soft" } },
["ekt"] = { gen_p = "ów" },
["ik"] = { gen_p = "ów" },
["it"] = { gen_p = "ów" },
["k"] = { gen_p = { "", stem = "inserted_e" } },
["l"] = { gen_p = "i" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["nt"] = { gen_p = "ów" },
["sk"] = { gen_p = "" },
["t"] = { gen_p = { "", stem = "lengthened" } },
["ust"] = { gen_p = "" },
["zwi"] = { gen_p = "" },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n common pl e"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "ym", dat_s = {}, depr_p = {}, gen_p = "ych", gen_s = {}, ins_p = "ymi", ins_s = {}, loc_p = "ych", loc_s = {}, nom_s = {}, voc_s = {} },
["aj"] = { gen_p = "ów" },
["ani"] = { gen_p = { "", { "", stem = "final_soft" } }, ins_p = { "ami", { "mi", stem = "final_soft" } } },
["c"] = { dat_p = "om", ins_p = "ami", loc_p = "ach" },
["ej"] = { gen_p = "ów" },
["gi"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["i"] = { dat_p = "om", gen_p = "", ins_p = "ami", loc_p = "ach" },
["ic"] = { gen_p = "" },
["j"] = { dat_p = "om", gen_p = "i", ins_p = "ami", loc_p = "ach" },
["jc"] = { gen_p = "ów" },
["ki"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["l"] = { dat_p = "om", gen_p = "i", ins_p = "ami", loc_p = "ach" },
["li"] = { gen_p = "ów" },
["ns"] = { dat_p = "om", gen_p = "ów", ins_p = "ami", loc_p = "ach" },
["oj"] = { gen_p = "ów" },
["rc"] = { gen_p = "ów" },
["ri"] = { gen_p = "i" },
["sat"] = { dat_p = "e", gen_p = "e", ins_p = "e", loc_p = "e" },
["z"] = { dat_p = "om", gen_p = "y", ins_p = "ami", loc_p = "ach" },
["ąc"] = { dat_p = "ym", ins_p = "ymi", loc_p = "ych" },
["ńc"] = { gen_p = "ów" },
["ż"] = { dat_p = "om", gen_p = "y", ins_p = "ami", loc_p = "ach" },
},
},
["n common pl i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ajk"] = { gen_p = { "", stem = "inserted_e" } },
["c"] = { dat_p = "iom", gen_p = "i", ins_p = "iami", loc_p = "iach" },
["jtk"] = { gen_p = { "", stem = "inserted_e" } },
["l"] = { dat_p = "i", gen_p = "i", ins_p = "i", loc_p = "i" },
["n"] = { dat_p = { "om", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, loc_p = { "ach", stem = "palatal" } },
["nk"] = { gen_p = { "", stem = "inserted_e" } },
["rk"] = { gen_p = { "", stem = "inserted_e" } },
["unk"] = { gen_p = "ów" },
["w"] = { dat_p = { "om", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, loc_p = { "ach", stem = "palatal" } },
["wk"] = { gen_p = { "", stem = "inserted_e" } },
["łk"] = { gen_p = { "", stem = "inserted_e" } },
["ńk"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n common pl y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["m"] = { gen_p = "" },
["n"] = { gen_p = "" },
["om"] = { gen_p = "ów" },
["on"] = { gen_p = "ów" },
},
},
["n common sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ema"] = { dat_p = "tom", gen_p = "tów", ins_p = "tami", loc_p = "tach", nom_p = "ta" },
["lon"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
},
},
["n common sg e"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = { "", stem = "final_soft" }, gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "a" },
["aci"] = { gen_p = "" },
["aj"] = { gen_p = "" },
["al"] = { dat_s = "e", gen_s = "e", ins_s = "e", loc_s = "e" },
["b"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["bi"] = { gen_p = "" },
["d"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["dni"] = { gen_p = "" },
["e"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["eci"] = { gen_p = "" },
["eł"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e" },
["f"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["gi"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["il"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["jni"] = { gen_p = "" },
["k"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["ki"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", ins_s = "m", loc_p = "ch", loc_s = "m", nom_p = "e" },
["kni"] = { gen_p = "" },
["l"] = { gen_p = "i" },
["m"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["mi"] = { gen_p = "" },
["mil"] = { dat_p = "iom", gen_p = "iów", ins_p = "iami", loc_p = "iach", nom_p = "ia" },
["n"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["nal"] = { dat_p = "e", gen_p = "e", ins_p = "e", loc_p = "e", nom_p = "e" },
["nci"] = { gen_p = "" },
["o"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["oci"] = { gen_p = "" },
["oni"] = { gen_p = "" },
["pi"] = { gen_p = "" },
["r"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["rc"] = { gen_p = "" },
["si"] = { gen_p = "" },
["st"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym" },
["t"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["tel"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["w"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["wal"] = { dat_s = "u", gen_s = "a", ins_s = "em", loc_s = "u" },
["wc"] = { gen_p = { "", "ów" } },
["wi"] = { gen_p = "" },
["woj"] = { dat_s = "emu", gen_s = "ego", nom_p = "e" },
["z"] = { gen_p = "y" },
["zc"] = { gen_p = { "", stem = "inserted_ie" } },
["zi"] = { gen_p = "" },
["é"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["ąci"] = { gen_p = "" },
["ł"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["śni"] = { gen_p = "" },
["ż"] = { gen_p = "y" },
["żci"] = { gen_p = "" },
},
},
["n common sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
["a"] = { dat_p = { "o", { "om", note = "colloquial" } }, dat_s = { "o", { "u", note = "colloquial" } }, gen_p = { "o", { "ł", note = "colloquial" } }, gen_s = { "o", { "a", note = "colloquial" } }, ins_p = { "o", { "ami", note = "colloquial" } }, ins_s = { "o", { "em", note = "colloquial" } }, loc_p = { "o", { "ach", note = "colloquial" } }, loc_s = { "o", { "le", note = "colloquial" } }, nom_p = { "o", { "a", note = "colloquial" } } },
["al"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", nom_p = "o" },
["ant"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["arn"] = { gen_p = { { "", stem = "inserted_e" }, "" } },
["at"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["atł"] = { loc_s = { "e", stem = "fronted+palatal" } },
["ał"] = { gen_p = "" },
["b"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["br"] = { gen_p = { "", stem = "inserted_e" } },
["c"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["cer"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "a", "o" } },
["ck"] = { gen_p = { "", stem = "inserted_e" } },
["cz"] = { loc_s = "u" },
["dk"] = { gen_p = { "", stem = "inserted_e" } },
["dr"] = { gen_p = { "", stem = "inserted_e" } },
["e"] = { dat_p = { "o", { "om", note = "rare" } }, dat_s = { "o", { "u", note = "rare" } }, gen_p = { "o", { "ów", note = "rare" } }, gen_s = { "o", { "a", note = "rare" } }, ins_p = { "o", { "ami", note = "rare" } }, ins_s = { "o", { "em", note = "rare" } }, loc_p = { "o", { "ach", note = "rare" } }, loc_s = { "o", { "u", note = "rare" } }, nom_p = { "o", { "a", note = "rare" } } },
["eg"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", loc_p = "o", nom_p = "o" },
["end"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "a", "o" } },
["ent"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["est"] = { loc_s = "o" },
["eł"] = { gen_p = "" },
["f"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["fot"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["g"] = { ins_s = "o", loc_s = "o" },
["gn"] = { gen_p = { "", stem = "inserted_ie" } },
["gł"] = { gen_p = { "", stem = "inserted_ie" } },
["h"] = { loc_s = "u" },
["i"] = { gen_p = "ów", loc_s = "u" },
["id"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["int"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["j"] = { loc_s = "o" },
["jk"] = { gen_p = { "", stem = "inserted_e" } },
["k"] = { ins_s = "iem", loc_s = "u" },
["kn"] = { gen_p = { "", stem = "inserted_ie" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["l"] = { loc_s = "o" },
["li"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ll"] = { loc_s = "u" },
["mk"] = { gen_p = { "", stem = "inserted_e" } },
["nak"] = { dat_s = { "owi", "u" }, gen_p = { "", "ów" }, nom_p = { "a", "i" } },
["ng"] = { ins_s = "iem", loc_s = "u" },
["nk"] = { gen_p = { "", stem = "inserted_e" } },
["o"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ol"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", "u" }, nom_p = { "a", "o" } },
["ors"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["ow"] = { gen_p = { "", stem = "lengthened" } },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["pk"] = { gen_p = { "", stem = "inserted_e" } },
["pn"] = { gen_p = { { "", stem = "inserted_ie" }, "" } },
["pol"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ps"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["re"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["red"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "a", "o" } },
["rk"] = { gen_p = { "", stem = "inserted_e" } },
["st"] = { loc_s = { "e", stem = "fronted+palatal" } },
["tk"] = { gen_p = { "", stem = "inserted_e" } },
["v"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["wk"] = { gen_p = { "", stem = "inserted_e" } },
["wn"] = { gen_p = { "", stem = "inserted_ie" } },
["zk"] = { gen_p = { "", stem = "inserted_e" } },
["zm"] = { loc_s = "ie" },
["zz"] = { gen_p = "o", loc_s = "o" },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
["łk"] = { gen_p = { "", stem = "inserted_e" } },
["łn"] = { gen_p = { "", stem = "inserted_e" } },
["ńk"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n common sg um"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_p = "ów", gen_s = "um", ins_p = "ami", ins_s = "um", loc_p = "ach", nom_p = "a" },
},
},
["n common sg ę"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ętom", dat_s = "ęciu", depr_p = {}, gen_p = "ąt", gen_s = "ęcia", ins_p = "ętami", ins_s = "ęciem", loc_p = "ętach", nom_p = "ęta" },
["mi"] = { dat_p = "onom", dat_s = "eniu", gen_p = "on", gen_s = "enia", ins_p = "onami", ins_s = "eniem", loc_p = "onach", nom_p = "ona" },
},
},
["n place pl a"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ot"] = { gen_p = "" },
["t"] = { gen_p = { "", stem = "lengthened" } },
["yt"] = { gen_p = "" },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place pl e"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["aj"] = { gen_p = "ów" },
["alc"] = { gen_p = "ów" },
["bc"] = { gen_p = { "", stem = "inserted_ie" } },
["cel"] = { gen_p = "" },
["eńc"] = { gen_p = "" },
["ki"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["l"] = { gen_p = "i" },
["mc"] = { gen_p = { "", stem = "inserted_ie" } },
["n"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["oc"] = { gen_p = "ów" },
["oj"] = { gen_p = "ów" },
["olc"] = { gen_p = "ów" },
["pc"] = { gen_p = { "", stem = "inserted_ie" } },
["pel"] = { gen_p = { "i", "ów" } },
["r"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["rz"] = { gen_p = "y" },
["sel"] = { gen_p = "" },
["t"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["tel"] = { gen_p = "" },
["ul"] = { gen_p = "" },
["w"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["wc"] = { gen_p = { "", stem = "inserted_ie" } },
["wel"] = { gen_p = "" },
["ł"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["ńc"] = { gen_p = { "", stem = "inserted_e" } },
["źc"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place pl i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = { "", stem = "inserted_e" }, gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ag"] = { gen_p = "" },
["ak"] = { gen_p = "ów" },
["ek"] = { gen_p = "" },
["ik"] = { gen_p = "" },
["isk"] = { gen_p = "" },
["kok"] = { gen_p = "ów" },
["lig"] = { gen_p = "ów" },
["og"] = { gen_p = "ów" },
["ok"] = { gen_p = "" },
["ośk"] = { gen_p = "ów" },
["rg"] = { gen_p = "ów" },
["ruk"] = { gen_p = "ów" },
["rąg"] = { gen_p = "ów" },
["sęk"] = { gen_p = "ów" },
["tok"] = { gen_p = "ów" },
["ug"] = { gen_p = "" },
["uk"] = { gen_p = "" },
["yg"] = { gen_p = "" },
["yk"] = { gen_p = "" },
["zeg"] = { gen_p = "ów" },
["zg"] = { gen_p = "" },
["ók"] = { gen_p = "" },
["ąg"] = { gen_p = "" },
["łak"] = { gen_p = "" },
},
},
["n place pl y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ach"] = { gen_p = "ów" },
["br"] = { gen_p = "ów" },
["bł"] = { gen_p = "ów" },
["doł"] = { gen_p = "ów" },
["dł"] = { gen_p = { "", stem = "inserted_e" } },
["ep"] = { gen_p = "ów" },
["gn"] = { gen_p = { "", stem = "inserted_ie" } },
["gon"] = { gen_p = "ów" },
["gr"] = { gen_p = { "", stem = "inserted_ie" } },
["gw"] = { gen_p = { "", stem = "inserted_ie" } },
["gł"] = { gen_p = "ów" },
["hab"] = { gen_p = "ów" },
["hod"] = { gen_p = "ów" },
["hł"] = { gen_p = { "", stem = "inserted_e" } },
["id"] = { gen_p = { "", "ów" } },
["is"] = { gen_p = "ów" },
["kan"] = { gen_p = "ów" },
["koł"] = { gen_p = { "", stem = "lengthened" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["ndr"] = { gen_p = "ów" },
["od"] = { gen_p = { "", stem = "lengthened" } },
["ord"] = { gen_p = "ów" },
["os"] = { gen_p = "ów" },
["ow"] = { gen_p = { "", stem = "lengthened" } },
["ozd"] = { gen_p = "ów" },
["rob"] = { gen_p = "ów" },
["roz"] = { gen_p = "ów" },
["rąd"] = { gen_p = "ów" },
["rł"] = { gen_p = "ów" },
["sn"] = { gen_p = "ów" },
["sł"] = { gen_p = "ów" },
["tos"] = { gen_p = "" },
["tr"] = { gen_p = "ów" },
["um"] = { gen_p = "ów" },
["was"] = { gen_p = "ów" },
["wł"] = { gen_p = "ów" },
["zch"] = { gen_p = "ów" },
["zyb"] = { gen_p = "ów" },
["ąs"] = { gen_p = "ów" },
["ład"] = { gen_p = "ów" },
["łod"] = { gen_p = "ów" },
["łoz"] = { gen_p = { "", stem = "lengthened" } },
["łyn"] = { gen_p = "ów" },
["żn"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["nd"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
},
},
["n place sg e"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "a" },
["aci"] = { gen_p = "" },
["b"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ci"] = { gen_p = { "", stem = "final_soft" } },
["dni"] = { gen_p = "ch" },
["e"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["eci"] = { gen_p = "" },
["gi"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", loc_p = "ch", loc_s = "em", nom_p = "e" },
["h"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ki"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", loc_p = "ch", loc_s = "em", nom_p = "e" },
["l"] = { gen_p = "i" },
["n"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["oci"] = { gen_p = "" },
["oni"] = { gen_p = "" },
["p"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["r"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["s"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["t"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["w"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["z"] = { gen_p = "y" },
["ł"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ż"] = { gen_p = "y" },
},
},
["n place sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
["ad"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ag"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", loc_p = "o", nom_p = "o" },
["ajn"] = { gen_p = { "", stem = "inserted_e" } },
["amn"] = { gen_p = { { "", stem = "inserted_ie" }, "" } },
["arn"] = { gen_p = { { "", stem = "inserted_e" }, "" } },
["c"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ck"] = { gen_p = "" },
["e"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ew"] = { gen_p = "" },
["ewn"] = { gen_p = { "", stem = "inserted_ie" } },
["g"] = { ins_s = "o", loc_s = "o" },
["hn"] = { gen_p = { "", stem = "inserted_e" } },
["i"] = { gen_p = "o", loc_s = "o" },
["iw"] = { gen_p = "" },
["izn"] = { loc_s = "ie" },
["k"] = { gen_p = { "", stem = "inserted_e" }, ins_s = "iem", loc_s = "u" },
["kn"] = { gen_p = { "", stem = "inserted_ie" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["l"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ong"] = { ins_s = "iem", loc_s = "u" },
["osn"] = { gen_p = { "", stem = "inserted_ie" }, loc_s = { "e", stem = "palatal" } },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["pn"] = { gen_p = { "", stem = "inserted_ie" } },
["sk"] = { gen_p = "" },
["sn"] = { loc_s = "ie" },
["st"] = { dat_p = "om", dat_s = "u", gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "fronted+palatal" }, nom_p = "a" },
["t"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["tw"] = { gen_p = "" },
["udn"] = { gen_p = { "", stem = "inserted_e" } },
["w"] = { gen_p = { "", "ów", { "", stem = "lengthened" } } },
["ówn"] = { gen_p = { "", stem = "inserted_ie" } },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
["łot"] = { dat_p = "om", dat_s = "u", gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
["śn"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place sg um"] = {
copies = { },
rules = {
[""] = { acc_p = { "a", { "um", note = "rare" } }, acc_s = "um", dat_p = { "om", { "um", note = "rare" } }, dat_s = "um", depr_p = {}, gen_p = "um", gen_s = "um", ins_p = { "ami", { "um", note = "rare" } }, ins_s = "um", loc_p = { "ach", { "um", note = "rare" } }, loc_s = "um", nom_p = { "a", { "um", note = "rare" } }, voc_p = { "a", { "um", note = "rare" } }, voc_s = "um" },
},
},
["n proper pl "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "", ins_s = {}, loc_p = "", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["n proper pl e"] = {
copies = { },
rules = {
[""] = { acc_p = "e", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "e", voc_s = {} },
},
},
["n proper pl y"] = {
copies = { },
rules = {
[""] = { acc_p = "y", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "y", voc_s = {} },
},
},
["n proper sg "] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_p = "", voc_s = "" },
["BS"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["F"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["J"] = { acc_p = { "", "-oty" }, dat_p = { "", "-otom" }, dat_s = { "", "-otowi" }, gen_p = { "", "-otów" }, gen_s = { "", "-otu" }, ins_p = { "", "-otami" }, ins_s = { "", "-otem" }, loc_p = { "", "-otach" }, loc_s = { "", "-ocie" }, nom_p = { "", "-oty" }, voc_p = { "", "-oty" }, voc_s = { "", "-ocie" } },
["L"] = { acc_p = { "", "-e" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-i" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-e" }, voc_p = { "", "-e" }, voc_s = { "", "-u" } },
["N"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["OS"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["R"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ze" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ze" } },
["Z"] = { acc_p = { "", "-ety", "-y" }, dat_p = { "", "-etom", "-om" }, dat_s = { "", "-etowi", "-owi" }, gen_p = { "", "-etów", "-ów" }, gen_s = { "", "-etu", "-u" }, ins_p = { "", "-ami", "-etami" }, ins_s = { "", "-em", "-etem" }, loc_p = { "", "-ach", "-etach" }, loc_s = { "", "-ecie" }, nom_p = { "", "-ety", "-y" }, voc_p = { "", "-ety", "-y" }, voc_s = { "", "-ecie" } },
["k"] = { acc_p = {}, dat_p = {}, gen_p = {}, gen_s = { "", note = "rare" }, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
["m"] = { acc_p = { "", "y" }, dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" }, voc_p = { "", "y" }, voc_s = { "", { "e", stem = "palatal" } } },
["ś"] = { acc_p = {}, dat_p = {}, gen_p = {}, gen_s = { "", note = "rare" }, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
},
},
["n proper sg e"] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = "a", dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "e", nom_p = "a", voc_p = "a", voc_s = "e" },
},
},
["n proper sg o"] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = {}, dat_p = {}, dat_s = "emu", depr_p = {}, gen_p = {}, gen_s = "ego", ins_p = {}, ins_s = "ym", loc_p = {}, loc_s = "ym", nom_p = {}, voc_p = {}, voc_s = {} },
},
},
["n proper sg um"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_p = "ów", gen_s = "um", ins_p = "ami", ins_s = "um", loc_p = "ach", nom_p = "a" },
},
},
}
------------------------------------------------------------------------------------------------------------------------
-- Adjective rules --
------------------------------------------------------------------------------------------------------------------------
-- The slots of an adjective in table order: the singular by gender column (the masculine animate and inanimate share
-- most of them), then the virile and non-virile plural.
data.adjective_slots = {
"nom_m", "nom_f", "nom_n", "nom_mp_pers", "nom_p_not_mp_pers",
"gen_mn", "gen_f", "gen_p",
"dat_mn", "dat_f", "dat_p",
"acc_m_an", "acc_m_in", "acc_f", "acc_n", "acc_mp_pers", "acc_p_not_mp_pers",
"ins_mn", "ins_f", "ins_p",
"loc_mn", "loc_f", "loc_p",
"short",
}
-- The nominative endings of an adjective's lemma (its masculine singular), which pick its group in `adjective_groups`.
data.adjective_nominatives = { "y", "i" }
-- The kind of an adjective, for its title and category, given by the first pattern its lemma matches.
data.adjective_kinds = { { "y$", "cứng" }, { "[kg]i$", "âm vòm" }, { "", "mềm" } }
-- How to find the masculine of an adjectival word given in another gender (''teściowa'' → ''teściowy'', ''tania'' →
-- ''tani'', ''wielkie'' → ''wielki'', and likewise a non-virile plural such as ''Zjednoczone''). Take the first ending
-- of its rule gender (`plural` for a plural) that it has, and replace it with the soft masculine ending if the ending
-- is `soft` or the stem ends in a letter of `soft_after`, and with the hard one otherwise.
data.adjective_lemma = {
endings = {
f = { { "ia", soft = true }, { "a" } },
n = { { "ie", soft = true }, { "e" } },
plural = { { "ie", soft = true }, { "e" } },
},
soft = "i",
hard = "y",
soft_after = { k = true, g = true },
}
-- The endings that follow the softened consonant of a virile nominative plural (''krew|ni'', ''pols|c|y''), used to
-- find the masculine of a virile adjectival word.
data.virile_endings = { "", "y" }
-- The noun slot that each adjective slot of an adjectival word fills, by the rule gender of the noun. `plural` is the
-- plural of every rule gender except `m-pr`, whose plural is in its own entry. The vocative is the nominative.
data.adjectival_slots = {
["m-pr"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_an", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m", nom_p = "nom_mp_pers", acc_p = "acc_mp_pers", voc_p = "nom_mp_pers",
gen_p = "gen_p", dat_p = "dat_p", ins_p = "ins_p", loc_p = "loc_p",
},
["m-anml"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_an", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m",
},
["m-in"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_in", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m",
},
f = {
nom_s = "nom_f", gen_s = "gen_f", dat_s = "dat_f", acc_s = "acc_f", ins_s = "ins_f", loc_s = "loc_f",
voc_s = "nom_f",
},
n = {
nom_s = "nom_n", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_n", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_n",
},
plural = {
nom_p = "nom_p_not_mp_pers", gen_p = "gen_p", dat_p = "dat_p", acc_p = "acc_p_not_mp_pers",
ins_p = "ins_p", loc_p = "loc_p", voc_p = "nom_p_not_mp_pers",
},
}
-- The adjective slots that always have the forms of another slot, by source slot: the dative, instrumental and
-- locative feminine singular come from the genitive and accusative, the locative masculine singular from the
-- instrumental, and the locative plural from the genitive.
data.adjective_shared = {
gen_f = { "dat_f", "loc_f" }, acc_f = { "ins_f" }, ins_mn = { "loc_mn" }, gen_p = { "loc_p" },
}
-- The accusatives an adjective takes from other slots, as pairs of source and accusative.
data.adjective_accusatives = {
{ "nom_n", "acc_n" }, { "gen_mn", "acc_m_an" }, { "nom_m", "acc_m_in" }, { "gen_p", "acc_mp_pers" },
{ "nom_p_not_mp_pers", "acc_p_not_mp_pers" }, { "nom_mp_npers", "acc_mp_npers" }, { "nom_fp", "acc_fp" },
{ "nom_np", "acc_np" },
}
-- The last letter of an adjective stem that drops before an ending starting with the given letter (e.g. ''moj-'' +
-- ''-ich'' → ''moich'').
data.adjective_dropped = { j = "i" }
-- The archaic dative added by `archdat` (''polsku''): its ending, added to the adjective's stem, and its footnote (a
-- key of `notes`).
data.archaic_dative = { "u", note = "archaic" }
--[==[
The irregular adjectives of `<irreg>`, tried on the lemma in order.
`pattern` captures the stem (or `stem` gives it), and each of the `sets` adds forms to the stem (plus `add`), with an
optional footnote.
A set's `endings` give the slots in which a regular adjective has its own forms; the other slots are shared as for
every adjective (the dative, instrumental and locative feminine singular are the genitive, accusative and genitive; the
locative masculine singular is the instrumental; and the locative plural is the genitive). `-` as an ending means the
lemma itself. A set's `own` endings fill a slot without that sharing. `table` names a table with slots of its own
(`dwa` for the plural of ''dwa'' and ''oba'', and `plonly` for the plural only).
]==]
local function normal(nom_f, nom_n, nom_mp_pers, nom_p_not_mp_pers, gen_mn, gen_f, gen_p, dat_mn, dat_p, acc_f, ins_mn,
ins_p)
return {
nom_f = nom_f, nom_n = nom_n, nom_mp_pers = nom_mp_pers, nom_p_not_mp_pers = nom_p_not_mp_pers,
gen_mn = gen_mn, gen_f = gen_f, gen_p = gen_p, dat_mn = dat_mn, dat_p = dat_p, acc_f = acc_f, ins_mn = ins_mn,
ins_p = ins_p,
}
end
local DWA = {
table = "dwa",
sets = { {
own = {
nom_mp_pers = "aj", nom_mp_npers = "a", nom_fp = "ie", nom_np = "a", gen_p = { "u", "óch" },
dat_p = { "u", "om", "óm" }, ins_mnp = { "oma", "u" }, ins_fp = { "iema", "oma", "u" }, loc_p = { "u", "óch" },
},
} },
}
data.irregular_adjectives = {
{ pattern = "^(dw)a$", table = DWA.table, sets = DWA.sets },
{ pattern = "^(ob)a$", table = DWA.table, sets = DWA.sets },
{ pattern = "^(.*[st]w)ój$", sets = {
{ add = "oj", endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
{ endings = normal("a", "e", nil, "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi"),
note = "literary or archaic" },
} },
{ pattern = "^(.*m)ój$", sets = {
{ add = "oj", endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
{ endings = normal("a", "e", nil, "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi"),
note = "literary or archaic" },
} },
{ pattern = "^(.*)ten$", sets = {
{ endings = normal("ta", "to", "ci", "te", "tego", "tej", "tych", "temu", "tym", nil, "tym", "tymi") },
{ own = { acc_f = "tę" } },
{ own = { acc_f = "tą" }, note = "proscribed but much more common" },
{ own = { ins_f = "tą" } },
} },
-- ''tenże'' declines like ''ten'', with ''-ż'' after a vowel and ''-że'' after a consonant.
{ pattern = "^(.*)tenże$", sets = {
{ endings = normal("taż", "toż", "ciż", "też", "tegoż", "tejże", "tychże", "temuż", "tymże", nil, "tymże", "tymiż") },
{ own = { acc_f = { "tęż", "tęże", "tąż", "tąże" }, ins_f = { "tąż", "tąże" } } },
} },
{ pattern = "^(.*czyj)$", sets = {
{ endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
} },
{ pattern = "^(.*sam)$", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(.*jed)en$", sets = {
{ add = "n", endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(on)$", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^ów$", stem = "ow", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^owy$", stem = "ow", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(.*il)e$", table = "plonly", sets = {
{ endings = normal(nil, nil, "u", "e", nil, nil, "u", nil, "u", nil, nil, "u") },
{ own = { ins_p = "oma" }, note = "rare" },
} },
{ pattern = "^(.*wszys)tek$", sets = {
{ add = "tk", endings = normal("a", "o", nil, "ie", "iego", "iej", "ich", "iemu", "im", "ą", "im", "imi"),
archaic_dative = "u" },
{ add = "c", own = { nom_mp_pers = "y" } },
} },
}
--[==[
The adjective groups, keyed `adj common sg NOMINATIVE` (the lemma's ending, `y` or `i`) like the noun groups.
]==]
data.adjective_groups = {
["adj common sg "] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "emu", gen_f = "ej", gen_mn = "ego", gen_p = "ych", ins_f = "ą", ins_mn = "ym", ins_p = "ymi", nom_f = "a", nom_mp_pers = "", nom_n = "e", nom_p_not_mp_pers = "e" },
["."] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["a"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["ad"] = { acc_f = {}, dat_mn = {}, gen_f = {}, gen_mn = {}, gen_p = {}, ins_f = {}, ins_mn = {}, ins_p = {}, nom_mp_pers = { "", stem = "palatal" } },
["asz"] = { nom_mp_pers = { "i", stem = "virile" } },
["d"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "" },
["e"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["en"] = { acc_f = { "ą", stem = "reduced" }, dat_mn = { "emu", stem = "reduced" }, gen_f = { "ej", stem = "reduced" }, gen_mn = { "ego", stem = "reduced" }, gen_p = { "ych", stem = "reduced" }, ins_f = { "ą", stem = "reduced" }, ins_mn = { "ym", stem = "reduced" }, ins_p = { "ymi", stem = "reduced" }, nom_f = { "a", stem = "reduced" }, nom_mp_pers = { "", stem = "reduced+palatal" }, nom_n = { "e", stem = "reduced" }, nom_p_not_mp_pers = { "e", stem = "reduced" } },
["ent"] = { nom_mp_pers = { "", stem = "palatal" } },
["j"] = { acc_f = { "ą", stem = "shortened" }, dat_mn = { "emu", stem = "shortened" }, gen_f = { "ej", stem = "shortened" }, gen_mn = { "ego", stem = "shortened" }, ins_f = { "ą", stem = "shortened" }, nom_f = { "a", stem = "shortened" }, nom_n = { "e", stem = "shortened" }, nom_p_not_mp_pers = { "e", stem = "shortened" } },
["l"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["n"] = { nom_mp_pers = { "", stem = "palatal" } },
["nd"] = { nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["nt"] = { acc_f = {}, dat_mn = {}, gen_f = {}, gen_mn = {}, gen_p = {}, ins_f = {}, ins_mn = {}, ins_p = {} },
["o"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["om"] = { nom_mp_pers = { "", stem = "palatal" } },
["on"] = { nom_mp_pers = { "", stem = "fronted+palatal" } },
["r"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["ron"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_mp_pers = "", nom_n = "", nom_p_not_mp_pers = "" },
["rt"] = { nom_mp_pers = { "", stem = "palatal" } },
["s"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["w"] = { nom_mp_pers = { "", stem = "palatal" } },
["yj"] = { acc_f = "ą", dat_mn = "emu", gen_f = "ej", gen_mn = "ego", ins_f = "ą", nom_f = "a", nom_n = "e", nom_p_not_mp_pers = "e" },
["é"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["ż"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
},
},
["adj common sg i"] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", ins_f = "acc_f", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "iemu", gen_f = "iej", gen_mn = "iego", gen_p = "ich", ins_mn = "im", ins_p = "imi", nom_f = "a", nom_mp_pers = { "y", stem = "palatal" }, nom_n = "ie", nom_p_not_mp_pers = "ie" },
["b"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["c"] = { acc_f = "ią", nom_f = "ia", nom_mp_pers = "i" },
["f"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["i"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["ks"] = { acc_f = { "", stem = "palatal" }, dat_mn = { "", stem = "palatal" }, gen_f = { "", stem = "palatal" }, gen_mn = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_mn = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, nom_f = { "", stem = "palatal" }, nom_n = { "", stem = "palatal" }, nom_p_not_mp_pers = { "", stem = "palatal" } },
["l"] = { dat_mn = "emu", gen_f = "ej", gen_mn = "ego", nom_mp_pers = "i", nom_n = "e", nom_p_not_mp_pers = "e" },
["m"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["n"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["p"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["s"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["u"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["w"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["y"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["z"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
},
},
["adj common sg y"] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", ins_f = "acc_f", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "emu", gen_f = "ej", gen_mn = "ego", gen_p = "ych", ins_mn = "ym", ins_p = "ymi", nom_f = "a", nom_mp_pers = { "", stem = "palatal" }, nom_n = "e", nom_p_not_mp_pers = "e" },
["c"] = { nom_mp_pers = "y" },
["dzn"] = { nom_mp_pers = "i" },
["h"] = { nom_mp_pers = { "i", stem = "virile" } },
["on"] = { nom_mp_pers = { "", stem = "fronted+palatal" } },
["r"] = { nom_mp_pers = { "y", stem = "palatal" } },
["ron"] = { nom_mp_pers = { "", stem = "palatal" } },
["soł"] = { nom_mp_pers = { "i", stem = "fronted+palatal" } },
["sz"] = { nom_mp_pers = { "i", stem = "virile" } },
["won"] = { nom_mp_pers = { "", stem = "palatal" } },
["z"] = { nom_mp_pers = "y" },
["ł"] = { nom_mp_pers = { "i", stem = "palatal" } },
["łon"] = { nom_mp_pers = { "", stem = "palatal" } },
["łzł"] = { nom_mp_pers = { { "i", stem = "virile" }, { "i", stem = "palatal" } } },
["ż"] = { nom_mp_pers = "y" },
["żd"] = { nom_mp_pers = { "", stem = "palatal", note = "rare" } },
},
},
}
return data
k7x2ik5gvntj3dpgdnp4jwtsi9039ba
dhunder
0
421486
2573617
2026-10-26T12:10:04Z
TheHighFighter2
42988
/* */
2573617
wikitext
text/x-wiki
=={{langname|yol}}==
==={{ĐM|alter}}===
* {{alter|yol|dunder}}
==={{ĐM|etym}}===
Từ {{inh|yol|enm|thonder}}, từ {{inh|yol|ang|þunor}}, từ {{inh|yol|gmw-pro|*þunr}}.
==={{ĐM|pron}}===
* {{IPA|yol|/ˈd̪ʊndər/|/ˈdʊndər/}}
==={{ĐM|noun}}===
{{head|yol|noun}}
# [[sấm|Sấm]].
==={{ĐM|ref}}===
* {{R:Poole 1867|page=35}}
94vuu8q838uxn9syd2rx3giewikxz69
Ֆիլիպիններ
0
421487
2573618
2026-10-26T12:55:42Z
Hiyuune
50834
/* */ + hy
2573618
wikitext
text/x-wiki
=={{langname|hy}}==
==={{section|etym}}===
{{ety|hy|:bor|ru:Филиппи́ны}}
{{bor+|hy|ru|Филиппи́ны}}.
==={{section|pr-noun}}===
{{hy-IPA}}
==={{section|pr-noun}}===
{{hy-h|Danh từ riêng|g=p}}
# {{tcl|hy|Philippines|id=Q928}}
===={{section|decl}}====
{{hy-noun-ի-ներ||||Ֆիլիպին|pl=on}}
===={{section|drv}}====
{{col|hy|ֆիլիպինական|ֆիլիպիներեն|ֆիլիպինյան|ֆիլիպինուհի|ֆիլիպինցի}}
==={{section|ref}}===
* {{R:hy:TUT|section=II.A.3|page=54}}
9reog7rh6e6qqcrhu3d2cxgx4xy3lxu
ফিলিপাইন
0
421488
2573619
2026-10-26T12:58:40Z
Hiyuune
50834
/* */
2573619
wikitext
text/x-wiki
=={{langname|as}}==
{{wp|as:}}
==={{section|etym}}===
Có lẽ vay mượn từ tiếng Bengal.
==={{section|pron}}===
{{as-IPA}}
==={{section|pr-noun}}===
{{as-prpn}}
# {{tcl|as|Philippines|id=Q928}}
===={{section|decl}}====
{{as-proper noun-onoun-o|philipain}}
==={{section|see}}===
{{list:quốc gia của châu Á/as}}
=={{langname|bn}}==
{{wp|bn:}}
==={{section|etym}}===
{{bor+|bn|en|Philippines}} (trước đây phát âm là {{IPAchar|/ˈfɪlɪpaɪnz/}}), từ {{der|bn|fr|Philippines}}, bắt nguồn từ {{der|bn|es|Filipinas}}.
==={{section|pron}}===
* {{bn-IPA}}
==={{section|pr-noun}}===
{{bn-proper noun}}
# {{tcl|bn|Philippines|id=Q928}}
01ngnbvt24tlxz69ql4qyqhixl4rut8
awooʼ
0
421489
2573620
2026-10-26T12:59:02Z
TheHighFighter2
42988
/* */
2573620
wikitext
text/x-wiki
{{also|awoo|awö|}}
=={{langname|nv}}==
==={{ĐM|etym}}===
Từ {{inh|nv|ath-pro|*-ɣuʔ}}.
==={{ĐM|pron}}===
* {{IPA|nv|/ʔɑ̀wòːʔ/}}
==={{ĐM|noun}}===
{{head|nv|noun|dạng tiền tố|awó-}}
# [[răng|Răng]].
#: {{uxi|nv|'''Biwooʼ''' [[ádin]]ii|Người không có '''răng''', người móm}}
===={{ĐM|infl}}====
{{nv-pos-lowtone|wooʼ}}
===={{ĐM|der}}====
{{col2|nv
|awóchiiʼ
|awótsįʼ
|awótʼah
|awógiizh
|awóchaan
|awókʼiz
|awótsíín
|awooʼ bee yichʼiishí
|awooʼ bee yichʼiishí bikʼi nátłohí
|awooʼ bikʼą́ą́h
|awooʼ diniih
|naadą́ą́ʼ biwooʼ
}}
{{C|nv|Miệng|Răng}}
7vnnom15q6dr31z9ksleuhjietuaahq
awooʼ diniih
0
421490
2573623
2026-10-26T13:07:42Z
TheHighFighter2
42988
Trang mới: “=={{langname|nv}}== ==={{ĐM|etym}}=== Từ {{compound|nv|awooʼ|diniih|t1=răng|t2=cơn đau}}. ==={{ĐM|noun}}=== {{head|nv|noun}} # [[đau răng|Đau răng]]. {{C|nv|Loại bệnh}}”
2573623
wikitext
text/x-wiki
=={{langname|nv}}==
==={{ĐM|etym}}===
Từ {{compound|nv|awooʼ|diniih|t1=răng|t2=cơn đau}}.
==={{ĐM|noun}}===
{{head|nv|noun}}
# [[đau răng|Đau răng]].
{{C|nv|Loại bệnh}}
n57os8e7ce19y7witmz41h8yl9mjy2x
菲律賓
0
421491
2573624
2026-10-26T13:09:03Z
Hiyuune
50834
/* */
2573624
wikitext
text/x-wiki
{{also|菲律宾}}
=={{langname|ja}}==
==={{section|etym}}===
{{ja-kanjitab|ひ|k1=ふぃ|りつ|k2=り|ひん|k3=ぴん|yomi=irr|ateji=y}}
{{obor|ja|zh|-}} {{zh-l|菲律賓|Fēilǜbīn}}.
Dạng kanji này là một ví dụ của {{ja-ateji|sort=ふぃりぴん}}.
==={{section|dfn}}===
{{ja-see|フィリピン}}
=={{langname|zh}}==
{{zh-forms|s=菲律宾|gloss=-|alt=菲律濱-thường là Philippines}}
{{wp|zh:,yue:,lzh:,gan:,hak:Fî-li̍t-pîn,cdo:Hĭ-lĭ-pĭng,nan:Hui-li̍p-pin,wuu:}}
==={{section|etym}}===
{{bor+|zh|en|Philippines|Philippine(s)}}.
==={{section|pron}}===
{{zh-pron
|m=Fēilǜbīn
|ma=Zh-feilübin.ogg
|c=fei1 leot6 ban1
|h=pfs=Fî-li̍t-pîn
|mn=ml,tw,sg:Hui-lu̍t-pin/tw:Hui-li̍t-pin/ph,pn:Hui-li̍p-pin/ph:Hui-lī-pin
|mn_note=dạng Hui-lī-pin của [[菲利賓]] / [[菲利濱]] / [[非利賓]] / [[非利濱]] / [[斐利賓]] / [[斐利濱]] và [[非利皮那]] / [[非利彼那]] / [[費利彼納]] từ {{ncog|es|Filipinas|Filipina(s)}}; dạng Hui-li̍p-pin của [[菲立賓]] / [[菲立濱]] / [[非立賓]] / [[非立濱]] / [[斐立賓]] / [[斐立濱]]
|mn-t=hui1 lug8 bing1
|w=sh:1fi liq pin
|cat=pn
}}
==={{section|pr-noun}}===
{{head|zh|Danh từ riêng}}
# {{tcl|zh|Philippines|id=Q928}}
#* {{quote-journal|zh|year=1903|journal=w:zh:新民叢報|section=zh:政界時評|title=zh:馬尼拉華工問題|volume=25|page=6|pageurl=https://www.google.com.hk/books/edition/%E6%96%B0%E6%B0%91%E5%8F%A2%E5%A0%B1/V0Q8AQAAIAAJ?hl=en&gbpv=1&pg=PA64&printsec=frontcover|location=Yokohama|publisher=zh:新民叢報社}}
#*: {{zh-q|自 ^美國 以 禁 華工 著 之 憲法,凡 ^美 屬地,一切 奉行。故 ^夏威夷(即 ^檀香山)隸 美 後,即 嚴 此 禁。^菲律賓 隸 ^美 後,亦 首 行 之。||CL}}
===={{section|syn}}====
{{syn-saurus|zh}}
===={{section|drv}}====
{{col3|zh|菲律賓語|菲律賓話|菲律賓人|菲島|菲航|菲傭|賓妹|賓賓}}
===={{section|desc}}====
{{CJKV||||Phi Luật Tân}}
''Others'':
* {{desc|bor=1|za|Feihlizbinh}}
==={{section|further}}===
* {{R:nan:Campbell|e=非力賓羣島|p=1029}}
2czcqbh8hlpbl16prpgbvk8ulwu6yi3
菲律宾
0
421492
2573626
2026-10-26T14:33:56Z
WhoAlone
40420
Trang mới: “{{also|菲律賓}} =={{langname|zh}}== {{zh-see|菲律賓}} {{C|zh|Philippines|Quốc gia của châu Á}}”
2573626
wikitext
text/x-wiki
{{also|菲律賓}}
=={{langname|zh}}==
{{zh-see|菲律賓}}
{{C|zh|Philippines|Quốc gia của châu Á}}
pujes1vlfswc6gn835bytdigoazy1j0
菲律濱
0
421493
2573627
2026-10-26T14:37:34Z
WhoAlone
40420
Trang mới: “{{also|菲律滨}} =={{langname|zh}}== {{zh-see|菲律賓}}”
2573627
wikitext
text/x-wiki
{{also|菲律滨}}
=={{langname|zh}}==
{{zh-see|菲律賓}}
n2q1fuvcoj39qby5qihmwmww2gtk2qe
菲律滨
0
421494
2573628
2026-10-26T14:38:18Z
WhoAlone
40420
Trang mới: “{{also|菲律濱}} =={{langname|zh}}== {{zh-see|菲律濱}}”
2573628
wikitext
text/x-wiki
{{also|菲律濱}}
=={{langname|zh}}==
{{zh-see|菲律濱}}
gf3sp76ljafj7j2sc0w27rk85pwh4zc
Fēilǜbīn
0
421495
2573629
2026-10-26T14:39:26Z
WhoAlone
40420
Trang mới: “=={{langname|cmn}}== ==={{ĐM|rom}}=== {{cmn-pinyin}} # {{cmn-pinyin of|菲律賓}}”
2573629
wikitext
text/x-wiki
=={{langname|cmn}}==
==={{ĐM|rom}}===
{{cmn-pinyin}}
# {{cmn-pinyin of|菲律賓}}
n6cx86l9o7yf3ys37oduwayv1o6lzdt
比律賓
0
421496
2573630
2026-10-26T14:43:27Z
WhoAlone
40420
Trang mới: “=={{langname|ko}}== {{ko-hanjatab}} ==={{ĐM|pr-noun}}=== {{ko-proper noun|hangeul=비율빈}} # {{hanja form of|비율빈|t=Philippines}}”
2573630
wikitext
text/x-wiki
=={{langname|ko}}==
{{ko-hanjatab}}
==={{ĐM|pr-noun}}===
{{ko-proper noun|hangeul=비율빈}}
# {{hanja form of|비율빈|t=Philippines}}
43nw1ur32knlzpxp1733ccchintl8up
2573631
2573630
2026-10-26T14:44:41Z
WhoAlone
40420
2573631
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-kanjitab|ひ|k1=ふぃ|りつ|k2=り|ひん|k3=ぴん|yomi=on|ateji=y|alt=菲律賓}}
==={{ĐM|alter form}}===
* {{alt|ja|[[比#Từ viết tắt|比]]||viết tắt}}
==={{ĐM|etym}}===
Có thể là từ {{der|ja|zh|菲律賓}} dưới dạng {{ja-ateji}} của {{der|ja|en|Philippines}}.
{{rfv-etym|ja}}
==={{ĐM|pr-noun}}===
{{ja-pos|proper|フィリピン}}
# {{obsolete spelling of|ja|フィリピン}}: {{tcl|ja|Philippines|id=Q928}}
===={{ĐM|syn}}====
* {{l|ja|非利皮那}} {{q|không còn dùng}}
* {{ja-r|呂宋|^ルソン}} / {{ja-r|呂宋|^ルスン}} {{q|không còn dùng}}
==={{ĐM|ref}}===
* {{R:Kanjipedia Kotoba|0005794000|〈比律賓〉}}
=={{langname|ko}}==
{{ko-hanjatab}}
==={{ĐM|pr-noun}}===
{{ko-proper noun|hangeul=비율빈}}
# {{hanja form of|비율빈|t=Philippines}}
ii2hbup3p1dyhmmv41rrswcfndxhdq9
Mô đun:nup-sortkey
828
421497
2573632
2026-10-26T14:47:17Z
TheHighFighter2
42988
Trang mới: “local export = {} local u = mw.ustring.char local a = u(0xF000) local twoChars = { ["dz"] = "d" .. a, ["gb"] = "g" .. a, ["kp"] = "k" .. a, ["sh"] = "s" .. a, ["ts"] = "t" .. a, ["zh"] = "z" .. a } function export.makeSortKey(text, lang, sc) text = mw.ustring.lower(text) for from, to in pairs(twoChars) do text = mw.ustring.gsub(text, from, to) end return mw.ustring.upper(text) end return export”
2573632
Scribunto
text/plain
local export = {}
local u = mw.ustring.char
local a = u(0xF000)
local twoChars = {
["dz"] = "d" .. a, ["gb"] = "g" .. a, ["kp"] = "k" .. a, ["sh"] = "s" .. a, ["ts"] = "t" .. a, ["zh"] = "z" .. a
}
function export.makeSortKey(text, lang, sc)
text = mw.ustring.lower(text)
for from, to in pairs(twoChars) do
text = mw.ustring.gsub(text, from, to)
end
return mw.ustring.upper(text)
end
return export
q3zaolv9p0c00ccw0cdvgllvmja09ld
Thể loại:ncb:Trái cây
14
421498
2573634
2026-10-26T14:49:16Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573634
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Thực phẩm
14
421499
2573635
2026-10-26T14:49:46Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573635
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Bản mẫu:nup-pos
10
421500
2573640
2026-10-26T14:52:42Z
TheHighFighter2
42988
Trang mới: “{{#invoke:checkparams|error}}<!-- Validate template parameters --><includeonly>{{head|nup|{{{1}}}|head={{#if:{{{2|}}}|{{{2}}}|{{pagename}}<sup title="tones missing">?</sup>{{categorize|nup|Yêu cầu thanh điệu mục từ tiếng Nupe}}}}|cat2={{{cat2|}}}|cat3={{{cat3|}}}|cat4={{{cat4|}}}}}</includeonly><!-- --><noinclude>{{tcat|hw:*}}{{documentation}}</noinclude>”
2573640
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
--><includeonly>{{head|nup|{{{1}}}|head={{#if:{{{2|}}}|{{{2}}}|{{pagename}}<sup title="tones missing">?</sup>{{categorize|nup|Yêu cầu thanh điệu mục từ tiếng Nupe}}}}|cat2={{{cat2|}}}|cat3={{{cat3|}}}|cat4={{{cat4|}}}}}</includeonly><!--
--><noinclude>{{tcat|hw:*}}{{documentation}}</noinclude>
kha7pyatzx1th5n4k4q2yo7f9z82r0d
Thể loại:ncb:Ăn
14
421501
2573641
2026-10-26T14:53:33Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573641
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Bản mẫu:nup-noun
10
421502
2573642
2026-10-26T14:54:55Z
TheHighFighter2
42988
Trang mới: “<includeonly>{{nup-pos|noun|{{{1|}}}}}{{#if:{{{2|}}}| (''số nhiều'' '''{{l|nup|{{{2}}}}}''')|}}</includeonly><!-- --><noinclude>{{tcat|hw}}{{documentation}}</noinclude>”
2573642
wikitext
text/x-wiki
<includeonly>{{nup-pos|noun|{{{1|}}}}}{{#if:{{{2|}}}| (''số nhiều'' '''{{l|nup|{{{2}}}}}''')|}}</includeonly><!--
--><noinclude>{{tcat|hw}}{{documentation}}</noinclude>
e6xc8vl85ol3i8q1k6ycp9axzieb2ex
eyangici
0
421503
2573648
2026-10-26T15:04:27Z
TheHighFighter2
42988
Trang mới: “=={{langname|nup}}== ==={{ĐM|alt}}=== * {{alt|nup|yangíci}} ==={{ĐM|etym}}=== Từ {{af|nup|eyan|t1=cái, đồ, thứ, món|gigí|t2=sự ăn|-ci|pos3=hậu tố tác thể|id3=hậu tố tác thể}}. ==={{ĐM|pron}}=== * {{IPA|nup|/ē.jã̄.ɡí.t͡ʃī/}} ==={{ĐM|noun}}=== {{nup-noun|eyangíci|eyangícizhì}} # [[đồ ăn|Đồ ăn]], [[thức ăn]], [[món ăn]]. #: {{syn|nup|ejè}} #: {{uxi|nup|'''Eyangíci''' gúnkín wo è má jin o?|Bạn biết làm ba…”
2573648
wikitext
text/x-wiki
=={{langname|nup}}==
==={{ĐM|alt}}===
* {{alt|nup|yangíci}}
==={{ĐM|etym}}===
Từ {{af|nup|eyan|t1=cái, đồ, thứ, món|gigí|t2=sự ăn|-ci|pos3=hậu tố tác thể|id3=hậu tố tác thể}}.
==={{ĐM|pron}}===
* {{IPA|nup|/ē.jã̄.ɡí.t͡ʃī/}}
==={{ĐM|noun}}===
{{nup-noun|eyangíci|eyangícizhì}}
# [[đồ ăn|Đồ ăn]], [[thức ăn]], [[món ăn]].
#: {{syn|nup|ejè}}
#: {{uxi|nup|'''Eyangíci''' gúnkín wo è má jin o?|Bạn biết làm bao nhiêu '''món ăn'''?}}
{{c|nup|Ăn uống}}
eobk6wjkkzgmce4psy5vo7cif7kbyeh
Thể loại:Mục từ tiếng Nupe
14
421504
2573649
2026-10-26T15:05:05Z
TheHighFighter2
42988
Trang mới: “{{auto cat}}”
2573649
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Vùng nước
14
421505
2573653
2026-10-26T15:06:44Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573653
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Đặc điểm tự nhiên
14
421506
2573654
2026-10-26T15:07:12Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573654
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Sông
14
421507
2573656
2026-10-26T15:07:41Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573656
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Hôn nhân
14
421508
2573659
2026-10-26T15:08:03Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573659
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
yangici
0
421509
2573660
2026-10-26T15:09:39Z
TheHighFighter2
42988
/* */
2573660
wikitext
text/x-wiki
=={{langname|nup}}==
==={{ĐM|etym}}===
{{clipping|nup|eyangíci}}.
==={{ĐM|pron}}===
* {{IPA|nup|/jã̄.ɡí.t͡ʃī/}}
==={{ĐM|noun}}===
{{nup-noun|yangíci|yangícizhì}}
# {{alt form|nup|eyangíci|t=[[đồ ăn]], [[thức ăn]], [[món ăn]]}}.
{{c|nup|Ăn uống}}
tujjqkrwt90bd87yej7bc7idu4neszk
Thể loại:caq:Thành viên nữ trong gia đình
14
421510
2573662
2026-10-26T15:13:24Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573662
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Thành viên gia đình
14
421511
2573664
2026-10-26T15:13:44Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573664
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Trứng
14
421512
2573666
2026-10-26T15:16:14Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573666
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Thực phẩm
14
421513
2573667
2026-10-26T15:16:27Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573667
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Sinh sản
14
421514
2573668
2026-10-26T15:16:30Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573668
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Ăn uống
14
421515
2573669
2026-10-26T15:16:37Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573669
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Ăn
14
421516
2573670
2026-10-26T15:16:40Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573670
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Lớp Chim
14
421517
2573671
2026-10-26T15:16:43Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573671
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Sự sống
14
421518
2573672
2026-10-26T15:17:07Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573672
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Tự nhiên
14
421519
2573673
2026-10-26T15:18:07Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573673
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Phân ngành Có xương sống
14
421520
2573674
2026-10-26T15:18:09Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573674
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Ngành Dây sống
14
421521
2573675
2026-10-26T15:18:34Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573675
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Động vật
14
421522
2573676
2026-10-26T15:18:42Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573676
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Sinh vật
14
421523
2573677
2026-10-26T15:19:36Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573677
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Thiên thể
14
421524
2573680
2026-10-26T15:20:48Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573680
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Sông
14
421525
2573681
2026-10-26T15:20:52Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573681
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Danh sách chủ đề thuộc nhóm tên gọi
14
421526
2573682
2026-10-26T15:21:08Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573682
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Đặc điểm tự nhiên
14
421527
2573683
2026-10-26T15:21:10Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573683
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Vùng nước
14
421528
2573684
2026-10-26T15:21:12Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573684
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Địa danh
14
421529
2573685
2026-10-26T15:21:19Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573685
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Nước
14
421530
2573686
2026-10-26T15:21:28Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573686
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Địa mạo
14
421531
2573687
2026-10-26T15:21:30Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573687
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Hệ thống sinh thái
14
421532
2573688
2026-10-26T15:21:32Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573688
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Chất lỏng
14
421533
2573689
2026-10-26T15:21:38Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573689
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Trái Đất
14
421534
2573690
2026-10-26T15:21:40Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573690
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Vật chất
14
421535
2573691
2026-10-26T15:21:46Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573691
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Sinh thái học
14
421536
2573692
2026-10-26T15:21:50Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573692
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Hóa học
14
421537
2573693
2026-10-26T15:22:03Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573693
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Tên
14
421538
2573694
2026-10-26T15:22:07Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573694
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Sinh học
14
421539
2573695
2026-10-26T15:22:15Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573695
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:caq:Không gian
14
421540
2573696
2026-10-26T15:22:20Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2573696
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
eyan
0
421541
2573697
2026-10-26T15:35:25Z
TheHighFighter2
42988
Trang mới: “=={{langname|nup}}== ==={{ĐM|etym}} 1=== ===={{ĐM|alt}}==== * {{alt|nup|yan}} ===={{ĐM|pron}}==== * {{IPA|nup|/ē.jã̄/}} ===={{ĐM|noun}}==== {{nup-noun|eyan|eyanzhì}} # [[cái|Cái]], [[đồ]], [[vật]], [[thứ]], [[thức]], [[điều]], [[sự]], [[việc]], [[món]]. ====={{ĐM|der}}===== {{col2|nup |eyangíci <t:đồ ăn> }} ==={{ĐM|etym}} 2=== [[File:Drums for display before action.jpg|thumb|'''Eyànzhì''']] ===={{ĐM|pron}}==== * {{IPA|nup|/ē.j…”
2573697
wikitext
text/x-wiki
=={{langname|nup}}==
==={{ĐM|etym}} 1===
===={{ĐM|alt}}====
* {{alt|nup|yan}}
===={{ĐM|pron}}====
* {{IPA|nup|/ē.jã̄/}}
===={{ĐM|noun}}====
{{nup-noun|eyan|eyanzhì}}
# [[cái|Cái]], [[đồ]], [[vật]], [[thứ]], [[thức]], [[điều]], [[sự]], [[việc]], [[món]].
====={{ĐM|der}}=====
{{col2|nup
|eyangíci <t:đồ ăn>
}}
==={{ĐM|etym}} 2===
[[File:Drums for display before action.jpg|thumb|'''Eyànzhì''']]
===={{ĐM|pron}}====
* {{IPA|nup|/ē.jã̀/}}
===={{ĐM|noun}}====
{{nup-noun|eyàn|eyànzhì}}
# [[trống|Trống]].
====={{ĐM|der}}=====
{{col2|nup
|nìyàn
|eyànnì
}}
==={{ĐM|etym}} 3===
===={{ĐM|pron}}====
* {{IPA|nup|/ē.jã̀/}}
===={{ĐM|noun}}====
{{nup-noun|eyàn|eyànzhì}}
# Sự [[nhảy múa]], sự [[khiêu vũ]].
# Trò chơi [[ca hát]].
====={{ĐM|der}}=====
{{col2|nup
|eyànyan
|yanyàn
}}
==={{ĐM|etym}} 4===
[[File:Hand File.jpg|thumb|'''Eyàn''']]
===={{ĐM|pron}}====
* {{IPA|nup|/ē.jã̀/}}
===={{ĐM|noun}}====
{{nup-noun|eyàn|eyànzhì}}
# [[giũa|Giũa]].
{{c|nup|Nhạc cụ|Dụng cụ}}
0v8h6er9cgldrnvuy3yccw3rhgjwgk2
Thể loại:Danh từ tiếng Nupe
14
421542
2573698
2026-10-26T15:35:55Z
TheHighFighter2
42988
Trang mới: “{{auto cat}}”
2573698
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ɛ̨
0
421543
2573700
2026-10-26T15:36:56Z
Lcsnes
40261
Trang mới: “{{-Latn-}} ==={{ĐM|desction}}=== {{mul-letter}} #[[chữ|Chữ]] '''[[ɛ]] viết thường''' với dấu đuôi nhỏ [[◌̨]] ([[ogonek]]). ==={{ĐM|see}}=== {{Latn-script}} =={{langname|otm}}== ==={{ĐM|pron}}=== *{{IPA|otm|[ɛ̃]}} ==={{ĐM|letter}}=== {{letter|otm}} #Chữ '''{{l|otm|ɛ}} viết thường''' với dấu mũi hóa. #:{{quote|otm|Nɛ bi 'yänni: ―'Bɛ'a ma ora bi zä. Nɛ bi t''''ɛ̨'''mbi: ―N'dande mande bi bøn ra pa, bi 'y'''ɛ̨'''n'ʉ.|Ng…”
2573700
wikitext
text/x-wiki
{{-Latn-}}
==={{ĐM|desction}}===
{{mul-letter}}
#[[chữ|Chữ]] '''[[ɛ]] viết thường''' với dấu đuôi nhỏ [[◌̨]] ([[ogonek]]).
==={{ĐM|see}}===
{{Latn-script}}
=={{langname|otm}}==
==={{ĐM|pron}}===
*{{IPA|otm|[ɛ̃]}}
==={{ĐM|letter}}===
{{letter|otm}}
#Chữ '''{{l|otm|ɛ}} viết thường''' với dấu mũi hóa.
#:{{quote|otm|Nɛ bi 'yänni: ―'Bɛ'a ma ora bi zä. Nɛ bi t''''ɛ̨'''mbi: ―N'dande mande bi bøn ra pa, bi 'y'''ɛ̨'''n'ʉ.|Người bèn hỏi họ con trai mình đã thấy khá nhằm giờ nào. Họ trả lời rằng: Bữa qua, hồi giờ thứ bảy, cơn rét lui khỏi. ([[s:Giăng/4#4:52|Giăng 4:52]])}}
==={{ĐM|see}}===
*{{letters|lang=otm|sc=Latn|qual=Bảng chữ cái từ điển 2007|a|ä|a̱|b|d|e|ë|e̱|f|g|h|i|ï|j|k|l|m|n|o|o̱|p|r|s|t|u|ü|u̱|w|x|y|z|ꞌ}}
==={{ĐM|ref}}===
*{{Chú thích web|otm|author=Wycliffe Bible Translators, Inc.|work=Otomi, Eastern Highland|year=1974|entry=SAN JUAN 4|entryurl=https://www.bible.com/bible/833/JHN.4.OTM}}
*{{Chú thích sách|es|author=Artemisa Echegoyen & Katherine Voigtlander|title=[https://www.sil.org/system/files/reapdata/12/97/23/129723167092586397405977212363100736000/otm_Diccionario_bilingue.pdf Diccionario yuhú (Otomí de la sierra madre oriental)]|year=2007}}
d9yp1dyon99l64dnp5u6alcxza843dz
Từ tái tạo:Tiếng Turk nguyên thủy/ārka-
0
421544
2573703
2026-10-26T15:56:30Z
Hiyuune
50834
Trang mới: “{{reconstruction}} {{see also|Từ tái tạo:Tiếng Turk nguyên thủy/arka}} =={{langname|trk-pro}}== ==={{section|etym}}=== {{rfe|trk-pro}} ==={{section|v}}=== {{head|trk-cmn-pro|Động từ|head=*ārka-}} # {{q|Oghuz}} [[tìm kiếm]]. ===={{section|desc}}==== * {{desc|trk-ogz-pro|*ārka-}} ** {{desc|trk-eog|اَرْقاماقْ|tr=arqa:maq}} *** {{desc|trk-oat||tr=aramak}} **** {{desc|az|aramaq}} **** {{desc|gag|aaramaa}} **** {{desc|ota||tr=aramak}} ***** {{d…”
2573703
wikitext
text/x-wiki
{{reconstruction}}
{{see also|Từ tái tạo:Tiếng Turk nguyên thủy/arka}}
=={{langname|trk-pro}}==
==={{section|etym}}===
{{rfe|trk-pro}}
==={{section|v}}===
{{head|trk-cmn-pro|Động từ|head=*ārka-}}
# {{q|Oghuz}} [[tìm kiếm]].
===={{section|desc}}====
* {{desc|trk-ogz-pro|*ārka-}}
** {{desc|trk-eog|اَرْقاماقْ|tr=arqa:maq}}
*** {{desc|trk-oat||tr=aramak}}
**** {{desc|az|aramaq}}
**** {{desc|gag|aaramaa}}
**** {{desc|ota||tr=aramak}}
***** {{desc|tr|aramak}}
*** {{desc|tk|āramak}}
==={{section|ref}}===
* {{R:trk:Clauson|page=217}}
[[en:Reconstruction:Proto-Turkic/ārka-]]
7fpvvjn3knwbhvabx1nxhzed5738vqe
Mô đun:normalized
828
421545
2573712
2026-10-26T16:24:34Z
Hiyuune
50834
Trang mới: “local export = {} local links_module = "Module:links" local m_parameters = require("Module:parameters") local table_module = "Module:table" local concat = table.concat local insert = table.insert local function title_exists(pagename) local title = mw.title.new(pagename) return not not (title and title:getContent()) end function export.show(frame) local params = { [1] = {type = "language"}, fromlang = {type = "language"}, [2] = {sublist = "comma without whites…”
2573712
Scribunto
text/plain
local export = {}
local links_module = "Module:links"
local m_parameters = require("Module:parameters")
local table_module = "Module:table"
local concat = table.concat
local insert = table.insert
local function title_exists(pagename)
local title = mw.title.new(pagename)
return not not (title and title:getContent())
end
function export.show(frame)
local params = {
[1] = {type = "language"},
fromlang = {type = "language"},
[2] = {sublist = "comma without whitespace"},
from = {alias_of = 2},
}
local args = m_parameters.process(frame:getParent().args, params)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
ins('<div style="background-color: var(--wikt-palette-palegreen, #e2f6e2);color:inherit; padding: 0.5em 1em; margin: 0.5em 0;" class="normalized-box">\n')
ins("''Dạng '''chính tả mục từ này được chuẩn hóa'''")
if args[2] and args[2][1] then
ins(" ")
local terms = {}
local termlang = args.fromlang or args[1]
for _, term in ipairs(args[2]) do
if args[1] then
local exists = title_exists(termlang:stripDiacritics(term))
insert(terms, require(links_module).full_link({
lang = termlang,
term = exists and term or nil,
alt = not exists and term or nil,
}, "bold"))
else
insert(terms, ("''%s''"):format(term))
end
end
if terms[2] then
ins(require(table_module).serialCommaJoin(terms))
else
ins(terms[1])
end
end
ins(" các quy tắc do cộng đồng biên tập Wiktionary thiết lập ")
if args[1] then
local entry_guidelines_page = ("Wiktionary:Quy định mục từ %s"):format(args[1]:getCanonicalName())
if title_exists(entry_guidelines_page) then
ins(("dựa trên [[%s]] "):format(entry_guidelines_page))
end
end
ins("hoặc các tiêu chuẩn chính tả mới nhất của ngôn ngữ đó.''</div>")
return concat(parts)
end
return export
81ed1wyokdb4b808pu7obwb8qktdfh0
2573713
2573712
2026-10-26T16:25:28Z
Hiyuune
50834
2573713
Scribunto
text/plain
local export = {}
local links_module = "Module:links"
local m_parameters = require("Module:parameters")
local table_module = "Module:table"
local concat = table.concat
local insert = table.insert
local function title_exists(pagename)
local title = mw.title.new(pagename)
return not not (title and title:getContent())
end
function export.show(frame)
local params = {
[1] = {type = "language"},
fromlang = {type = "language"},
[2] = {sublist = "comma without whitespace"},
from = {alias_of = 2},
}
local args = m_parameters.process(frame:getParent().args, params)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
ins('<div style="background-color: var(--wikt-palette-palegreen, #e2f6e2);color:inherit; padding: 0.5em 1em; margin: 0.5em 0;" class="normalized-box">\n')
ins("''Dạng '''chính tả mục từ này được chuẩn hóa'''")
if args[2] and args[2][1] then
ins(" ")
local terms = {}
local termlang = args.fromlang or args[1]
for _, term in ipairs(args[2]) do
if args[1] then
local exists = title_exists(termlang:stripDiacritics(term))
insert(terms, require(links_module).full_link({
lang = termlang,
term = exists and term or nil,
alt = not exists and term or nil,
}, "bold"))
else
insert(terms, ("''%s''"):format(term))
end
end
if terms[2] then
ins(require(table_module).serialCommaJoin(terms))
else
ins(terms[1])
end
end
ins(" theo các quy tắc do cộng đồng biên tập Wiktionary thiết lập ")
if args[1] then
local entry_guidelines_page = ("Wiktionary:Quy định mục từ %s"):format(args[1]:getCanonicalName())
if title_exists(entry_guidelines_page) then
ins(("dựa trên [[%s]] "):format(entry_guidelines_page))
end
end
ins("hoặc các tiêu chuẩn chính tả mới nhất của ngôn ngữ đó.''</div>")
return concat(parts)
end
return export
1g620kscew7roe8wqhywavwzkyr6n01
2573714
2573713
2026-10-26T16:26:54Z
Hiyuune
50834
2573714
Scribunto
text/plain
local export = {}
local links_module = "Module:links"
local m_parameters = require("Module:parameters")
local table_module = "Module:table"
local concat = table.concat
local insert = table.insert
local function title_exists(pagename)
local title = mw.title.new(pagename)
return not not (title and title:getContent())
end
function export.show(frame)
local params = {
[1] = {type = "language"},
fromlang = {type = "language"},
[2] = {sublist = "comma without whitespace"},
from = {alias_of = 2},
}
local args = m_parameters.process(frame:getParent().args, params)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
ins('<div style="background-color: var(--wikt-palette-palegreen, #e2f6e2);color:inherit; padding: 0.5em 1em; margin: 0.5em 0;" class="normalized-box">\n')
ins("''Dạng '''chính tả '''")
if args[2] and args[2][1] then
ins(" ")
local terms = {}
local termlang = args.fromlang or args[1]
for _, term in ipairs(args[2]) do
if args[1] then
local exists = title_exists(termlang:stripDiacritics(term))
insert(terms, require(links_module).full_link({
lang = termlang,
term = exists and term or nil,
alt = not exists and term or nil,
}, "bold"))
else
insert(terms, ("''%s''"):format(term))
end
end
ins(" đã được chuẩn hóa'''")
if terms[2] then
ins(require(table_module).serialCommaJoin(terms))
else
ins(terms[1])
end
end
ins(" theo các quy tắc do cộng đồng biên tập Wiktionary thiết lập ")
if args[1] then
local entry_guidelines_page = ("Wiktionary:Quy định mục từ %s"):format(args[1]:getCanonicalName())
if title_exists(entry_guidelines_page) then
ins(("dựa trên [[%s]] "):format(entry_guidelines_page))
end
end
ins("hoặc các tiêu chuẩn chính tả mới nhất của ngôn ngữ đó.''</div>")
return concat(parts)
end
return export
li1r0oouo8el4mm012umw8snmhl1y45
2573715
2573714
2026-10-26T16:27:56Z
Hiyuune
50834
2573715
Scribunto
text/plain
local export = {}
local links_module = "Module:links"
local m_parameters = require("Module:parameters")
local table_module = "Module:table"
local concat = table.concat
local insert = table.insert
local function title_exists(pagename)
local title = mw.title.new(pagename)
return not not (title and title:getContent())
end
function export.show(frame)
local params = {
[1] = {type = "language"},
fromlang = {type = "language"},
[2] = {sublist = "comma without whitespace"},
from = {alias_of = 2},
}
local args = m_parameters.process(frame:getParent().args, params)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
ins('<div style="background-color: var(--wikt-palette-palegreen, #e2f6e2);color:inherit; padding: 0.5em 1em; margin: 0.5em 0;" class="normalized-box">\n')
ins("''Dạng '''chính tả mục từ này được chuẩn hóa'''")
if args[2] and args[2][1] then
ins(" ")
local terms = {}
local termlang = args.fromlang or args[1]
for _, term in ipairs(args[2]) do
if args[1] then
local exists = title_exists(termlang:stripDiacritics(term))
insert(terms, require(links_module).full_link({
lang = termlang,
term = exists and term or nil,
alt = not exists and term or nil,
}, "bold"))
else
insert(terms, ("(''%s'')"):format(term))
end
end
if terms[2] then
ins(require(table_module).serialCommaJoin(terms))
else
ins(terms[1])
end
end
ins(" theo các quy tắc do cộng đồng biên tập Wiktionary thiết lập ")
if args[1] then
local entry_guidelines_page = ("Wiktionary:Quy định mục từ %s"):format(args[1]:getCanonicalName())
if title_exists(entry_guidelines_page) then
ins(("dựa trên [[%s]] "):format(entry_guidelines_page))
end
end
ins("hoặc các tiêu chuẩn chính tả mới nhất của ngôn ngữ đó.''</div>")
return concat(parts)
end
return export
5etlkew1g329fxjpglkytj46c11rahd
2573716
2573715
2026-10-26T16:29:30Z
Hiyuune
50834
2573716
Scribunto
text/plain
local export = {}
local links_module = "Module:links"
local m_parameters = require("Module:parameters")
local table_module = "Module:table"
local concat = table.concat
local insert = table.insert
local function title_exists(pagename)
local title = mw.title.new(pagename)
return not not (title and title:getContent())
end
function export.show(frame)
local params = {
[1] = {type = "language"},
fromlang = {type = "language"},
[2] = {sublist = "comma without whitespace"},
from = {alias_of = 2},
}
local args = m_parameters.process(frame:getParent().args, params)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
ins('<div style="background-color: var(--wikt-palette-palegreen, #e2f6e2);color:inherit; padding: 0.5em 1em; margin: 0.5em 0;" class="normalized-box">\n')
ins("''Dạng '''chính tả được chuẩn hóa'''")
if args[2] and args[2][1] then
ins(" theo từ ")
local terms = {}
local termlang = args.fromlang or args[1]
for _, term in ipairs(args[2]) do
if args[1] then
local exists = title_exists(termlang:stripDiacritics(term))
insert(terms, require(links_module).full_link({
lang = termlang,
term = exists and term or nil,
alt = not exists and term or nil,
}, "bold"))
else
insert(terms, ("''%s''"):format(term))
end
end
if terms[2] then
ins(require(table_module).serialCommaJoin(terms))
else
ins(terms[1])
end
end
ins(" dựa trên các quy tắc do cộng đồng biên tập Wiktionary thiết lập ")
if args[1] then
local entry_guidelines_page = ("Wiktionary:Quy định mục từ %s"):format(args[1]:getCanonicalName())
if title_exists(entry_guidelines_page) then
ins(("được giới thiệu trong [[%s]] "):format(entry_guidelines_page))
end
end
ins("hoặc các tiêu chuẩn chính tả mới nhất của ngôn ngữ đó.''</div>")
return concat(parts)
end
return export
8mr7mum2vss0pbaotetyvgp76bp7hd4
2573717
2573716
2026-10-26T16:29:54Z
Hiyuune
50834
2573717
Scribunto
text/plain
local export = {}
local links_module = "Module:links"
local m_parameters = require("Module:parameters")
local table_module = "Module:table"
local concat = table.concat
local insert = table.insert
local function title_exists(pagename)
local title = mw.title.new(pagename)
return not not (title and title:getContent())
end
function export.show(frame)
local params = {
[1] = {type = "language"},
fromlang = {type = "language"},
[2] = {sublist = "comma without whitespace"},
from = {alias_of = 2},
}
local args = m_parameters.process(frame:getParent().args, params)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
ins('<div style="background-color: var(--wikt-palette-palegreen, #e2f6e2);color:inherit; padding: 0.5em 1em; margin: 0.5em 0;" class="normalized-box">\n')
ins("''Dạng '''chính tả mục từ này đã được chuẩn hóa'''")
if args[2] and args[2][1] then
ins(" theo từ ")
local terms = {}
local termlang = args.fromlang or args[1]
for _, term in ipairs(args[2]) do
if args[1] then
local exists = title_exists(termlang:stripDiacritics(term))
insert(terms, require(links_module).full_link({
lang = termlang,
term = exists and term or nil,
alt = not exists and term or nil,
}, "bold"))
else
insert(terms, ("''%s''"):format(term))
end
end
if terms[2] then
ins(require(table_module).serialCommaJoin(terms))
else
ins(terms[1])
end
end
ins(" dựa trên các quy tắc do cộng đồng biên tập Wiktionary thiết lập ")
if args[1] then
local entry_guidelines_page = ("Wiktionary:Quy định mục từ %s"):format(args[1]:getCanonicalName())
if title_exists(entry_guidelines_page) then
ins(("được giới thiệu trong [[%s]] "):format(entry_guidelines_page))
end
end
ins("hoặc các tiêu chuẩn chính tả mới nhất của ngôn ngữ đó.''</div>")
return concat(parts)
end
return export
qzb3o0rv9eo7icai56lckb1phh7ykx3
2573718
2573717
2026-10-26T16:31:37Z
Hiyuune
50834
2573718
Scribunto
text/plain
local export = {}
local links_module = "Module:links"
local m_parameters = require("Module:parameters")
local table_module = "Module:table"
local concat = table.concat
local insert = table.insert
local function title_exists(pagename)
local title = mw.title.new(pagename)
return not not (title and title:getContent())
end
function export.show(frame)
local params = {
[1] = {type = "language"},
fromlang = {type = "language"},
[2] = {sublist = "comma without whitespace"},
from = {alias_of = 2},
}
local args = m_parameters.process(frame:getParent().args, params)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
ins('<div style="background-color: var(--wikt-palette-palegreen, #e2f6e2);color:inherit; padding: 0.5em 1em; margin: 0.5em 0;" class="normalized-box">\n')
ins("''Dạng '''chính tả mục từ này đã được chuẩn hóa'''")
if args[2] and args[2][1] then
ins(" theo từ ")
local terms = {}
local termlang = args.fromlang or args[1]
for _, term in ipairs(args[2]) do
if args[1] then
local exists = title_exists(termlang:stripDiacritics(term))
insert(terms, require(links_module).full_link({
lang = termlang,
term = exists and term or nil,
alt = not exists and term or nil,
}, "bold"))
else
insert(terms, ("''%s''"):format(term))
end
end
if terms[2] then
ins(require(table_module).serialCommaJoin(terms))
else
ins(terms[1])
end
end
ins(" với các quy tắc do cộng đồng biên tập Wiktionary thiết lập ")
if args[1] then
local entry_guidelines_page = ("Wiktionary:Quy định mục từ %s"):format(args[1]:getCanonicalName())
if title_exists(entry_guidelines_page) then
ins(("được giới thiệu trong [[%s]] "):format(entry_guidelines_page))
end
end
ins("hoặc các tiêu chuẩn chính tả mới nhất của ngôn ngữ đó.''</div>")
return concat(parts)
end
return export
drsmm0l1nj8zj0hrumamzrstyjd2180
Mô đun:zlw-lch-decl/data/zlw-opl
828
421546
2573720
2026-10-26T16:34:06Z
Hiyuune
50834
Trang mới: “--[==[ Old Polish data for [[Module:zlw-lch-decl]]: the indicators of {{tl|zlw-opl-ndecl}} and the pronouns of `<pron>`. Old Polish tables only list attested forms, so nothing is generated by rule. ]==] local data = {} -- Every Old Polish table is attested, i.e. it lists the forms given and generates nothing. data.attested = true -- The tooltip over the row header of each case, giving the (modern) Polish name of the case and its questions. data.case_titles = { nom = "…”
2573720
Scribunto
text/plain
--[==[
Old Polish data for [[Module:zlw-lch-decl]]: the indicators of {{tl|zlw-opl-ndecl}} and the pronouns of `<pron>`. Old
Polish tables only list attested forms, so nothing is generated by rule.
]==]
local data = {}
-- Every Old Polish table is attested, i.e. it lists the forms given and generates nothing.
data.attested = true
-- The tooltip over the row header of each case, giving the (modern) Polish name of the case and its questions.
data.case_titles = {
nom = "mianownik (kto? co?)", gen = "dopełniacz (kogo? czego?)", dat = "celownik (komu? czemu?)",
acc = "biernik (kogo? co?)", ins = "narzędnik (kim? czym?)", loc = "miejscownik (o kim? o czym?)", voc = "wołacz (o!)",
}
data.indicators = {
noun = {
m = { group = "gender" }, f = { group = "gender" }, n = { group = "gender" },
pr = { group = "animacy" }, anml = { group = "animacy" }, inan = { group = "animacy" },
sg = { group = "number" }, pl = { group = "number" },
du = {}, recon = { value = "word" }, pron = {},
},
}
data.pronouns = {
["czso"] = {
numbers = { "s" },
nom_s = { "co", "cso", "czso" },
gen_s = { "czego" },
dat_s = { "czemu" },
acc_s = { "co", "cso", "czso" },
ins_s = { "czym" },
loc_s = { "czem", "czym" },
},
["ja"] = {
numbers = { "s" },
nom_s = { "ja", "jaz" },
gen_s = { "mnie", "mienie", "mie", "mię", "mnię" },
dat_s = { "mnie", "mienie", "minie", "mie", "mi", "mni", "ni" },
acc_s = { "mnie", "mię", "mie", "mnię", "nię", "mi" },
ins_s = { "mną" },
loc_s = { "mnie" },
},
["kto"] = {
numbers = { "s" },
nom_s = { "kto" },
gen_s = { "kogo" },
dat_s = { "komu" },
acc_s = { "kogo" },
ins_s = { "kim" },
loc_s = { "kim" },
},
["ktoś"] = {
numbers = { "s" },
nom_s = { "ktoś" },
gen_s = { "kogoś" },
dat_s = { "komuś" },
acc_s = { "kogoś" },
ins_s = { "kimś" },
loc_s = { "kimś" },
},
["my"] = {
numbers = { "p", "d" },
nom_d = { "wa" },
gen_d = { "naju" },
dat_d = { "nama" },
acc_d = { "wa" },
ins_d = { "nama" },
loc_d = { "naju" },
nom_p = { "my" },
gen_p = { "nas" },
dat_p = { "nam" },
acc_p = { "nas" },
ins_p = { "nami" },
loc_p = { "nas" },
},
["nic"] = {
numbers = { "s" },
nom_s = { "nic", "nics", "niczs", "nicso", "niczso" },
gen_s = { "niczego" },
dat_s = { "niczemu" },
acc_s = { "nic", "nics", "niczs", "nicso", "niczso" },
ins_s = { "niczym" },
loc_s = { "niczem", "niczym" },
},
["nikt"] = {
numbers = { "s" },
nom_s = { "nikt" },
gen_s = { "nikogo" },
dat_s = { "nikomu" },
acc_s = { "nikogo" },
ins_s = { "nikim" },
loc_s = { "nikim" },
},
["siebie"] = {
numbers = { "s" }, numberless = true,
gen_s = { "siebie", "się" },
dat_s = { "sobie" },
acc_s = { "siebie", "się" },
ins_s = { "sobą" },
loc_s = { "sobie" },
},
["ty"] = {
numbers = { "s" },
nom_s = { "ty" },
gen_s = { "ciebie", "cie" },
dat_s = { "tobie", "cie", "ci", "ciebie" },
acc_s = { "ciebie", "cię", "cie" },
ins_s = { "tobą" },
loc_s = { "tobie" },
voc_s = { "ty" },
},
["wy"] = {
numbers = { "p", "d" },
dat_d = { "wama" },
ins_d = { "wama" },
nom_p = { "wy" },
gen_p = { "was" },
dat_p = { "wam" },
acc_p = { "was" },
ins_p = { "wami" },
loc_p = { "was" },
voc_p = { "wy" },
},
}
return data
svjuq85vklhd7swur28xl9w13n308xo
Bản mẫu:zlw-opl-ndecl
10
421547
2573721
2026-10-26T16:35:07Z
Hiyuune
50834
Trang mới: “{{#invoke:zlw-lch-decl|noun|lang=zlw-opl}}<!-- --><noinclude>{{documentation}}</noinclude>”
2573721
wikitext
text/x-wiki
{{#invoke:zlw-lch-decl|noun|lang=zlw-opl}}<!--
--><noinclude>{{documentation}}</noinclude>
czz0pugfis0d1ae0guwyb32smhmajyy
kết xù
0
421548
2573732
2026-10-26T21:36:44Z
TienMinh-mun6xnChing
57893
/* */ từ sai chính tả phổ biến trong văn hóa mạng
2573732
wikitext
text/x-wiki
#đổi [[kếch xù]]
gf8do9lf68bc5jftsl6cyv5qzduwrjc
cương dương
0
421549
2573733
2026-10-26T22:59:55Z
TienMinh-mun6xnChing
57893
/* */
2573733
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|verb}}===
{{vi-verb}}
# {{like-entry|cường dương}}.
mp94ov84z3be8uociru682vst7d33vr
2573806
2573733
2026-10-27T06:29:25Z
Hiyuune
50834
/* Tiếng Việt */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2573806
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|verb}}===
{{vi-verb}}
# {{like-entry|cường dương}}.
bgp0d5fqf5reh1ftosowsl8upqkxueq
Thành viên:Khônghềgiảtrânisbetterthannguyentrongphu
2
421550
2573735
2026-10-26T23:13:02Z
TienMinh-mun6xnChing
57893
/* */ dạng rối của Win cakes (Nooberchoss)
2573735
wikitext
text/x-wiki
{{con rối|Win cakes|confirmed}}
1mi1stec33fgrtsa59vuuxw4rwntu09
2573741
2573735
2026-10-27T01:38:12Z
Higashizakura
36666
không phải thành viên này
2573741
wikitext
text/x-wiki
{{con rối|Yummie1207|confirmed}}
rrpcx5tzs3edrg7sfm6f7iyvkr0jsbt
Thảo luận Thành viên:Nguyentrongphu/lưu 4
3
421551
2573736
2026-10-26T23:17:24Z
TienMinh-mun6xnChing
57893
/* */ Tác vụ: Phục hồi thảo luận từ ngày 4 tháng 1 năm 2022 đến ngày 14 tháng 10 năm 2024
2573736
wikitext
text/x-wiki
== How we will see unregistered users ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin=content/>
Hi!
You get this message because you are an admin on a Wikimedia wiki.
When someone edits a Wikimedia wiki without being logged in today, we show their IP address. As you may already know, we will not be able to do this in the future. This is a decision by the Wikimedia Foundation Legal department, because norms and regulations for privacy online have changed.
Instead of the IP we will show a masked identity. You as an admin '''will still be able to access the IP'''. There will also be a new user right for those who need to see the full IPs of unregistered users to fight vandalism, harassment and spam without being admins. Patrollers will also see part of the IP even without this user right. We are also working on [[m:IP Editing: Privacy Enhancement and Abuse Mitigation/Improving tools|better tools]] to help.
If you have not seen it before, you can [[m:IP Editing: Privacy Enhancement and Abuse Mitigation|read more on Meta]]. If you want to make sure you don’t miss technical changes on the Wikimedia wikis, you can [[m:Global message delivery/Targets/Tech ambassadors|subscribe]] to [[m:Tech/News|the weekly technical newsletter]].
We have [[m:IP Editing: Privacy Enhancement and Abuse Mitigation#IP Masking Implementation Approaches (FAQ)|two suggested ways]] this identity could work. '''We would appreciate your feedback''' on which way you think would work best for you and your wiki, now and in the future. You can [[m:Talk:IP Editing: Privacy Enhancement and Abuse Mitigation|let us know on the talk page]]. You can write in your language. The suggestions were posted in October and we will decide after 17 January.
Thank you.
/[[m:User:Johan (WMF)|Johan (WMF)]]<section end=content/>
</div>
18:20, ngày 4 tháng 1 năm 2022 (UTC)
<!-- Tin nhắn của Thành viên:Johan (WMF)@metawiki gửi cho mọi người trong danh sách tại https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/Target_lists/Admins2022(8)&oldid=22532697 -->
== Thư mời tham gia biểu quyết ==
{| class="table" align="center" style="width: 80%; background-color: #FAFAD2; border: 1px solid #fceb92; margin-bottom: 10px"
| style="vertical-align: middle; padding: 10px;" | [[File:Logo vote.svg|80px|link=]]
| style="vertical-align: middle; padding: 15px 10px 10px 0;" | Mời bạn cho nhận xét ở [[Thảo luận Wiktionary:Bảo quản viên|Biểu quyết bảo quản viên]] của '''[[Thành viên:Ccv2020]]''' tại '''[[Thảo_luận_Wiktionary:Bảo_quản_viên#Ccv2020|đây]]'''.
<small>Hãy cùng tích cực tham gia các biểu quyết và thảo luận về chúng. Mỗi hành động của bạn sẽ góp phần không nhỏ để xây dựng các mục từ trên Wiktionary - tài sản chung của cộng đồng chúng ta, giúp wiki ta ngày càng phát triển vững mạnh! Thân ái!</small>
|}[[Thành viên:Ccv2020|<span style=color:#80ff00>⎕</span>]] – [[Thảo luận Thành viên:Ccv2020|<span style=color:#ff0000>⍰</span>]] – [[Đặc biệt:Đóng góp/Ccv2020|<span style=color:#ffff00>〿</span>]] 00:54, ngày 23 tháng 2 năm 2022 (UTC)
== Đơn miễn cấm chỉ ==
Sau 10 ngày ở dự án khác thì tôi đã quyết định sẵn sàng làm lại từ đầu trên Wikipedia theo cuộc thảo luận của bác trên Meta, nhưng việc này có vẻ khá nguy hiểm do lệnh cấm chỉ (chỉ mỗi tài khoản [[User:DefenderTienMinh07|này]]) vẫn còn hiệu lực, và bài viết tôi tạo bị xóa (theo tiêu chí C5) vẫn chưa được phục hồi. Không biết bác còn nghi ngờ acc này là rối của TTS hay không nhưng bác có thể cấu hình lại lý do cấm cho vụ cấm (hoặc làm gì đó để rút cấm chỉ cho tk) được không vậy bác (còn nếu bác cảm thấy lo lắng thì bác vẫn để thời hạn cấm vô hạn theo ý muốn của mình) do vẫn chưa được kiểm định để khẳng định điều này và để tránh nguy hiểm khi làm lại từ đầu (như tín nhiệm thành viên giảm dần trong mắt cộng đồng, tội sẽ nặng hơn do quy định cấm chỉ sửa đổi vẫn còn hiệu lực).
Cũng khá ngại khi nhắn cho bác ở dự án này, mong bác cho ý kiến. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh☽''' </span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|thảo luận]]) 11:00, ngày 13 tháng 5 năm 2023 (UTC)
:Xin nhắc lại lần cuối: bạn có quyền "làm lại từ đầu" nhưng phải giấu thân phận. Án cấm của bạn chả liên quan gì nếu bạn giấu thân phận. Nếu bạn cố tình không chịu hiểu thì kệ bạn. Tôi sẽ bơ bạn từ nay trở đi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:03, ngày 13 tháng 5 năm 2023 (UTC)
== Thư mời ==
Mời bạn cho đôi lời nhận xét tại [[Thảo luận Wiktionary:Bảo quản viên#P. %C4%90%C4%82NG|Biểu quyết chọn bảo quản viên]]. Xin hết lòng cảm ơn rất nhiều. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:43, ngày 24 tháng 8 năm 2023 (UTC)
:Cảm ơn bạn vì phiếu đồng ý. Tôi không biết xác suất hay cuộc biểu quyết sẽ ra sao nhưng liều một phen vậy. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:45, ngày 24 tháng 8 năm 2023 (UTC)
== Thư mời tham gia biểu quyết ==
<div style="padding: 0.5em; background: #f8f8ff; margin-top: 1em; font-size: 1em">
{| class="table" style="width: 80%; background-color: #ACE1AF; border: 1px solid #fceb92; margin: auto; margin-bottom: 10px"
| style="vertical-align: middle; padding: 10px;" | [[Tập tin:Logo vote.svg|80px|link=]]
| style="vertical-align: middle; padding: 15px 10px 10px 0;" | '''Mời bạn cho ý kiến về việc cấp quyền Bảo quản viên cho thành viên [[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] tại trang [[Thảo luận Wiktionary:Bảo quản viên#DefenderTienMinh07|Thảo luận Wiktionary:Bảo quản viên]]. Xin cảm ơn.
<small>Hãy cùng tích cực tham gia các biểu quyết và thảo luận về chúng. Mỗi hành động của bạn sẽ góp phần không nhỏ để xây dựng các mục từ trên Wiktionary - tài sản chung của cộng đồng chúng ta, giúp wiki ta ngày càng phát triển vững mạnh! Thân ái!
|}
</div> [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:25, ngày 24 tháng 8 năm 2023 (UTC)
== Về việc gỡ quyền BQV đối với Tuanminh01 ==
Vậy là dự án đã cử thêm được BQV mới. Nhưng có điều là BQV Tuanminh01 đã không hoạt động trong 2 năm rồi, không biết có nên báo lên Meta gỡ quyền không. Mời bác cho ý kiến (hoặc bác có thể cho ý kiến tại [[Wiktionary:Thảo luận#Tuanminh01|Wiktionary:Thảo luận]] trong mục Tuanminh01). – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 20:53, ngày 2 tháng 9 năm 2023 (UTC)
:Không cần thiết, Meta sẽ tự gỡ quyền BQV của Tuanminh trong tương lai không xa. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 20:55, ngày 2 tháng 9 năm 2023 (UTC)
::Tôi nghĩ chắc nên trình với Meta gỡ quyền thôi vì còn trên dự án khác thì rất rất nhiều BQV biết ai mà gỡ. Mà tôi không tin tưởng về thành viên này lắm vì trên Wikipedia lúc còn là BQV đã tự ý cấm [https://vi.wikipedia.org/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:Nh%E1%BA%ADt_tr%C3%ACnh/block&page=Th%C3%A0nh+vi%C3%AAn%3AB%E1%BB%99+l%E1%BB%8Dc+sai+ph%E1%BA%A1m tài khoản hệ thống Bộ lọc sai phạm] mà không lý do. Bác có thể báo nếu muốn vì tôi không biết cách để báo. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 20:59, ngày 2 tháng 9 năm 2023 (UTC)
:: Mà thôi tôi đi ngủ đây, chắc ngày mai thành viên Đăng chắc sẽ vui mừng lắm, tôi khá nóng lòng muốn được xem phản ứng của thành viên ra sao sau khi được cấp quyền BQV. [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 21:07, ngày 2 tháng 9 năm 2023 (UTC)
:::Chuyện đó bạn không cần phải lo. Họ vẫn gỡ quyền các BQV vắng mặt trên 2 năm theo định kỳ. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 01:27, ngày 3 tháng 9 năm 2023 (UTC)
== Về phần quote ==
Chào anh! Về phần quote, nó được trình bày theo [[en:Wiktionary:Quotations#Placing_quotations|Wiktionary tiếng Anh]]. Phiền anh xem xét lại--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 05:40, ngày 3 tháng 9 năm 2023 (UTC)
:[[Thành viên:TheHighFighter2|TheHighFighter2]] Mời bạn đưa ra một vài ví dụ (một vài mục từ) bên Wikitionary En có sử dụng cách quote này thay vì đưa ra một trang vô nghĩa vì Wiktionary En căn bản không có [https://en.wiktionary.org/wiki/Wiktionary:Policies_and_guidelines policy nào hết]. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 05:45, ngày 3 tháng 9 năm 2023 (UTC)
::Anh xem [[:en:Category:English terms with quotations]]--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 05:50, ngày 3 tháng 9 năm 2023 (UTC)
:::[[Thành viên:TheHighFighter2|TheHighFighter2]] Quote của họ mặc định là hide, có nghĩa là phải bấm vô thì nó mới hiện ra. Tôi không ủng hộ cách làm của bạn khi mặc định là show. Nếu bạn copy cách mặc định là hide giống bên Wikitionary En thì ok. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 05:54, ngày 3 tháng 9 năm 2023 (UTC)
::::Nhờ anh tạo giúp trang [[:en:MediaWiki:Gadget-defaultVisibilityToggles.js]] --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 06:25, ngày 3 tháng 9 năm 2023 (UTC)
:::::@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Vậy phiền bác có thể cấp quyền Bảo quản viên giao diện cho TheHighFighter2 để thành viên có thể tạo và sửa trang MediaWiki. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:37, ngày 3 tháng 9 năm 2023 (UTC)
::::::Xong. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:44, ngày 3 tháng 9 năm 2023 (UTC)
== Thư mời cho ý kiến ==
Đang có cuộc tranh luận diễn ra tại trang [https://vi.wiktionary.org/wiki/Wiktionary:Th%E1%BA%A3o_lu%E1%BA%ADn#T%C3%ADnh_trung_l%E1%BA%ADp Wiktionary:Thảo luận#Tính trung lập] về nội dung không trung lập trên dự án, mong bác cho ý kiến. Xin cảm ơn – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:30, ngày 16 tháng 9 năm 2023 (UTC)
== Dãy IP ==
Chào bạn, dạo gần đây có một vài dãy IP chuyên sửa đổi các trang của rối, tôi nghĩ rất có khả năng cao là TTS vì proxy. Không biết tôi nên giải quyết như thế nào đối với các tài khoản proxy này. Tôi có nên cấm theo dãy được không?. Tôi thấy thời hạn cao nhất dường như là 1 năm thì phải. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:15, ngày 25 tháng 9 năm 2023 (UTC)
:[[Thành viên:P. ĐĂNG|Phong Đăng]] Proxy thì auto cấm. Bạn có thể cấm từ 1 tới 2 năm, tùy bạn quyết định. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 20:58, ngày 25 tháng 9 năm 2023 (UTC)
::À Ok. Thanks bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:54, ngày 26 tháng 9 năm 2023 (UTC)
== Tôi (HoangLoverHistory96) là thành viên Ti2008 của Wikipedia tiếng Việt ==
Kính thưa bảo quản viên Nguyentrongphu của Wikipedia tiếng Việt
HoangLoverHistory96 là tài khoản mới mở của tôi — thành viên Ti2008, một thành viên cũ tuy không có quá xuất sắc nhưng có một số đóng góp có giá trị về đề tài lịch sử. Bảo quản viên Nguyentrongphu nếu muốn kiểm chứng thì có thể so sánh và tìm ra sự '''hoàn toàn trùng khớp''' những sửa đổi của tài khoản mới HoangLoverHistory96 với '''những sửa đổi nổi trội của tài khoản cũ Ti2008 trong giai đoạn 2016–2019'''. Thêm vào đó nếu bảo quản viên Nguyentrongphu muốn có bằng chứng thì tôi hoàn toàn có đầy đủ căn cứ để khẳng định điều này qua Gmail. Tôi có nhiều tài khoản email khác nhau nhưng '''email đăng ký của Ti2008 và email đăng ký của HoangLoverHistory96 đều thuộc về tôi''', tôi sẽ gửi bằng chứng nếu bảo quản viên Nguyentrongphu '''thật sự''' quan tâm và muốn liên hệ.
Không biết do hiểu lầm gì mà [[Thành viên:P. ĐĂNG|thành viên Phong Đăng]] không ngần ngại lùi sửa và cấm tài khoản HoangLoverHistory96 của tôi mà không một chút suy xét, cân nhắc liệu các sửa đổi của tôi đúng hay sai, hữu ích hay không hữu ích, có nguồn hay không có nguồn, vi phạm hay không vi phạm. Thành viên Phong Đăng lại còn dán nhãn tôi là con rối của Kayani. Thứ nhất tôi là Ti2008 chứ không phải là Kayani. Thứ hai, trong thời gian sử dụng tài khoản Ti2008 tôi đã từng chế nhạo người này là “Kay lão sư”, các bảo quản viên cứ hỏi anh Trungda thì sẽ biết chuyện.
Thành viên Phong Đăng muốn nghĩ sao thì nghĩ, '''nhưng Sự Thật chỉ có một. HoangLoverHistory96 là Ti2008 chứ không phải là Kayani'''. Kính mong bảo quản viên Nguyentrongphu minh xét, đọc thư này và giúp tôi hồi phục tài khoản HoangLoverHistory96 để tôi có thể có thêm những đóng góp hữu ích cho đề tài lịch sử trên Wikipedia theo khả năng của tôi, như tài khoản Ti2008 đã từng làm.
Thân mến,
Tôi,
Ti2008/HoangHistoryLover96
[[Thành viên:HoangLoverHistory96|HoangLoverHistory96]] ([[Thảo luận Thành viên:HoangLoverHistory96|thảo luận]]) 08:16, ngày 13 tháng 12 năm 2023 (UTC)
:Bạn nói suông suông thì rất khó tin. Nếu bạn thật sự là Ti2008 thì mời bạn đăng nhập vào tk đó rồi chúng ta có thể nói chuyện. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 10:14, ngày 13 tháng 12 năm 2023 (UTC)
:Tôi hiểu ý bạn. Tuy nhiên, khoảng năm 2019-20 hồi xưa, tôi đã đặt random password cho Ti2008 để khỏi đăng nhập vào Wikipedia. Vì khi đó Ti2008 khá "nghiện" Wikipedia trong khi còn nhiều bề bộn ngoài đời. Hiện nay tôi (Ti2008, HoangLoverHistory96) vẫn khá đa sự nhưng vẫn đủ chừng mực thời gian để đóng góp 1 số bài như cách tôi đã làm bên vi.wikipedia mấy ngày qua. Tôi có bằng chứng hình ảnh có thể gửi bạn qua Gmail để chứng minh rằng chủ thư điện tử của tôi cũng là chủ thư điện tử của Ti2008. Giờ đăng nhập vào Ti2008 cũng được nhưng IP ở địa phương của tôi nằm trong dãy bị cấm, nhưng nếu liên hệ Gmail không tiện thì tôi sẽ cố gắng hôm nào kiếm một nơi thuận lợi mà đăng nhập vào đó rồi xác nhận với bạn ạ. Cám ơn bạn đã hồi âm.[[Thành viên:HoangLoverHistory96|HoangLoverHistory96]] ([[Thảo luận Thành viên:HoangLoverHistory96|thảo luận]]) 12:10, ngày 13 tháng 12 năm 2023 (UTC)
::Bạn bắt buộc phải đăng nhập thì tôi mới tin. Sau đó, dùng acc Ti2008 nhắn cho tôi bên Wikipedia và xác nhận HoangLoverHistory96 là acc của bạn. Nói suông suông thì ai cũng mạo nhận thành Ti2008 chả được? [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:49, ngày 13 tháng 12 năm 2023 (UTC)
Sau khi nghe bạn nói thì tôi đã cố gắng xin cấp lại mật khẩu cho tài khoản Ti2008. Nhưng tôi đợi hồi âm lâu và tôi chợt nhớ ra là trong tiến trình phi wiki hoá (2019-20), dường như tôi đã xoá thư điện tử khỏi tuỳ chọn của Ti2008 rồi. Tuy nhiên trên email của tôi còn lưu 1 số bằng chứng Wikipedia thông báo các thành viên khác gửi tin nhắn đến cho Ti2008, vậy tôi có thể liên hệ với bạn để cung cấp bằng chứng được không?
[[Thành viên:HoangLoverHistory96|HoangLoverHistory96]] ([[Thảo luận Thành viên:HoangLoverHistory96|thảo luận]]) 13:59, ngày 13 tháng 12 năm 2023 (UTC)
::Bạn là Ti2008, tôi cũng quan ngại đấy. Xin hỏi trước khi tạo tk này, bạn có sửa đổi bằng IP hay không? Hay đây đúng với tạo tk này và có những sửa đổi đầu tiên sau những năm dài ngừng hoạt động?
::Không thuyết phục. Thứ nhất, tôi khá ngạc nhiên khi tin nhắn của bạn trong trang tv của BQV Huy hơi khác với những dòng bạn nhắn tại đây và những gì đã có xảy ra.
::Thứ hai, tk của bạn tạo vào ngày 9 tháng 12, trước đó, vào ngày 4 tháng 12, một loạt tk rối của Kay được mở ra (trong đó là Juthoiu, đang bị cấm), cùng ngày này, tôi có nhắc với DHN về Minh Huy và Trungda trong một vụ kiểm định rối, thảo luận này chỉ tôi và DHN biết trong trang tv riêng, Kayani (Juthoiu) cũng xuất hiện để kêu la với tôi tại đây, nhưng HoangLoverHistory96 nếu là Ti2008 thì không xuất hiện trong cuộc thảo luận đó, tk thậm chí chưa mở thì biết gì về cuộc thảo luận này. -> Hôm nay, có một tk mở ra ra sau khi Kayani bị cấm chỉ cách vài ngày và nói rằng là một tv cũ + lấy vd về Trungda và nhiều BQV khác thì nói với Minh Huy --> trùng hợp thứ 1.
::Thứ ba, bạn nói "còn chụp mũ tôi là con rối của Kayani" "không cho tôi một chút cơ hội nào để khẳng định danh tính thật sự của mình". Bạn nên nhớ, tôi không có quyền, tôi không có khả năng, và chưa làm bất cứ hành động gì ngăn không cho bạn khẳng định danh tính cá nhân. Tôi báo tk này trong lúc bạn đang thực hiện sửa đổi Wikipedia, có thể khẳng định, tk này chỉ bị cấm sau một khoản thời gian khá dài còn sử dụng được (đủ để chứng minh và thảo luận) khi báo cáo được gửi lên. Bạn có thời gian lùi sửa đổi của tôi, tv có thâm niên không chơi trò lùi sửa, có việc hiểu lầm đang diễn ra liên quan tới mình thì sẽ vào trang thảo luận đối chấp. Chẳng phải trang thảo luận của tôi luôn mở đó hay sao?. Trong khoản thời gian này bạn dùng nó làm gì? Có liên quan đến tôi, tôi không ngại xin được nói thẳng, vài tiếng sau khi tôi báo lên, chính xác là bạn còn đi gửi cảm ơn (troll) ngược lại với tôi [https://vi.wikipedia.org/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:Nh%E1%BA%ADt_tr%C3%ACnh&action=view&type=thanks&user=HoangLoverHistory96], thao tác này bạn thực hiện trong báo cáo của tôi lên tk của bạn trong Wikipedia:TNCBQV, thứ hai là tháo tác trong trang kiểm định tài khoản rối Juthoiu. Lúc đó, tôi chưa từng nhắc gì đến vụ kiểm đinh này, bạn biết được trang đó = trùng hợp lần 2. Bạn dùng từ "vu khống" cũng lạ là Kayani chỉ vài ngày trước đó nói với tôi câu này.
::Thứ tư, Kayani hoạt động cùng thời với Ti2008, thành viên Ti2008 hoạt động cùng thời cùng mảng với Trungda. Các thảo luận trên đây hoàn toàn diễn ra công khai, lý do thảo luận với Trungda về Kayani không phải là một lý do chính đáng chứng minh bạn là Ti2008, giống như trang thảo luận của tôi, không biết có phải TTS mò vô hằng ngày hay không, bất cứ khi nào nhắc đến TTS, ngày mai coi như xuất hiện.
::Thứ năm, tôi đã thực hiện báo cáo đó thì cũng không ngại nhận trách nhiệm, nếu bạn là Ti2008, chính tôi sẽ đi sửa lại các sửa đổi bị lùi đó, còn là Kayani, mãi mãi không có chuyện này. Có một nguyên lý bất di bất dịch của Wikipedia là không chối tội rối được bằng cách bao biện. Như bạn đã nói, tốt nhất là nên đưa bằng chứng, bằng hành động ra đây, còn bao biện bằng viết án văn dài dòng ở đây, để chứng không phải rối à? Đơn nhiên là không. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:44, ngày 13 tháng 12 năm 2023 (UTC)
:[[Thành viên:P. ĐĂNG]] và Nguyentrongphu hoàn toàn có thể làm theo ý các bạn muốn. '''Sự thật mãi là sự thật: HoangLoverHistory96 là Ti2008'''. Chỉ vậy thôi. Và sự thật này bây giờ cũng chẳng đem lại lợi ích gì cho tôi, vì tôi cũng không còn tìm thấy '''một nhu cầu nào''' để thanh minh, hay nói theo cách nói của bạn, là '''"bao biện"''' nữa.
:Sau thời gian phi wiki hóa tài khoản Ti2008, tôi đã từng dùng IP sửa đổi. Nhưng vì các bạn đã chặn quá nhiều dãy IP, nên dù tôi đã xóa thư điện tử và đổi mật khẩu cho khó đăng nhập, nhưng cũng phải cố đăng nhập để bổ sung thông tin (có nguồn dẫn) vào những bài tôi muốn. Hồi tôi sử dụng tài khoản Ti2008, tôi đã tham gia Wikipedia qua khá nhiều giai đoạn; trong đó, giai đoạn tôi hay nhắn tin với Minh Huy (nếu tôi nhớ không nhầm) là khoảng trước năm 2011. Sau này, đặc biệt từ năm 2016 khi tôi bắt đầu mở rộng những bài vua Đại Việt (chính là các bài mà HoangLoverHistory96 bị lùi sửa mới đây), thì chúng tôi cũng ít có dịp nói chuyện với nhau. Chưa kể là thời gian đã trôi qua khá lâu, tôi cũng đã thay đổi rất nhiều (và hẳn Nguyentrongphu, Minh Huy cũng vậy) việc tin nhắn vừa qua của tôi gửi tới Minh Huy mang văn phong và đặc điểm có phần khác biệt cũng là rất bình thường và hợp lẽ.
:Chuyện 1 số con rối của Kayani mở tài khoản cùng lúc với HoangLoverHistory96, tôi không biết, vì đơn giản tôi không phải là Kayani mà thôi. Mối quan tâm của Kayani cũng rất khác tôi. Cậu ta vẫn luôn háo hức với những vấn đề chính trị nóng bỏng và nhạy cảm. Tôi, Ti2008, đã từng giây vào các tranh cãi liên quan khoảng trước năm 2014, sau này tôi đã quá ớn các chia rẽ chính trị của người VN nên chỉ tập trung tham gia sửa đổi các đề tài trận đánh, nhân vật lịch sử phương Tây (nhất là Phổ-Đức), và cả lịch sử trung đại VN, vì đó cũng là những đề tài mà tôi có nhiều sự yêu thích và một ít hiểu biết.
:Nhưng nói mãi thì việc cũng chẳng đi đến đâu. Ngay lúc này đây, tôi đã hoàn tất việc xóa hết mọi dính líu trước và nay giữa Wikipedia với tài khoản email của tôi rồi. Những thông báo Wikipedia gửi cho Ti2008, cho HoangLoverHistory96 qua email, mà ban nãy tôi vừa gọi là "bằng chứng", hiện giờ cũng chẳng còn dấu vết. '''Và cho đến tận cùng, thì bằng chứng rốt ráo nhất của việc HoangLoverHistory96 là Ti2008, chính là việc tôi đã tạo ra và phi wiki hóa Ti2008 như thế nào, thì bây giờ tôi cũng phi wiki hóa HoangLoverHistory96 như thế nấy'''. Tôi vừa mới xóa sạch thư điện tử và đặt random password bừa bãi cho HoangLoverHistory96 rồi. '''Các bạn có thể còn gặp lại Kayani thêm nhiều lần nữa, nhưng các bạn sẽ chẳng bao giờ được nhìn thấy Ti2008 nữa đâu, cả trên wiki lẫn ngoài đời. Đó là lời chân thành cuối cùng mà tôi dành cho các bạn. Các bạn có không tin thì cứ việc không tin. Thời gian sẽ tiết lộ tất cả sự thật'''. Và lời này của tôi cũng chẳng phải là "bao biện", vì tôi tuyệt không còn mục đích, ý đồ yêu cầu các bạn mở cấm cho HoangLoverHistory96 và phục hồi các sửa đổi chính đáng của tôi qua tài khoản này. Hãy cứ cấm vĩnh viễn HoangLoverHistory96, và nếu thích thì cấm luôn cả Ti2008 nữa. Dù sao Ti2008 này tài hèn đức kém, hồi mới chân ướt chân ráo (2008) từng bị bác Mekong Bluesman và nhiều cao thủ khác quở trách, cũng chẳng giúp ích được gì cho Wikipedia vốn đang may mắn có được sự quản lý, sự cống hiến kiệt xuất và ngời sáng của các bậc đại trí như Nguyentrongphu và Phong Đăng đâu!
:Dù sao, sau khi đã thực hiện quyết định của mình, tôi vẫn thấy nhẹ lòng. Nhẹ lòng vì trước kia Ti2008 đã phi wiki hóa mà không kịp nói lời tạ từ nào với các thành viên Wikipedia. Còn nay, nhờ có thông báo của Phong Đăng và Nguyentrongphu, mà tôi đã làm được điều mà lẽ ra mình phải làm từ 2-3 năm trước đây rồi. Mong 2 bạn luôn mạnh khỏe và an vui. Và xin nhắc lại: '''các bạn sẽ không bao giờ nhìn thấy Ti2008 nữa đâu!'''. Bây giờ tôi vĩnh viễn rời đi. Nếu hai bạn thấy những điều tôi viết wiktionary này làm phiền hay bạn, hãy cứ lùi thoải mái, xóa thoải mái nhé. Kể cả phần tôi đã nhắn Minh Huy nữa, hãy cứ đến, cứ lùi, và nói '''chính tôi''' đã cho phép các bạn làm điều đó!
Thân ái![[Đặc biệt:Contributions/2402:800:63E9:E313:7D48:62C9:3179:4953|2402:800:63E9:E313:7D48:62C9:3179:4953]] ([[Thảo luận Thành viên:2402:800:63E9:E313:7D48:62C9:3179:4953|thảo luận]]) 16:01, ngày 13 tháng 12 năm 2023 (UTC)
::Nếu vậy là Kayani. Câu hỏi của tôi bạn chưa trả lời. Bạn nói chứng minh? Giờ tại sao khi tôi nói như thế bạn đã bỏ ý định? Có bằng chứng là Ti2008 đưa lên có gì khó (tôi nghĩ là hình chụp), chừ khi bạn không có?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:37, ngày 13 tháng 12 năm 2023 (UTC)
::Tôi biết đến tv Ti2008 từ một bài viết lịch sử Thụy Điển về ông vua Karl mà tôi rất ngưỡng mộ, và vì tôi từng một thời có hứng thú đọc lịch sử châu Á, như cách tôi biết đến Trungda vậy (mặc dù chưa nói chuyện lần nào). Nếu bạn là tv Ti2008, bạn quá nhạy cảm, tôi bắt Kayani khắp ngỏ ngách dự án này cũng vì Wikipedia, bạn nghĩ sao thế hệ học sinh, trẻ em Việt Nam đọc được những dòng luyên thuyên chính trị mà Kay viết. Tôi thấy không thuyết phục với ý trên bạn đưa ra, tôi không thể nói dối bằng cách nói nó thuyết phục được vì bạn cũng biết Kayani giỏi diễn như thế nào. Không thể nói rằng một tv không phải rối bằng biện luận "tình thương" ở đây. Bạn hiểu ý tôi chứ? Tôi rất kính trọng các thế hệ thành viên đi trước, như DHN, và quý một Wikipedia năng động. Nếu bạn không phải Kayani thì nên tìm những cách trong khả năng có thể để chứng minh. Tôi thấy bạn có nói cách chứng minh là Ti2008 ở phía trên, tôi sẽ đợi, và bạn nên làm. Còn không, tôi nghĩ là Kayani. Ai cũng nói được, là Kayani rối thì chối không được, nhưng Ti2008 chắc chắn chứng minh được, bạn biết là nên mạnh tay với Kayani, Kayani hoạt động trụ đây 10 năm thì tôi nên hy vọng tốt đẹp gì đây. Tôi nói những dòng này là gửi đến Ti2008. Còn là Kayani, đáng tiết cho lần này bạn chuẩn bị tốt hơn rồi đấy. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:37, ngày 13 tháng 12 năm 2023 (UTC)
:::Cũng lạ là lúc đầu, bạn rất hứng thú để đưa ra bằng chứng cho tk Ti2008. Đến khi tôi phản hồi đầu tiên, bạn đã đổi hướng. "vì tôi tuyệt không còn mục đích, ý đồ yêu cầu các bạn mở cấm cho HoangLoverHistory96 và phục hồi các sửa đổi chính đáng của tôi qua tài khoản này." --> Lạ là sau khi tôi đưa ra các câu hỏi với bằng chứng trên. Kayani hiện tại không những còn háo hức các chủ đề chính trị đã và đang diễn ra, mà còn là các chủ đề nhân vật chính trị. Ti2008 từng được cộng đồng đưa ra tín nhiệm cho vị trí BQV, một tv như vậy, đáng tiết là dòng thảo luận trên tôi lại thấy được đầy rẫy cái tài thu phục lòng người của Kay. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:54, ngày 13 tháng 12 năm 2023 (UTC)
:::Đúng vậy, bạn nói sự thật là sự thật. Sự thật là tk này có quá nhiều hành động giống với Kayani, trùng hợp, thì tôi tin bạn là Ti2008 thế nào đây? Trùng hợp chỉ có một lần, nhiều lần thì không đúng lắm. Đến giờ tôi vẫn không hiểu, khi tôi báo lên, bạn cảm ơn tôi có nghĩa gì, nó khác với thái độ mà bạn tự nhận là Ti2008 ở đây (Kayani từng troll tôi bằng cách này). Bạn vừa kêu cấm luôn tk của Ti2008, trong khi IP của bạn chả chứng minh được có phải tv tự nguyện hay không, nên có thể trường hợp bất lợi lại thuộc về Ti2008 nếu đây không phải là Ti2008 (chỉ có rối mới dùng trò này, muốn gây bất lợi cho người khác). Thành viên Ti2008, tv thâm niên, đặc biệt là cộng sự với Trungda, tôi tin không phải là tv tự suy ra những điều không có thật để lập luận nói tôi như thế. Tóm lại, tôi hoan nghênh Ti2008 chứ không phải Kayani, và tôi hết lời. Kayani nghĩ gì quyết định cách cậu ta hành động, cách cậu ta hành động quyết định cộng đồng nghĩ gì về cậu ta. Không phụ thuộc vào tôi. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:08, ngày 13 tháng 12 năm 2023 (UTC)
::::Nên dừng thảo luận tại đây. Nếu người kia không đăng nhập vào tk Ti2008 để chứng minh thì cứ coi như là Kay đóng kịch diễn tuồng. Rất tiếc, đó là cách duy nhất để tôi tin khi những hành vi nói xạo đã xảy ra rất nhiều trong quá khứ. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 23:15, ngày 13 tháng 12 năm 2023 (UTC)
== Thư mời ==
Chào bạn! Mời bạn cho ý kiến tại [[Thảo_luận_Wiktionary:Bảo_quản_viên#Nguyên_Hưng_Trần|Biểu quyết chọn bảo quản viên]]. Thanks bạn! [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:18, ngày 30 tháng 12 năm 2023 (UTC)
== Trang đề cử ==
Tôi viết xong rồi đấy. Không biết tv có đồng ý không, tôi đang trực đợi. Nếu tv đồng ý, tôi tag tên bạn và các tv khác vô luôn. Vì gửi thư mời hơi mất thời gian thì phải. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 05:42, ngày 31 tháng 12 năm 2023 (UTC)
== Năng lực làm BQV trên dự án ==
Tôi nghĩ tôi đã đủ tháng (năng lực) để làm rồi, nhưng chưa được biết rằng các thành viên sẽ tín nhiệm tôi không, [[commons:User talk:Đại Việt quốc#Partner|vụ lùm xùm]] trên [[:w:vi:Đặc biệt:Đóng góp/DefenderTienMinh07|Wikipedia]] với tôi có lẽ mọi tv đều đã được biết. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 02:42, ngày 2 tháng 2 năm 2024 (UTC)
:Bạn off dài hạn thì ai tin tưởng mà giao công cụ cho bạn? Tôi vẫn sẽ chống như tôi đã nói. Điều kiện tôi đã đưa ra, xin không nhắc lại. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 03:32, ngày 4 tháng 9 năm 2024 (UTC)
: Do áp lực trong học tập năm cuối cấp 3 aka lớp 12 và bị hỏng máy nên inactive dài hạn cũng dễ hiểu, việc học > việc khác, ko học = ko thi đc đại học = ko có máy để contribute kk, nên mong bác hài lòng vì mình cháu còn inactive đến tháng tận 5 năm 2025 đấu vật để lấy bằng cấp 3 để giữa tháng 6 hay 7 năm đó còn ôn đại học, nếu đc ngon trường Bách Khoa thì lúc đó cháu sẽ ko phụ lòng mà ủng hộ hết sức bác nhiều việc kk, cháu sẽ ko dính líu gì tới bên Wikipedia tiếng Việt nữa. Giờ trên Wikipedia tiếng Việt lập lại acc làm lại từ đầu mà bị phát hiện = die thì coi như bỏ, làm lại nhiều lần lại hóa thành LTA như Trân thì chết dở vì sập uy tín. Nên quay đầu đóng góp cho bên wiki Anh là lựa chọn sáng suốt của cháu để có thêm chút kiến thức. Hơn nữa bác chả phải lo nữa, việc "chính mình giao quyền cho thành viên từng bị chính minh cấm trước đây" thì nghe có vẻ thật kì cục, là trường hợp lần đầu xuất hiện nên chắc bác có chút lo âu trong lòng, những ko việc gì bác phải lo xa đây cả vì vốn cháu đến đây để có kiến thức cũng như chia sẻ kiến thức thôi. Hơn nữa trong năm nay và năm sau nếu hễ ai tố bác lên Meta để tước ngai vàng bác cháu hứa sẽ mạnh tay mà ngăn lại, biểu quyết gì liên can đến bác trên đó cháu cũng cho sập, hơn nữa đằng nào biểu quyết cháu lập năm bị án cấm 2023 rồi gì cũng sẽ bị đóng, nếu bác muốn cháu đóng cháu đóng, việc đóng góp còn chưa xong do phải chờ kì thi đại học sắp đến để có máy mới thì lấy đâu sức ra mà thi gan, nếu cháu đắc cử BQV trên đây mà hễ có sai phạm = bị đồng mình (những BTV đóng góp tích cực trên đây) tố cáo, cháu xin chịu tội xử trảm. [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 07:56, ngày 8 tháng 9 năm 2024 (UTC)
::Bạn phấn đấu đạt điều kiện tôi đã đưa ra thì tôi sẽ ủng hộ. Nói dông nói dài mà không hành động thì cũng như không. Action speaks louder than words. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 03:43, ngày 9 tháng 9 năm 2024 (UTC)
== {{w|Âm phủ}} (bài viết trên Wikipedia) ==
Tôi thấy bài viết này không có nghĩa tiếng Anh và chỉ có nghĩa chữ Hán là chủ yếu mặc dù có đề cấp đến Yggdrasil và khá ít yếu tố Trung Hoa, cùng với mấy từ không nổi bật, ít dùng tại địa phương hiện nay như "Âm giới", "Minh giới", " "Minh phủ" (thay vì từ trong văn học "Minh ti") tôi nghĩ không biết có nên thay thế (hoặc xóa) mấy đống từ này và sửa lại bài viết hay không, mong bác cho ý kiến. [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 08:04, ngày 14 tháng 2 năm 2024 (UTC)
== Dân Hà Nam ==
Cho hỏi bác đã từng đến Hà Nam chưa? Cháu mới chuyển từ HCM sang tỉnh Hà Nam học tập từ hè tháng 6 tới giờ, có vẻ khá yên bình. Nhưng đầu hôm học vốn bản tính khinh thường + tinh tướng, cháu có khinh một số thằng đội tuyển Anh bằng cách show trình nói tiếng Anh như gió của mình cho đến khi bị bọn nó đáp lại bằng đống từ mới thì khá ngại, bị cả lớp cho là "quê", vậy thời của bác trước nay nhớ được nhiều hết những từ mới ko ạ, đã từng dính phải cái sai trong giao tiếp chưa ạ? Dân Hà Nam bọn nó siêu dữ, bị bọn này khinh e là ko ổn, còn [https://simple.wiktionary.org/wiki/User:DefenderTienMinh07/New_words_(basic_English) đây là tất cả đống từ mới cháu ôn thuộc lòng được]. [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:41, ngày 3 tháng 9 năm 2024 (UTC)
== Cuộc đàm thoại ==
Cháu có nghe về cuộc đàm thoại giữa 2 người nước ngoài, khi nghe thấy có câu "chỉ vỏn vẹn ba từ" nhưng rất lạ, vậy cho hỏi bác câu "desert the mills" và "enough warming up" người ta nói có ý nghĩa gì vậy ạ? Cháu hỏi bác vì chỉ hiểu được nghĩa đen của câu. [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 08:06, ngày 13 tháng 10 năm 2024 (UTC)
:[[Thành viên:DefenderTienMinh07]] Enough warming up có nghĩa là thời gian khởi động đã hết và đã tới lúc bước vô giai đoạn khốc liệt hơn. Ví dụ, trong 1 buổi tập gym, bạn có 5 phút để khởi động. Sau đó, bạn phải chạy 10 km.
:Desert the mills có nghĩa là bỏ rơi một ai (không giúp) khi họ gặp nạn. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 07:34, ngày 14 tháng 10 năm 2024 (UTC)
ezdb7030wwyuy0jn0r1egi16v4y6dfq
nhập đồng
0
421553
2573742
2026-10-27T03:29:51Z
TienMinh-mun6xnChing
57893
/* */
2573742
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|verb}}===
{{vi-verb}}
# {{lb|vi|ít dùng}} {{like-entry|lên đồng}}.
6mn4luhfcqiw8oqq8zswqx5svufusn2
khấu kiến
0
421554
2573743
2026-10-27T03:32:21Z
TienMinh-mun6xnChing
57893
/* */
2573743
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|verb}}===
{{vi-verb}}
# {{lb|vi|từ cũ}} [[bái kiến|Bái kiến]] hoặc [[yết kiến]] người có [[chức vụ]] cao trong [[triều đình]] như [[quan lại]], [[đại thần]] hoặc [[nhà vua]], [[hoàng hậu]].
qwphhn9n4pq0c94yje4qyudtdr4p317
hạ độc thủ
0
421555
2573744
2026-10-27T03:34:11Z
TienMinh-mun6xnChing
57893
/* */
2573744
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|verb}}===
{{vi-verb|head=[[hạ]] [[độc thủ]]}}
# {{like-entry|đầu độc}}, nhưng dùng [[thủ đoạn]] [[tinh vi]], [[hiểm ác]].
euoywsk42lwwfr0cze1zqchuvvezbue
dân phu
0
421556
2573745
2026-10-27T03:34:56Z
TienMinh-mun6xnChing
57893
/* */
2573745
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{like-entry|người dân}}.
i65m61rurl6ktvby338y5szz1zdjkf3
2573747
2573745
2026-10-27T03:36:06Z
TienMinh-mun6xnChing
57893
/* Tiếng Việt */
2573747
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{like-entry|bá tánh}}.
a7a76k5xy5k3vq2u9x4sf48d6zvzk8x
2573748
2573747
2026-10-27T03:36:35Z
TienMinh-mun6xnChing
57893
2573748
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|từ cũ}} {{like-entry|dân thường}}.
k2dm46wachdul9ta4tfwznwv7gc4x12
người dân
0
421557
2573746
2026-10-27T03:35:30Z
TienMinh-mun6xnChing
57893
Đổi hướng đến [[dân]]
2573746
wikitext
text/x-wiki
#đổi [[dân]]
24xrtvjx58do8c4h5qfyybid5pujtcq
thần trí
0
421558
2573749
2026-10-27T03:38:50Z
TienMinh-mun6xnChing
57893
Trang mới: “=={{langname|vi}}== ==={{section|pron}}=== {{vi-pron}} ==={{section|noun}}=== {{vi-noun}} # {{lb|vi|ít dùng}} [[tinh thần|Tinh thần]] và [[tâm trí]], nói chung. #: {{ux|vi|'''Thần trí''' sáng suốt.}} ==={{section|ref}}=== {{R:Tratu}}”
2573749
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|ít dùng}} [[tinh thần|Tinh thần]] và [[tâm trí]], nói chung. #: {{ux|vi|'''Thần trí''' sáng suốt.}}
==={{section|ref}}===
{{R:Tratu}}
khfufstx5p4rieee6f8fas1ls5dnace
2573750
2573749
2026-10-27T03:38:58Z
TienMinh-mun6xnChing
57893
2573750
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|ít dùng}} [[tinh thần|Tinh thần]] và [[tâm trí]], nói chung.
#: {{ux|vi|'''Thần trí''' sáng suốt.}}
==={{section|ref}}===
{{R:Tratu}}
31gkcnm7q6bdt8t18eg8gg476lq99dd
chân nhân
0
421559
2573751
2026-10-27T03:43:42Z
TienMinh-mun6xnChing
57893
/* */
2573751
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|đạo giáo}} Người đã [[đắc đạo]] sau khi [[tu hành]]
# {{lb|vi|văn chương}} Chỉ người có [[đức tính]] [[chơn chánh]], biết [[vị thế]] chính mình và sống có ích.
# {{lb|vi|phật giáo}} Đối lập với [[chân quả]].
74sixdng57cgqcajr5x2j1qwnt027j2
2573752
2573751
2026-10-27T03:44:45Z
TienMinh-mun6xnChing
57893
/* Danh từ */
2573752
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|đạo giáo}} Người đã [[đắc đạo]] sau khi [[tu hành]].
# {{lb|vi|phật giáo|văn chương}} Chỉ người có [[đức tính]] [[chơn chánh]], biết [[vị thế]] chính mình và sống có ích.
#: {{ant|vi|chân quả}}.
m09bsdd6vkl1bxbwoa8wh1s2c23bsqa
2573754
2573752
2026-10-27T03:46:59Z
TienMinh-mun6xnChing
57893
2573754
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|đạo giáo}} Người đã [[đắc đạo]] sau khi [[tu hành]].
# {{lb|vi|phật giáo|văn chương}} Chỉ người có [[đức tính]] [[chơn chánh]], biết [[vị thế]] chính mình và sống có ích.
50xfbud18rth7sdym514gj1ebkielh4
chơn chánh
0
421560
2573753
2026-10-27T03:45:18Z
TienMinh-mun6xnChing
57893
Trang mới: “=={{langname|vi}}== ==={{section|pron}}=== {{vi-pron}} ==={{section|adj}}=== {{vi-adj}} # {{lb|vi|phật giáo}} {{like-entry|chân chính}}.”
2573753
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|adj}}===
{{vi-adj}}
# {{lb|vi|phật giáo}} {{like-entry|chân chính}}.
0i94ecrq1041ja27a4k8nptnup5ypr5
căn quả
0
421561
2573755
2026-10-27T03:49:15Z
TienMinh-mun6xnChing
57893
/* */
2573755
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|phật giáo}} [[khái niệm|Khái niệm]] chỉ [[cơ duyên]] hoặc [[nhân quả]], [[số mệnh]] một người có [[nguồn gốc]] hay [[gắn liền]] với [[vị thần]], [[thần linh]].
a4dyblccqazipnfypd9kc8p7m9c40zt
2573757
2573755
2026-10-27T03:50:36Z
TienMinh-mun6xnChing
57893
2573757
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|phật giáo}} [[khái niệm|Khái niệm]] chỉ [[cơ duyên]] hoặc [[nhân quả]], [[số mệnh]] một người có [[nguồn gốc]] hay [[gắn liền]] với [[vị thần]], [[thần linh]].
#: {{syn|vi|căn đồng}}
a5sgsp02xzr05hfzxmrhpw82hnsd6pn
căn đồng
0
421562
2573756
2026-10-27T03:50:01Z
TienMinh-mun6xnChing
57893
/* */
2573756
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|phật giáo}} {{like-entry|căn quả}}.
iy3haushlub0145uyp470lt2ov4cc3s
tánh tình
0
421563
2573758
2026-10-27T03:51:33Z
TienMinh-mun6xnChing
57893
/* */
2573758
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|từ cũ}} {{like-entry|tính tình}}.
8ufiom1dwp1okd6qs8szl6jfp9hc06g
kiếp số
0
421564
2573759
2026-10-27T03:52:13Z
TienMinh-mun6xnChing
57893
/* */
2573759
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|phật giáo}} {{like-entry|số kiếp}}.
2is7pldsa68wlrmajsxxagtjy9htnkk
độc thủ
0
421565
2573761
2026-10-27T03:58:12Z
TienMinh-mun6xnChing
57893
Trang mới: “=={{langname|vi}}== ==={{section|pron}}=== {{vi-pron}} ==={{section|noun}}=== {{vi-noun}} # [[đầu độc|Đầu độc]] bằng [[thủ đoạn]], miếng đòn [[hiểm ác]] hại người. #: {{ux|vi|Ngón '''độc thủ'''.}} #: {{ux|vi|Hạ '''độc thủ'''.}} ==={{section|ref}}=== {{R:Tratu}}”
2573761
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# [[đầu độc|Đầu độc]] bằng [[thủ đoạn]], miếng đòn [[hiểm ác]] hại người.
#: {{ux|vi|Ngón '''độc thủ'''.}}
#: {{ux|vi|Hạ '''độc thủ'''.}}
==={{section|ref}}===
{{R:Tratu}}
fafjzm9r8wge95eo0n4djiehws5xn8f
nguỵ quân
0
421566
2573765
2026-10-27T04:09:11Z
TienMinh-mun6xnChing
57893
TienMinh-mun6xnChing đã đổi [[nguỵ quân]] thành [[ngụy quân]] qua đổi hướng
2573765
wikitext
text/x-wiki
#đổi [[ngụy quân]]
emzrm3u3dbjjcqs72z5dyo9f7ocfyvd
2573847
2573765
2026-10-27T10:28:32Z
TheHighFighter2
42988
/* */
2573847
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|n}}===
{{vi-noun}}
# {{vi-alt sp|ngụy quân}}
281oq90je0ahr2vzs05gdpysgseeg68
chư tiên
0
421567
2573770
2026-10-27T04:17:02Z
TienMinh-mun6xnChing
57893
/* */
2573770
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|phật giáo}} Những [[người]] theo Bà-la-môn [[tu hành]] một cách [[thanh tịnh]].
9mujj3i699t69fwrfmo8vqftmaj2puw
2573845
2573770
2026-10-27T10:10:28Z
TheHighFighter2
42988
/* Tiếng Việt */
2573845
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# {{lb|vi|Phật giáo}} Những người theo [[Bà-la-môn]] [[tu hành]] một cách [[thanh tịnh]].
j1xghsgq2umc3zkxq58oolcdoo34idq
tít thò lò
0
421568
2573772
2026-10-27T05:02:02Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:adv:# [[A]].
2573772
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|adv}}===
{{vi-adv}}
# {{lb|vi|khẩu ngữ}} {{like-entry|tít}} (nhưng nghĩa mạnh hơn)
#:{{ux|vi|quay '''tít thò lò'''}}
#:{{ux|vi|mê '''tít thò lò'''}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
mfdyy3q72s23wx3d8xqx3ots7fbc9pz
tòm tõm
0
421569
2573773
2026-10-27T05:03:31Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:adj:# [[Từ]] [[mô phỏng]] [[tiếng]] [[vật]] nhỏ và [[nặng]] [[rơi]] [[liên tiếp]] xuống [[nước]].
2573773
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|adj}}===
{{vi-adj}}
# [[Từ]] [[mô phỏng]] [[tiếng]] [[vật]] nhỏ và [[nặng]] [[rơi]] [[liên tiếp]] xuống [[nước]].
#:{{ux|vi|sung chín rụng '''tòm tõm''' xuống nước}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
g6w0i5dugivndkn6didl4iqthaa0gaa
tòn teng
0
421570
2573774
2026-10-27T05:05:10Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:noun:# [[aa|Aa]].
2573774
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|noun}}===
{{vi-noun}}
# {{lb|vi|ít dùng}} {{see-entry|toòng teng}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
50o3ur6zz1h32yc7q61gicq1isdrrb3
toòng teng
0
421571
2573775
2026-10-27T05:07:06Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:noun:# [[Hoa]] [[tai]] [[hình]] [[dài]], [[dễ]] [[đu đưa]] [[qua lại]].# [[Từ]] [[gợi tả]] [[trạng thái]] [[lủng lẳng]], dễ đu đưa qua lại.
2573775
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|noun}}===
{{vi-noun}}
# {{nhãn|vi|phương ngữ}} [[Hoa]] [[tai]] [[hình]] [[dài]], [[dễ]] [[đu đưa]] [[qua lại]].
#:{{ux|vi|tai đeo '''toòng teng'''}}
==={{ĐM|adj}}===
{{vi-adj}}
# [[Từ]] [[gợi tả]] [[trạng thái]] [[lủng lẳng]], dễ đu đưa qua lại.
#:{{ux|vi|cái túi treo '''toòng teng''' ở ghi đông }}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
1i6xzazi4abtrgw8iwqlboqxchnyctq
tòng teng
0
421572
2573778
2026-10-27T05:37:39Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:noun:# [[aaa|Aaa]].
2573778
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|noun}}===
{{vi-noun}}
# {{lb|vi|ít dùng}} {{see-entry|toòng teng}}
ma3249rzs4ostrsf4hs0bwknygpv35e
tòng tọc
0
421573
2573780
2026-10-27T05:39:06Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:adj:# ([[máy móc]], [[xe cộ]]) [[cũ]], hay [[hỏng]], [[chạy]] [[xộc xệch]].
2573780
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|adj}}===
{{vi-adj}}
# {{nhãn|vi|khẩu ngữ}} ([[máy móc]], [[xe cộ]]) [[cũ]], hay [[hỏng]], [[chạy]] [[xộc xệch]].
#:{{ux|vi|chiếc xe đạp '''tòng tọc'''}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
pn9x6xnlvxl0in2z9s3wggu2tq2ve7l
tòng ngũ
0
421574
2573782
2026-10-27T05:40:07Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:verb:# [[nhập ngũ|Nhập ngũ]].
2573782
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|verb}}===
{{vi-verb}}
# {{nhãn|vi|cũ}} [[nhập ngũ|Nhập ngũ]].
{{mẫu}}
1pnd6p2ufzw9e98kisb6yp3ah09adob
tóc tai
0
421575
2573785
2026-10-27T05:41:11Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:noun:# [[tóc|Tóc]] ([[nói]] [[khái quát]]; [[hàm ý]] [[chê]])
2573785
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|noun}}===
{{vi-noun}}
# [[tóc|Tóc]] ([[nói]] [[khái quát]]; [[hàm ý]] [[chê]])
#:{{ux|vi|'''tóc tai''' rũ rượi}}
k8cjgqnzf48lg73lfm4wonqe7r5z90q
2573786
2573785
2026-10-27T05:41:19Z
Kateru Zakuro
34522
2573786
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|noun}}===
{{vi-noun}}
# [[tóc|Tóc]] ([[nói]] [[khái quát]]; [[hàm ý]] [[chê]])
#:{{ux|vi|'''tóc tai''' rũ rượi}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
tfci4guwjkqnlu7it73mpbatmjdi1ve
2573788
2573786
2026-10-27T05:42:07Z
Kateru Zakuro
34522
2573788
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|etym}}===
Có khả năng từ {{com|vi|tóc|tai}}.
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|noun}}===
{{vi-noun}}
# [[tóc|Tóc]] ([[nói]] [[khái quát]]; [[hàm ý]] [[chê]])
#:{{ux|vi|'''tóc tai''' rũ rượi}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
bqii9b3hrqoqiru4ctajj8j6kqtshdl
2573789
2573788
2026-10-27T05:42:24Z
Kateru Zakuro
34522
2573789
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|etym}}===
{{com|vi|tóc|tai}}.
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|noun}}===
{{vi-noun}}
# [[tóc|Tóc]] ([[nói]] [[khái quát]]; [[hàm ý]] [[chê]])
#:{{ux|vi|'''tóc tai''' rũ rượi}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
q34wgbw6is4qnyb0cpk81xi8pa2bh49
tóm tém
0
421576
2573792
2026-10-27T05:43:39Z
Kateru Zakuro
34522
([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:verb:# [[Từ]] [[gợi tả]] [[dáng vẻ]] [[cử động]] [[đôi]] [[môi]] [[khẽ]] và [[liên tiếp]] như để [[thu]] lại, [[chúm]] lại.
2573792
wikitext
text/x-wiki
=={{langname|vi}}==
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|verb}}===
{{vi-verb}}
# [[Từ]] [[gợi tả]] [[dáng vẻ]] [[cử động]] [[đôi]] [[môi]] [[khẽ]] và [[liên tiếp]] như để [[thu]] lại, [[chúm]] lại.
#:{{ux|vi|bà lão '''tóm tém''' cười}}
#:{{ux|vi|'''tóm tém''' nhai trầu}}
=== {{ĐM|ref}} ===
* {{R:Tratu}}
d3inztga3oi4rmggq3uyukw5u30c84f
jǐng
0
421577
2573818
2026-10-27T06:58:41Z
Hiyuune
50834
Trang mới: “{{also|jing|Jing|jìng|jīng}} =={{langname|cmn}}== ==={{ĐM|alt}}=== * {{alt|cmn|jing||nonstandard}} * {{alt|cmn|jǐŋ||tốc ký rất hiếm gặp}} ==={{ĐM|rom}}=== {{cmn-pinyin}} # {{cmn-pinyin of|丼}} # {{cmn-pinyin of|井}} # {{cmn-pinyin of|儆}} # {{cmn-pinyin of|剄}} # {{cmn-pinyin of|宑}} # {{cmn-pinyin of|幐}} # {{cmn-pinyin of|憬}} # {{cmn-pinyin of|憼}} # {{cmn-pinyin of|景}} # {{cmn-pinyin of|暻}} # {{cmn-pinyin of|汬}} # {{cmn-pinyin of|澊}}…”
2573818
wikitext
text/x-wiki
{{also|jing|Jing|jìng|jīng}}
=={{langname|cmn}}==
==={{ĐM|alt}}===
* {{alt|cmn|jing||nonstandard}}
* {{alt|cmn|jǐŋ||tốc ký rất hiếm gặp}}
==={{ĐM|rom}}===
{{cmn-pinyin}}
# {{cmn-pinyin of|丼}}
# {{cmn-pinyin of|井}}
# {{cmn-pinyin of|儆}}
# {{cmn-pinyin of|剄}}
# {{cmn-pinyin of|宑}}
# {{cmn-pinyin of|幐}}
# {{cmn-pinyin of|憬}}
# {{cmn-pinyin of|憼}}
# {{cmn-pinyin of|景}}
# {{cmn-pinyin of|暻}}
# {{cmn-pinyin of|汬}}
# {{cmn-pinyin of|澊}}
# {{cmn-pinyin of|烃}}
# {{cmn-pinyin of|烴}}
# {{cmn-pinyin of|燛}}
# {{cmn-pinyin of|獵}}
# {{cmn-pinyin of|璟}}
# {{cmn-pinyin of|璥}}
# {{cmn-pinyin of|睛}}
# {{cmn-pinyin of|穽}}
# {{cmn-pinyin of|肼}}
# {{cmn-pinyin of|蟼}}
# {{cmn-pinyin of|警}}
# {{cmn-pinyin of|阱}}
# {{cmn-pinyin of|頸|頚}}
# {{cmn-pinyin of|汫}}
gz4ca9pn36uqr7qqtsd1y22r85c7u5a
Bản mẫu:R:pl:USJP
10
421578
2573827
2026-10-27T08:09:06Z
Hiyuune
50834
Trang mới: “{{#invoke:quote|call_template |template=cite-book |pl |editor={{w|Stanisław Dubisz|Dubisz, Stanisław|lang=pl}} |title=Uniwersalny słownik języka polskiego |url=https://usjp.pwn.pl/ |location=Warsaw |publisher={{w|Polish Scientific Publishers PWN|Wydawnictwo Naukowe PWN}} |year=2003 |volume={{{3|1{{ndash}}4}}} |pageparam=2 |isbn=978-83-01-13868-4 |oclc=55223811 |entry={{lang|pl|{{#if:{{{1|}}}|{{{1|}}}|{{pagename}}}}}} |allowparams=1,3 }}<noinclude>{{documentation}}</no…”
2573827
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|pl
|editor={{w|Stanisław Dubisz|Dubisz, Stanisław|lang=pl}}
|title=Uniwersalny słownik języka polskiego
|url=https://usjp.pwn.pl/
|location=Warsaw
|publisher={{w|Polish Scientific Publishers PWN|Wydawnictwo Naukowe PWN}}
|year=2003
|volume={{{3|1{{ndash}}4}}}
|pageparam=2
|isbn=978-83-01-13868-4
|oclc=55223811
|entry={{lang|pl|{{#if:{{{1|}}}|{{{1|}}}|{{pagename}}}}}}
|allowparams=1,3
}}<noinclude>{{documentation}}</noinclude>
l2v3xspryv3fto463xdf2wnjxhoft72
Bản mẫu:R:pl:PSWP
10
421579
2573828
2026-10-27T08:09:47Z
Hiyuune
50834
Trang mới: “{{#invoke:quote|call_template |template=cite-book |title={{w|Praktyczny słownik współczesnej polszczyzny|lang=pl}} |editor={{w|Halina Zgółkowa|lang=pl}} |publisher=Wydawnictwo Kurpisz |location=Poznań |year=1994–2005 |isbn=83-900203-3-5 |volume={{{3|1–50}}} |pageparam=2 |entry={{lang|pl|{{#if:{{{1|}}}|{{{1|}}}|{{pagename}}}}}} |allowparams=3,1 }}<noinclude>{{documentation}}</noinclude>”
2573828
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|title={{w|Praktyczny słownik współczesnej polszczyzny|lang=pl}}
|editor={{w|Halina Zgółkowa|lang=pl}}
|publisher=Wydawnictwo Kurpisz
|location=Poznań
|year=1994–2005
|isbn=83-900203-3-5
|volume={{{3|1–50}}}
|pageparam=2
|entry={{lang|pl|{{#if:{{{1|}}}|{{{1|}}}|{{pagename}}}}}}
|allowparams=3,1
}}<noinclude>{{documentation}}</noinclude>
toczzn09y6jvwaxfwrogz11g7puf2gl
Bản mẫu:R:pl:PSWP/doc
10
421580
2573829
2026-10-27T08:11:08Z
Hiyuune
50834
Trang mới: “{{documentation subpage}} ==Tham số== * {{para|1}} Tên mục từ. * {{para|2}} Số trang. * {{para|3}} Số tập. <includeonly> {{refcat|pl}} </includeonly> [[en:Template:R:pl:PSWP/documentation]]”
2573829
wikitext
text/x-wiki
{{documentation subpage}}
==Tham số==
* {{para|1}} Tên mục từ.
* {{para|2}} Số trang.
* {{para|3}} Số tập.
<includeonly>
{{refcat|pl}}
</includeonly>
[[en:Template:R:pl:PSWP/documentation]]
j1579r1s6s8yi6sl9gyrsr8byoo7ojv
Bản mẫu:en dash
10
421581
2573830
2026-10-27T08:11:57Z
Hiyuune
50834
Trang mới: “–<noinclude>{{documentation}}</noinclude>”
2573830
wikitext
text/x-wiki
–<noinclude>{{documentation}}</noinclude>
kzahyin6fu0s5ggc7vlb0ai9tdvcwaq
Bản mẫu:ndash
10
421582
2573831
2026-10-27T08:12:52Z
Hiyuune
50834
Đổi hướng đến [[Bản mẫu:en dash]]
2573831
wikitext
text/x-wiki
#redirect [[Bản mẫu:en dash]]
f9vv27gs48l24gml2tx1oxo921dx3v2
Bản mẫu:R:pl:USJP/doc
10
421583
2573832
2026-10-27T08:14:50Z
Hiyuune
50834
Trang mới: “{{documentation subpage}} ==Tham số== * {{para|1}} Tên mục từ (ví dụ: oberżysta). * {{para|2}} Số trang (ví dụ: 1, 10, 100). * {{para|3}} Số tập (1 với A{{ndash}}J, 2 với K{{ndash}}Ó, 3 với P{{ndash}}Ś, 4 với T{{ndash}}Ż). ==Ví dụ== * {{temp|R:pl:USJP|oberżysta|1050|2}} : {{R:pl:USJP|oberżysta|1050|2}} <includeonly> {{refcat|pl}} </includeonly> [[en:Template:R:pl:USJP/documentation]]”
2573832
wikitext
text/x-wiki
{{documentation subpage}}
==Tham số==
* {{para|1}} Tên mục từ (ví dụ: oberżysta).
* {{para|2}} Số trang (ví dụ: 1, 10, 100).
* {{para|3}} Số tập (1 với A{{ndash}}J, 2 với K{{ndash}}Ó, 3 với P{{ndash}}Ś, 4 với T{{ndash}}Ż).
==Ví dụ==
* {{temp|R:pl:USJP|oberżysta|1050|2}}
: {{R:pl:USJP|oberżysta|1050|2}}
<includeonly>
{{refcat|pl}}
</includeonly>
[[en:Template:R:pl:USJP/documentation]]
ai867d9705ejdlphsmeuu6332zg15uo
Bản mẫu:xcl-conj
10
421584
2573833
2026-10-27T08:23:14Z
Hiyuune
50834
Trang mới: “{{inflection-table-top|title={{{title|}}}|palette=red|tall=yes|category=chia động từ}} ! colspan="2" | nguyên mẫu | colspan="2" | {{l-self|xcl|{{{inf}}}}} ! colspan="1" | phân từ | colspan="3" | {{l-self|xcl|{{{part}}}}} |- ! colspan="2" | nguyên nhân | colspan="2" | {{#ifeq:{{{caus}}}|—|—|{{l-self|xcl|{{{caus}}}}}}} ! colspan="1" | thân từ ở<br/>thì quá khứ bất định | colspan="3" | {{l-self|xcl||{{{aorstem}}}-}} |- | colspan="999" class="se…”
2573833
wikitext
text/x-wiki
{{inflection-table-top|title={{{title|}}}|palette=red|tall=yes|category=chia động từ}}
! colspan="2" | nguyên mẫu
| colspan="2" | {{l-self|xcl|{{{inf}}}}}
! colspan="1" | phân từ
| colspan="3" | {{l-self|xcl|{{{part}}}}}
|-
! colspan="2" | nguyên nhân
| colspan="2" | {{#ifeq:{{{caus}}}|—|—|{{l-self|xcl|{{{caus}}}}}}}
! colspan="1" | thân từ ở<br/>thì quá khứ bất định
| colspan="3" | {{l-self|xcl||{{{aorstem}}}-}}
|-
| colspan="999" class="separator" |
|-
! colspan="2" rowspan="2" class="outer" |
! colspan="3" class="outer" | số ít
! colspan="3" class="outer" | số nhiều
|-
! ngôi thứ nhất
! ngôi thứ hai
! ngôi thứ ba
! ngôi thứ nhất
! ngôi thứ hai
! ngôi thứ ba
|-
! rowspan="4" | trần thuật
|-
! class="secondary" | hiện tại
| {{l-self|xcl|{{{indpr1}}}}}
| {{l-self|xcl|{{{indpr2}}}}}
| {{l-self|xcl|{{{indpr3}}}}}
| {{l-self|xcl|{{{indpr4}}}}}
| {{l-self|xcl|{{{indpr5}}}}}
| {{l-self|xcl|{{{indpr6}}}}}
|-
! class="secondary" | chưa hoàn thành
| {{l-self|xcl|{{{indimp1}}}}}
| {{l-self|xcl|{{{indimp2}}}}}
| {{l-self|xcl|{{{indimp3}}}}}
| {{l-self|xcl|{{{indimp4}}}}}
| {{l-self|xcl|{{{indimp5}}}}}
| {{l-self|xcl|{{{indimp6}}}}}
|-
! class="secondary" | thì quá khứ bất định
| {{l-self|xcl|{{{indaor1}}}}}
| {{l-self|xcl|{{{indaor2}}}}}
| {{l-self|xcl|{{{indaor3}}}}}
| {{l-self|xcl|{{{indaor4}}}}}
| {{l-self|xcl|{{{indaor5}}}}}
| {{l-self|xcl|{{{indaor6}}}}}
|-
! rowspan="3" | giả định
|-
! class="secondary" | hiện tại
| {{l-self|xcl|{{{subjpr1}}}}}
| {{l-self|xcl|{{{subjpr2}}}}}
| {{l-self|xcl|{{{subjpr3}}}}}
| {{l-self|xcl|{{{subjpr4}}}}}
| {{l-self|xcl|{{{subjpr5}}}}}
| {{l-self|xcl|{{{subjpr6}}}}}
|-
! rowspan="1" class="secondary" | thì quá khứ bất định
| {{l-self|xcl|{{{subjaor1}}}}}
| {{l-self|xcl|{{{subjaor2}}}}}
| {{l-self|xcl|{{{subjaor3}}}}}
| {{l-self|xcl|{{{subjaor4}}}}}
| {{l-self|xcl|{{{subjaor5}}}}}
| {{l-self|xcl|{{{subjaor6}}}}}
|-
! rowspan="4" | mệnh lệnh
|-
! class="secondary" | mệnh lệnh
| —
| {{l-self|xcl|{{{imp1}}}}}
| —
| —
| {{#ifeq:{{{imp2}}}|—|—|{{l-self|xcl|{{{imp2}}}}}}}
| —
|-
! class="secondary" | [[cohortative|thể thúc giục]]
| —
| {{l-self|xcl|{{{cohort1}}}}}
| —
| —
| {{l-self|xcl|{{{cohort2}}}}}
| —
|-
! class="secondary" | [[prohibitive|thể cấm đoán]]
| —
| {{l-self|xcl|{{{prohib1}}}}}
| —
| —
| {{l-self|xcl|{{{prohib2}}}}}
| —
{{inflection-table-bottom|notes={{#if:{{{note|}}}|{{{note}}}}}}}<noinclude>{{documentation}}</noinclude>
i6dclb5ilbo8io7zu63qip63xmvm6fd
Bản mẫu:xcl-conj-ամ
10
421585
2573834
2026-10-27T08:24:30Z
Hiyuune
50834
Trang mới: “{{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{#if:{{{act|}}}|| {{xcl-conj |title=chủ động |inf={{{2}}}ալ |part={{{4|{{{2}}}աց}}}եալ |caus={{#if:{{{caus|}}}|{{{4|{{{2}}}աց}}}ուցանեմ|—}} |aorstem={{{4|{{{2}}}աց}}} |indpr1={{{2}}}ամ |indpr2={{{2}}}աս |indpr3={{{2}}}այ |indpr4={{{2}}}ամք |indpr5={{{2}}}այք |indpr6={{{2}}}ան |indimp1={{{indimp1|{{{2}}}այի}}} |indimp2={{{indimp2|{{{2}}}այիր}}} |indimp3={{{2}…”
2573834
wikitext
text/x-wiki
{{#invoke:checkparams|warn}}<!-- Validate template parameters
-->{{#if:{{{act|}}}||
{{xcl-conj
|title=chủ động
|inf={{{2}}}ալ
|part={{{4|{{{2}}}աց}}}եալ
|caus={{#if:{{{caus|}}}|{{{4|{{{2}}}աց}}}ուցանեմ|—}}
|aorstem={{{4|{{{2}}}աց}}}
|indpr1={{{2}}}ամ
|indpr2={{{2}}}աս
|indpr3={{{2}}}այ
|indpr4={{{2}}}ամք
|indpr5={{{2}}}այք
|indpr6={{{2}}}ան
|indimp1={{{indimp1|{{{2}}}այի}}}
|indimp2={{{indimp2|{{{2}}}այիր}}}
|indimp3={{{2}}}այր
|indimp4={{{indimp4|{{{2}}}այաք}}}
|indimp5={{{indimp5|{{{2}}}այիք}}}
|indimp6={{{indimp6|{{{2}}}ային}}}
|indaor1={{{4|{{{2}}}աց}}}ի
|indaor2={{{4|{{{2}}}աց}}}եր
|indaor3={{{indaor3|{{{4|{{{2}}}աց}}}}}}
|indaor4={{{4|{{{2}}}աց}}}աք
|indaor5=[[{{{4|{{{2}}}աց}}}էք]], [[{{{4|{{{2}}}աց}}}իք]]
|indaor6={{{4|{{{2}}}աց}}}ին
|subjaor1={{{4|{{{2}}}աց}}}ից
|subjaor2={{{6|{{{4|{{{2}}}աս}}}}}}ցես
|subjaor3={{{6|{{{4|{{{2}}}աս}}}}}}ցէ
|subjaor4={{{6|{{{4|{{{2}}}աս}}}}}}ցուք
|subjaor5={{{6|{{{4|{{{2}}}աս}}}}}}ջիք
|subjaor6={{{6|{{{4|{{{2}}}աս}}}}}}ցեն
|subjpr1={{{subjpr1|{{{2}}}այցեմ}}}
|subjpr2={{{subjpr2|{{{2}}}այցես}}}
|subjpr3={{{subjpr3|{{{2}}}այցէ}}}
|subjpr4={{{subjpr4|{{{2}}}այցեմք}}}
|subjpr5={{{subjpr5|{{{2}}}այցէք}}}
|subjpr6={{{subjpr6|{{{2}}}այցեն}}}
|imp1={{{imp1|{{{4|{{{2}}}ա՛}}}}}}
|imp2={{{imp2|{{{4|{{{2}}}աց}}}է՛ք}}}
|cohort1={{{6|{{{4|{{{2}}}աս}}}}}}ջի՛ր
|cohort2={{{6|{{{4|{{{2}}}աս}}}}}}ջի՛ք
|prohib1=[[մի՛]] [[{{{2}}}ար]]
|prohib2=[[մի՛]] [[{{{2}}}այք]]
|note={{{note|}}}
}}}}{{#if:{{{mp|}}}|<div style="width:100%; height:9px;"></div>{{xcl-conj
|title=thái bị động trung gian
|inf={{{2}}}ալ
|part={{{4|{{{2}}}աց}}}եալ
|caus={{#if:{{{caus|}}}|{{{4|{{{2}}}աց}}}ուցանեմ|—}}
|aorstem={{{4|{{{2}}}աց}}}
|indpr1={{{2}}}ամ
|indpr2={{{2}}}աս
|indpr3={{{2}}}այ
|indpr4={{{2}}}ամք
|indpr5={{{2}}}այք
|indpr6={{{2}}}ան
|indimp1={{{indimp1|{{{2}}}այի}}}
|indimp2={{{indimp2|{{{2}}}այիր}}}
|indimp3={{{2}}}այր
|indimp4={{{indimp4|{{{2}}}այաք}}}
|indimp5={{{indimp5|{{{2}}}այիք}}}
|indimp6={{{indimp6|{{{2}}}ային}}}
|indaor1={{{4|{{{2}}}աց}}}այ
|indaor2={{{4|{{{2}}}աց}}}ար
|indaor3={{{4|{{{2}}}աց}}}աւ
|indaor4={{{4|{{{2}}}աց}}}աք
|indaor5={{{4|{{{2}}}աց}}}այք
|indaor6={{{4|{{{2}}}աց}}}ան
|subjaor1={{{4|{{{2}}}աց}}}այց
|subjaor2={{{6|{{{4|{{{2}}}աս}}}}}}ցիս
|subjaor3={{{6|{{{4|{{{2}}}աս}}}}}}ցի
|subjaor4={{{6|{{{4|{{{2}}}աս}}}}}}ցուք
|subjaor5={{{6|{{{4|{{{2}}}աս}}}}}}ջիք
|subjaor6={{{6|{{{4|{{{2}}}աս}}}}}}ցին
|subjpr1={{{subjpr1MP|{{{2}}}այցիմ}}}
|subjpr2={{{subjpr2MP|{{{2}}}այցիս}}}
|subjpr3={{{subjpr3MP|{{{2}}}այցի}}}
|subjpr4={{{subjpr4MP|{{{2}}}այցիմք}}}
|subjpr5={{{subjpr5MP|{{{2}}}այցիք}}}
|subjpr6={{{subjpr6MP|{{{2}}}այցին}}}
|imp1={{{imp1MP|{{{4|{{{2}}}աց}}}ի՛ր}}}
|imp2={{{4|{{{2}}}աց}}}արո՛ւք
|cohort1={{{6|{{{4|{{{2}}}աս}}}}}}ջի՛ր
|cohort2={{{6|{{{4|{{{2}}}աս}}}}}}ջի՛ք
|prohib1=[[մի՛]] [[{{{2}}}ար]]
|prohib2=[[մի՛]] [[{{{2}}}այք]]
|note={{{note|}}}
}}}}<noinclude>{{tcat|conj:ամ}}</noinclude>
0dsu1inx4iopvn0hmf9xnm4gogt9965
Bản mẫu:xcl-verb
10
421586
2573835
2026-10-27T08:29:44Z
Hiyuune
50834
Trang mới: “{{#invoke:checkparams|error}}<!-- Validate template parameters -->{{head|xcl|Động từ|head={{{head|}}}|tr={{{tr|}}}<!-- -->|{{#if:{{{2|}}}|trần thuật thì quá khứ bất định}}|{{{2|}}}|{{#if:{{{aor2|}}}|hoặc}}|{{{aor2|}}}<!-- -->}}<noinclude>{{documentation}}</noinclude>”
2573835
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{head|xcl|Động từ|head={{{head|}}}|tr={{{tr|}}}<!--
-->|{{#if:{{{2|}}}|trần thuật thì quá khứ bất định}}|{{{2|}}}|{{#if:{{{aor2|}}}|hoặc}}|{{{aor2|}}}<!--
-->}}<noinclude>{{documentation}}</noinclude>
78rvy0r1i0qougxi8jld0ezago905jz
մանկանամ
0
421587
2573836
2026-10-27T08:29:51Z
Hiyuune
50834
Trang mới: “=={{langname|xcl}}== ==={{section|etym}}=== {{ety|xcl|:af|մանուկ<t:trẻ>|-ան-}} {{suffix|xcl|մանուկ|ան-|t1=trẻ}} ==={{section|v}}=== {{xcl-verb}} # [[trẻ|Trẻ]] [[ra]]. ===={{section|conjug}}==== {{xcl-conj-ամ||մանկան||մանկաց|mp=on|act=off|caus=on}} ===={{section|desc}}==== * {{desc|axm|մանգանալ}} * {{desc|hy|մանկանալ}} ==={{section|ref}}=== {{reflist}} ==={{section|further}}=== * {{R:xcl:NHB}} * {{R:xcl:Bedr}}”
2573836
wikitext
text/x-wiki
=={{langname|xcl}}==
==={{section|etym}}===
{{ety|xcl|:af|մանուկ<t:trẻ>|-ան-}}
{{suffix|xcl|մանուկ|ան-|t1=trẻ}}
==={{section|v}}===
{{xcl-verb}}
# [[trẻ|Trẻ]] [[ra]].
===={{section|conjug}}====
{{xcl-conj-ամ||մանկան||մանկաց|mp=on|act=off|caus=on}}
===={{section|desc}}====
* {{desc|axm|մանգանալ}}
* {{desc|hy|մանկանալ}}
==={{section|ref}}===
{{reflist}}
==={{section|further}}===
* {{R:xcl:NHB}}
* {{R:xcl:Bedr}}
r8um1lr0lbyopvq5vbmktg0f2ckcc80
2573837
2573836
2026-10-27T08:30:46Z
Hiyuune
50834
/* Tham khảo */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2573837
wikitext
text/x-wiki
=={{langname|xcl}}==
==={{section|etym}}===
{{ety|xcl|:af|մանուկ<t:trẻ>|-ան-}}
{{suffix|xcl|մանուկ|ան-|t1=trẻ}}
==={{section|v}}===
{{xcl-verb}}
# [[trẻ|Trẻ]] [[ra]].
===={{section|conjug}}====
{{xcl-conj-ամ||մանկան||մանկաց|mp=on|act=off|caus=on}}
===={{section|desc}}====
* {{desc|axm|մանգանալ}}
* {{desc|hy|մանկանալ}}
==={{section|further}}===
* {{R:xcl:NHB}}
* {{R:xcl:Bedr}}
cep67hxyxo161oh6n4zkz5jjfnrpcg9
Thể loại:Động từ tiếng Armenia cổ
14
421588
2573838
2026-10-27T08:31:05Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2573838
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Bản mẫu:R:pl:PWN Encyclopedia
10
421589
2573842
2026-10-27T09:08:34Z
Hiyuune
50834
Trang mới: “{{#invoke:checkparams|error}}<!-- Validate template parameters -->[https://encyklopedia.pwn.pl/szukaj/{{urlencode:{{{1|{{pagename}}}}}|PATH}}.html {{{1|{{pagename}}}}}] trong PWN's encyclopedia<noinclude>{{documentation}}</noinclude>”
2573842
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->[https://encyklopedia.pwn.pl/szukaj/{{urlencode:{{{1|{{pagename}}}}}|PATH}}.html {{{1|{{pagename}}}}}] trong PWN's encyclopedia<noinclude>{{documentation}}</noinclude>
rx4tnyqsieoxundv44yx92nvtjqbelt
jumalõlintu
0
421590
2573844
2026-10-27T09:33:30Z
Hiyuune
50834
+ vot
2573844
wikitext
text/x-wiki
=={{langname|vot}}==
{{normalized|vot|jumalalintu}}
==={{section|etym}}===
{{affix|vot|jumalõ|lintu}}
==={{section|pron}}===
{{vot-p|jumala-lintu}}
==={{section|n}}===
{{head|vot|Danh từ}}
# Con [[bọ rùa]].
===={{section|infl}}====
{{vot-decl/võrkko|nt|nn|prefix=jumalõ}}
==={{section|ref}}===
* {{R:vot:VKS|jumalalintu}}
2xsn5slyo26ox8485oew9xe6b7ismwj