Wiktionary
zhwiktionary
https://zh.wiktionary.org/wiki/Wiktionary:%E9%A6%96%E9%A1%B5
MediaWiki 1.47.0-wmf.2
case-sensitive
Media
Special
Talk
User
User talk
Wiktionary
Wiktionary talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Appendix
Appendix talk
Transwiki
Transwiki talk
Rhymes
Rhymes talk
Thesaurus
Thesaurus talk
Citations
Citations talk
Reconstruction
Reconstruction talk
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Wiktionary:漢字專題
4
814
9758106
9757746
2026-05-12T18:08:23Z
P1ayer
5118
/* 模板 */
9758106
wikitext
text/x-wiki
<p style="font-size:smaller;color:#555;text-align:right">* ([[Template:Wp sup|wp]])為維基百科的解說鏈接</p>
[[file:Hanzi (traditional).svg|thumb]]
{{large|歡}}迎來到「'''維基詞典漢字專題'''」,本維基專題的設立,是為了更好地組織和發表有關[[漢字]]的詞條的信息。我們希望這個專題能幫助對此主題感興趣的維基詞典人共同協作提高漢字相關詞條的質量,以使維基詞典成為對人們最有幫助的漢字信息資源。如果您愿意協助這個計劃,請在[[Wiktionary:漢字專題#參與者|參與者栏目]]簽名,我們有很多詞條正期待著您的參與!
我们当中有几位提出了一些关于我们可如何组织有关汉字的词条。这些只是建议,一些帮助您写作的指引,所以您是没有义务去遵循它们的。但如果您不知道该写甚么或是该如果开始,以下的指引或可帮助您。说到底,我们都只是想您去写多一点词条吧!
==關於漢字==
[[File:永.png|thumb|[[永]]字八法]]
<p style="text-align:center;font-size:95%">[ '''[[w:漢字|漢字]]''' ( [[w:日文漢字|日文漢字]] · [[w:韓文漢字|韓文漢字]] · [[w:越文漢字|越文漢字]] ) · [[w:漢源詞|漢源詞]] · [[w:假名|假名]] · [[w:諺文|諺文]] · [[w:喃字|喃字]] · [[w:方言字|方言字]] · '''[[w:漢字文化圈|漢字文化圈]]''' ]</p>
{{large|漢}}字,由華夏族(即漢族)人發明並改進,是[[中国]]乃至漢字文化圈廣泛使用的一種文字,屬於表意文字書寫系統的詞素音節文字,目前确切歷史可追溯至約公元前1300年[[商]]朝的甲骨文,到[[秦]]朝的小篆,發展至漢朝被取名為「漢字」,至[[唐]]代楷化為今日所用的手寫字體(楷書)。汉字是迄今为止连续使用时间最长的主要文字,也是上古时期各大文字体系中唯一传承至今的,相较而言,古埃及、古巴比伦文字都早已消亡。
[[漢]]字是承載文化的重要工具,目前留有大量用漢字書寫的典籍。不同的方言、甚至語言都使用漢字作為共同書寫體系。由於漢字和發聲的聯繫不是非常密切,比較容易被其他民族所借用,如[[日本]]、[[朝鮮]]半島和[[越南]]都曾經有過不會說漢語,單純用漢字書寫的歷史階段,漢字在歷史上對文明的傳播分享有著重要作用。
==關於本專題==
{{large|这}}个維基專題主要是希望在大家的幫助下建立更多的关于[[汉字]]、漢源詞{{Wp sup|漢源詞}}的词条,另外,注音字母{{Wp sup|注音字母}}、假名、諺文、喃字、日本国字{{Wp sup|日本国字}}、韓國國字{{Wp sup|韓國國字}}、方言字、則天文字{{Wp sup|則天文字}}、方块壮字{{Wp sup|方块壮字}}、女書{{Wp sup|女書}}、契丹文字{{Wp sup|契丹文字}}、女真文字{{Wp sup|女真文字}}、西夏文字{{Wp sup|西夏文字}}等漢字相關文字,也極力歡迎大家的編輯。
我們希望這個專題能幫助對此主題感興趣的維基詞典人'''共同協作'''提高漢字相關詞條的質量,以使維基詞典成為對人們最有幫助的漢字信息資源。同時,編輯時也請大家注意'''統一'''風格和格式,這樣會使我們的詞條更具易讀性和觀賞性。
== 專題標志 ==
{{large|您}}可以在漢字相關詞條的討論頁面加入「 '''{{tl|漢字專題}}'''」或者「'''{{tl|WPH}}'''」。它的顯示效果將會是:
{{WPH}}
==專題的邀請函==
{{large|如}}果您認識一位對本專題內容感興趣的朋友,如果可以的話,也請邀請他參與到我們的計劃中來。邀請函的使用方法為,直接復制以下代碼,并轉貼至對方的用戶討論頁即可。代碼如下:
<pre>
==欢迎加入維基詞典漢字專題==
{{subst:Wiktionary:漢字專題/invite|~~~|~~~~~}}
</pre>
其具體效果请参考:'''[[Wiktionary:漢字專題/invite]]'''。
==參與者==
{{large|我}}們隨時歡迎你的參與,只要是對漢字相關詞條有興趣的話,我們歡迎世界各地的朋友加入,你只需要只下方簽名,並留下哪方面的詞條有興趣的話,你就是我們的一份子。
也歡迎大家在個人用戶頁中加上「'''{{tl|User WT漢字}}'''」的用戶框。[[w:|中文維基百科]]用戶也可以在百科用戶頁加上「'''[[w:Template:User WT漢字|<nowiki>{{User WT漢字}}</nowiki>]]'''」用戶框。
{{User WT漢字}}
</br>
</br>
</br>
===簽名處===
# [[User:Shizhao|Shizhao]]
# 豐富的漢字形音義資源是我的願望 --[[User:Wihwang|大維]] 2009年2月19日 (四) 12:45 (UTC)
# 對日韓越的漢字音韻比較感興趣。--{{lang|zh-hant|<small>[[User:Betoseha|<span style="border: 1px solid #000000; border-right: none; background: #996B1F; padding: 0px 2px; color: white">'''서공・Tây Cống・セイコゥ'''</span>]][[User talk:Betoseha|<span style="border: 1px solid #000000; background: white; padding: 0px 2px; color: black"><font face="MS PGothic">相談</font></span>]]</small>}} 2009年2月19日 (四) 14:53 (UTC)
# 酷愛語言文學、聲韻訓詁,尤其是古典古籍。 ─{{User:Samwingkit/sign}} 2009年2月22日 (日) 16:50 (UTC)
# [[User:Abc root|Abc root]] 2009年3月4日 (三) 00:52 (UTC)
#--[[User:Rspd|Rspd]] 2009年3月23日 (一) 14:48 (UTC)
# 希望客家方言用字规范。—明山樵夫([[User:叶宏]]) 2009年4月26日 (日) 13:33 (UTC)
#遵命!--[[User:0330benson|'''ゼータ・Z・ガンダム''']] ([[User talk:0330benson|'''ゼータ的空間''']]/[[鋼彈|'''ガンダム''']]/[[機動戰士Z鋼彈|'''ゼータ''']]) 2009年6月10日 (三) 10:03 (UTC)
#[[User:Jeing|Jeing]]([[User talk:Jeing|讨论]]) 2013年8月26日 (一) 03:27 (UTC)
#[[User:Richard923888|Richard923888]]([[User talk:Richard923888|讨论]]) 2016年2月12日 (五) 16:14 (UTC)
#- <span style="text-shadow:0 1px 5px #808080">[[Special:用户贡献/Davidzdh|<font color="#2E8B57">'''I '''</font>]][[User talk:Davidzdh|<font color="#008B8B">'''am '''</font>]][[User:Davidzdh|<font color="#4169E1">'''Davidzdh'''</font>]]'''.'''</span> 2017年5月2日 (二) 14:22 (UTC)
#{{赞成}}。整理汉字、编排字典,大有裨益。[[User:范博2004|范博2004]]([[User talk:范博2004|留言]]) 2022年3月24日 (四) 01:16 (UTC)
==條目請求==
{{Wikisource|分类:辭典}}
{{large|欢}}迎大家参与編輯或擴充任何汉字相关的词条,如果下列被请求合作编写的词条中有您感兴趣的,请直接点击他们精心编写。如果在编写中遇到不清楚的地方,「[[Wiktionary:漢字專題/漢字相關資訊參考|漢字相關資訊參考]]」和「[[Wiktionary:漢字專題/編輯參考|編輯參考]]」或许能给您的编写提供帮助。
===請求改善的條目===
-{
*[[漢]]}-
===請求新建的條目===
-{
*[[商]]
*[[tiếng]]
*[[歴]]}-
==模板==
參數請見模板說明。
*漢語
**{{tl|zh-forms}}
*** s= 簡體字
*** alt= 異體字
*** type= 斷字詞方式,例如:<nowiki>{{zh-forms|s=夜视镜|type=21}}</nowiki>
**{{tl|wikipedia}} 或 {{tl|zh-wp}} 或 {{tl|swp}} 或 {{tl|wp}} (預設連到中文維基百科,除了zh-wp,其他的都可用 lang= 去指定語系)
*詞源
**組詞 {{T1|compound|lang=zh}}
**源自 {{T1|bor|zh|en}}
**借自 {{T1|bor+|zh|en}}
**簡寫 {{T1|short for|zh}}
**形譯自 {{T1|obor|zh|jah}}
**仿譯自 {{T1|cal|zh|en}}
**音義兼譯自 {{T1|psm|zh|en}}
**簡稱(繁簡並列,含拼音) {{T1|zh-etym-short}}
**其他語言
***梵語 {{t1|m+|sa}}
*發音
**{{tl|zh-pron}}
***漢語拼音 m=
***粵語拼音 c=
***閩南話拼音 mn=
***名詞 cat=n
***專有名詞 cat=pn
***動詞 cat=v
***形容詞 cat=a
***成語 cat=cy
***俗語 cat=id
***量詞 cat=cls
*名詞
**<nowiki>{{head|zh|名詞}}</nowiki>
**(字面義) <nowiki>{{lb|zh|literally}}</nowiki>
**(比喻義) <nowiki>{{lb|zh|figuratively}}</nowiki>
**(病理學) <nowiki>{{lb|zh|疾病}}</nowiki>
**(中醫學) <nowiki>{{lb|zh|中醫學}}</nowiki> 或 <nowiki>{{lb|zh|TCM}}</nowiki>
**(中國神話) <nowiki>{{lb|zh|Chinese mythology}}1</nowiki>
**關於 <nowiki>{{lb|zh}}</nowiki> 的其他的主題用法另見 [[:Category:漢語 主題]]
**閩南語 {{T1|qualifier|閩南語}}
**同義詞 {{t1|syn of|zh}}
**另一種寫法{{T1|alternative form of|zh}}
**本字 {{T1|zh-original}}
**舊名 {{T1|zh-old-name}}
**別名 {{T1|zh-alt-name}}
**簡稱 {{T1|zh-short}}
**學名(連接到維基物種) {{tl|Taxlink}} 或 {{tl|taxfmt}}
*** 1=學名
*** 2=family(科),genus(屬),species(種),varietas(變種)
*** (~科 {{t1|zh-div|科}}
*** (~屬) {{t1|zh-div|屬}}
*** (~種) {{t1|zh-div|種}}
**簡寫(繁簡並列,不含拼音) {{T1|short for|zh}}
**簡稱(繁簡並列,含拼音) {{T1|zh-short}}
*專有名詞
**<nowiki>{{head|zh|專有名詞}}</nowiki>
*** 地名 <nowiki>{{n-g|[[地名]]}}</nowiki>
*** 位置描述
**** <nowiki>{{place|zh|t=崑崙山脈|range|北接塔里木盆地,南連青藏高原,橫跨新疆、西藏、青海|中國境內,}}</nowiki>
**** <nowiki>{{place|zh|t=崑崙關|關隘|南寧市東北方向59公里,賓陽縣城西南方30.5公里,處賓陽、邕寧兩縣交界|中國廣西}}</nowiki>
**** <nowiki>{{place|zh|島嶼|越南}}</nowiki>
*** 姓氏 <nowiki>{{surname|zh}}</nowiki>
*** 男性名字 <nowiki>{{given name|ja|男性}}</nowiki>
*** 女性名字 <nowiki>{{given name|ja|女性}}</nowiki>
*** 中性名字 <nowiki>{{given name|ja|unisex}}</nowiki>
** 使用說明
*** 僅用於 {{t1|zh-only used in|xxx}}。
*動詞
**<nowiki>{{head|zh|動詞}}</nowiki> 或 {{T1|zh-verb}}
*形容詞
**<nowiki>{{head|zh|形容詞}}</nowiki>
*擬聲詞
**<nowiki>{{head|zh|擬聲詞}}</nowiki>
*成語
**<nowiki>{{head|zh|成語}}</nowiki>
*其他詞性
**<nowiki>{{head|zh|詞性名稱}}</nowiki>
**用法詳見[[:Category:漢語詞元]] 與 [[:Category:漢語詞源]]
*引言(使用範例)
**{{tl|zh-x}}
*派生詞
**{{tl|zh-der}}
**{{tl|col3|zh}}
**{{t1|CJKV}}
*分類
**{{tl|C|zh}}
*其他
**{{tl|zh-l}}
**同義詞 {{tl|synonyms|zh}}
**反義詞 {{tl|Antonyms|zh}}
===類義詞庫===
*類義詞庫範例:[[Thesaurus:幸虧]]
*在條目裡使用:<pre>{{syn-saurus|zh|幸虧}}</pre>
==參考資料==
;漢語
*[https://dict.revised.moe.edu.tw/ 教育部《重編國語辭典修訂本》2021]
*[https://dict.idioms.moe.edu.tw/search.jsp 教育部《成語典》2020]
*[https://dict.learner.naer.edu.tw/ 國家教育研究院 《中小學語文學習詞典》2024]
*[https://pedia.cloud.edu.tw/home/index 教育百科]
*[https://terms.naer.edu.tw/ 國家教育研究院 - 樂詞網](查詢各專業名詞用) -
*[https://www.chinese-linguipedia.org/search_academy.html 兩岸學術名詞 | 中華語文知識庫]
*[https://crptransfer.moe.gov.tw/ 拼音查詢 - 中文譯音轉換系統]
*[https://www.cns11643.gov.tw/ 全字庫 CNS11643]
;台語&閩南語
*[https://sutian.moe.edu.tw/zh-hant/ 教育部臺灣台語常用詞辭典]
;漢字
*[https://edreamertw.my.canva.site/dict 線上國語字典API版]
;物種
*[https://taicol.tw/zh-hant/ 臺灣物種名錄 Catalogue of Life in Taiwan]
;中藥
*[https://sys01.lib.hkbu.edu.hk/cmed/mmid/ 中藥材圖像數據庫]
*[https://sys01.lib.hkbu.edu.hk/cmed/mpid/ 藥用植物圖像數據庫]
*[https://sys01.lib.hkbu.edu.hk/cmed/pid/ 中草藥化學圖像數據庫]
*[https://sys01.lib.hkbu.edu.hk/cmed/cmfid/ 中藥方劑圖像數據庫]
*[https://spbcm.cmu.edu.tw/ccmp/c/c.htm 嚐百草‧采眾方:中醫藥資訊數位平台]
*香港中藥材標準
*#[https://www.cmro.gov.hk/html/b5/useful_information/hkcmms/cmmlist.html 藥材清單](只有藥材名)
*#[https://www.cmro.gov.hk/html/b5/utils/hkcmms/search/disclaimer.php 網上檢索系統](這邊查)
;各種生物圖鑑
*[https://kmweb.moa.gov.tw 農業知識入口網] → 圖鑑資料(植物、農業害蟲、魚類、蝴蝶、鳥類)
*[https://www.tfrin.gov.tw/theme_list.php?theme=collection&sub_theme=aquatic 水產生物圖說]
*[https://churaumi.okinawa/tc/fishbook/ 美麗海生物圖鑑 | 沖繩美麗海水族館]
*[https://tai2.ntu.edu.tw/ 台灣植物資訊整合查詢系統](乾燥標本圖示)
;維基文庫
*[[s:神農本草經讀]]
*[[s:本草綱目]]
*[[s:天工開物]]
==姊妹專題==
*[[w:Wikipedia:漢字文化圈專題|維基百科漢字文化圈專題]]
5z1n4vhw37nnw7w8yqtq0kr4b9hf0ti
Wiktionary:统计
4
1718
9758167
9757754
2026-05-13T04:58:01Z
TongcyBot
83009
機器人:更新每日統計數據 (2026-05-13)
9758167
wikitext
text/x-wiki
{{Interwiki}}
{{shortcut|WT:STAT}}
==基本資料==
{| class="wikitable"
! 項目 !! 資料
|-
! MediaWiki版本
| {{CURRENTVERSION}}
|-
! 詞條數量
| [[Special:Statistics|'''{{NUMBEROFARTICLES}}''']]
|-
! 總頁面數
| {{NUMBEROFPAGES}}
|-
! 已編碼的語言數量
| {{#invoke:list of languages|count}}
|-
! 檔案數量
| {{NUMBEROFFILES}}
|-
! 註冊用戶數
| {{NUMBEROFUSERS}}
|-
! 活躍用戶數
| {{NUMBEROFACTIVEUSERS}}
|-
! 管理員數量
| {{NUMBEROFADMINS}}
|-
! 全站頁面編輯次數
| {{NUMBEROFEDITS}}
|}
其他資料請參考[[Special:Statistics]]。
==頁面==
本表是中文维基詞典詞條数依日期到達的里程碑,以每一万个词条为单位计数。<!-- 以下內容已不再更新
* 近期統計圖表(區分機器人與一般用戶,選擇zhwiktionary_p,每日自動更新):[https://tools.wmflabs.org/wmcharts/wmchart0001.php 編輯次數]{{·}}[https://tools.wmflabs.org/wmcharts/wmchart0002.php 新增詞條數量]-->
* 目前的詞條數:'''{{NUMBEROFARTICLES}}'''({{重新整理|更新}})。
{{Milestone}}
==与相邻语言版本的比较==
中文维基词典词条收录量为'''{{NUMBEROFARTICLES}}''',在所有语言版本的詞典中[[meta:Wiktionary#List of Wiktionaries|'''位列第4''']]。
{{autoStat
| 2026-05-01
| fr | mg | zh | th | el
| 6910311 | 5911338 | 2317075 | 2180613 | 1578407
| 6910465 | 5911778 | 2317733 | 2180625 | 1578438
| 6910902 | 5911947 | 2318306 | 2180659 | 1578642
| 6911431 | 5912087 | 2318644 | 2180659 | 1578727
| 6911789 | 5912618 | 2319200 | 2180693 | 1578858
| 6912182 | 5912774 | 2319756 | 2180695 | 1578878
| 6912997 | 5913101 | 2320558 | 2180707 | 1578945
| 6913587 | 5914311 | 2321341 | 2180732 | 1578967
| 6914008 | 5914542 | 2321908 | 2180738 | 1578993
| 6914917 | 5914730 | 2322662 | 2180747 | 1579019
| 6915864 | 5914994 | 2323162 | 2180753 | 1579114
| 6916634 | 5915340 | 2323608 | 2180766 | 1579178
| 6916940 | 5916674 | 2323976 | 2180768 | 1579265
| 6917350 | 5917831 | 2324585 | 2180776 | 1579287
}}
* 来源:[https://wikistats.wmcloud.org/display.php?t=wt Wikistats] 统计的具体时间为当日1时(UTC)左右,近似表示前一天的数据
* 关于里程碑,参见[[Wiktionary:宣告]]
==页面访问统计==
历史数据参见:[[Wiktionary:统计/存档]]
===总页面浏览量===
{{Collapse2|header=最近一年中文維基詞典的存取量|float=right
|{{Graph:PageViews| 365 | _ |scale=sqrt}}
}}
{{Collapse2|header=自2016年起中文維基詞典總頁面瀏覽量(時間單位:月)|float=right
|{{Graph:Chart
| width = 800
| height = 300
| xAxisTitle = 時間
| yAxisTitle = 瀏覽量(次)
| x = 2016/01/01,2016/02/01,2016/03/01,2016/04/01,2016/05/01,2016/06/01,2016/07/01,2016/08/01,2016/09/01,2016/10/01,2016/11/01,2016/12/01,2017/01/01,2017/02/01,2017/03/01,2017/04/01,2017/05/01,2017/06/01,2017/07/01,2017/08/01,2017/09/01,2017/10/01,2017/11/01,2017/12/01,2018/01/01,2018/02/01,2018/03/01,2018/04/01,2018/05/01,2018/06/01,2018/07/01,2018/08/01,2018/09/01,2018/10/01,2018/11/01,2018/12/01,2019/01/01,2019/02/01,2019/03/01,2019/04/01,2019/05/01,2019/06/01,2019/07/01,2019/08/01,2019/09/01,2019/10/01,2019/11/01,2019/12/01,2020/01/01,2020/02/01,2020/03/01,2020/04/01,2020/05/01,2020/06/01,2020/07/01,2020/08/01,2020/09/01,2020/10/01,2020/11/01,2020/12/01,2021/01/01,2021/02/01,2021/03/01,2021/04/01,2021/05/01,2021/06/01,2021/07/01,2021/08/01,2021/09/01,2021/10/01,2021/11/01,2021/12/01,2022/01/01,2022/02/01,2022/03/01,2022/04/01,2022/05/01,2022/06/01,2022/07/01,2022/08/01,2022/09/01,2022/10/01,2022/11/01,2022/12/01,2023/01/01,2023/02/01,2023/03/01,2023/04/01,2023/05/01,2023/06/01,2023/07/01,2023/08/01,2023/09/01,2023/10/01,2023/11/01,2023/12/01,2024/01/01,2024/02/01,2024/03/01,2024/04/01,2024/05/01,2024/06/01,2024/07/01,2024/08/01,2024/09/01,2024/10/01,2024/11/01,2024/12/01,2025/01/01,2025/02/01,2025/03/01,2025/04/01,2025/05/01,2025/06/01,2025/07/01,2025/08/01,2025/09/01,2025/10/01,2025/11/01,2025/12/01,2026/01/01,2026/02/01,2026/03/01,2026/04/01
| xType = date
| yAxisFormat =
| showSymbols =
| y1 = 10097003,10370374,8792159,8941196,7730585,8096248,6653053,7707543,10114598,7503416,6761878,8479478,6306309,7029498,7793566,8952099,7201718,7403015,9094546,8753927,8887701,8836025,7012428,8297104,9776325,7383846,6846537,6478883,7844796,6800241,7032236,8907342,8070578,8878639,7374038,10399016,8843049,11735279,15986235,6536323,7794540,6340229,6963086,7077486,7262235,8135613,7350657,5924829,5389757,6706817,5468323,6028296,7420864,8089314,9463391,8952807,8032717,7976343,8839864,8511738,9062568,9099531,9196338,11036657,13507384,12075399,13497219,15603301,16689908,15728651,14140022,16914100,13589392,14818070,19016624,15144543,14891967,17026541,17298554,14032388,14847453,17608848,19967345,16730368,14386645,12098112,13610799,13122059,13901295,13433194,15511876,15674859,17748912,26144678,22153348,21554742,23027727,29476088,31116352,31891299,31844500,26251290,24446253,43524978,42154325,30934003,60141744,38114834,35256147,36402985,32703811,27105782,45361042,55198883,39017796,28042128,37231311,52390983,65887852,43219295,50138160,26315414,38336237,63309024
}}
}}
{| class="wikitable mw-collapsible mw-collapsed"
! 日期 !! 浏览量
|-
| 2026-04-01 || 63,309,024
|-
| 2026-03-01 || 38,336,237
|-
| 2026-02-01 || 26,315,414
|-
| 2026-01-01 || 50,138,160
|-
| 2025-12-01 || 43,219,295
|-
| 2025-11-01 || 65,887,852
|-
| 2025-10-01 || 52,390,983
|-
| 2025-09-01 || 37,231,311
|-
| 2025-08-01 || 28,042,128
|-
| 2025-07-01 || 39,017,796
|-
| 2025-06-01 || 55,198,883
|-
| 2025-05-01 || 45,361,042
|-
| 2025-04-01 || 27,105,782
|-
| 2025-03-01 || 32,703,811
|-
| 2025-02-01 || 36,402,985
|-
| 2025-01-01 || 35,256,147
|-
| 2024-12-01 || 38,114,834
|-
| 2024-11-01 || 60,141,744
|-
| 2024-10-01 || 30,934,003
|-
| 2024-09-01 || 42,154,325
|-
| 2024-08-01 || 43,524,978
|-
| 2024-07-01 || 24,446,253
|-
| 2024-06-01 || 26,251,290
|-
| 2024-05-01 || 31,844,500
|-
| 2024-04-01 || 31,891,299
|-
| 2024-03-01 || 31,116,352
|-
| 2024-02-01 || 29,476,088
|-
| 2024-01-01 || 23,027,727
|-
| 2023-12-01 || 21,554,742
|-
| 2023-11-01 || 22,153,348
|-
| 2023-10-01 || 26,144,678
|-
| 2023-09-01 || 17,748,912
|-
| 2023-08-01 || 15,674,859
|-
| 2023-07-01 || 15,511,876
|-
| 2023-06-01 || 13,433,194
|-
| 2023-05-01 || 13,901,295
|-
| 2023-04-01 || 13,122,059
|-
| 2023-03-01 || 13,610,799
|-
| 2023-02-01 || 12,098,112
|-
| 2023-01-01 || 14,386,645
|-
| 2022-12-01 || 16,730,368
|-
| 2022-11-01 || 19,967,345
|-
| 2022-10-01 || 17,608,848
|-
| 2022-09-01 || 14,847,453
|-
| 2022-08-01 || 14,032,388
|-
| 2022-07-01 || 17,298,554
|-
| 2022-06-01 || 17,026,541
|-
| 2022-05-01 || 14,891,967
|-
| 2022-04-01 || 15,144,543
|-
| 2022-03-01 || 19,016,624
|-
| 2022-02-01 || 14,818,070
|-
| 2022-01-01 || 13,589,392
|-
| 2021-12-01 || 16,914,100
|-
| 2021-11-01 || 14,140,022
|-
| 2021-10-01 || 15,728,651
|-
| 2021-09-01 || 16,689,908
|-
| 2021-08-01 || 15,603,301
|-
| 2021-07-01 || 13,497,219
|-
| 2021-06-01 || 12,075399
|-
| 2021-05-01 || 13,507,384
|-
| 2021-04-01 || 11,036,657
|-
| 2021-03-01 || 9,196,338
|-
| 2021-02-01 || 9,099,531
|-
| 2021-01-01 || 9,062,568
|-
| 2020-12-01 || 8,511,738
|-
| 2020-11-01 || 8,839,864
|-
| 2020-10-01 || 7,976,343
|-
| 2020-09-01 || 8,032,717
|-
| 2020-08-01 || 8,952,807
|-
| 2020-07-01 || 9,463,391
|-
| 2020-06-01 || 8,089,314
|-
| 2020-05-01 || 7,420,864
|-
| 2020-04-01 || 6,028,296
|-
| 2020-03-01 || 5,468,323
|-
| 2020-02-01 || 6,706,817
|-
| 2020-01-01 || 5,389,757
|-
| 2019-12-01 || 5,924,829
|-
| 2019-11-01 || 7,350,657
|-
| 2019-10-01 || 8,135,613
|-
| 2019-09-01 || 7,262,235
|-
| 2019-08-01 || 7,077,486
|-
| 2019-07-01 || 6,963,086
|-
| 2019-06-01 || 6,340,229
|-
| 2019-05-01 || 7,794,540
|-
| 2019-04-01 || 6,536,323
|-
| 2019-03-01 || 15,986,235
|-
| 2019-02-01 || 11,735,279
|-
| 2019-01-01 || 8,843,049
|-
| 2018-12-01 || 10,399,016
|-
| 2018-11-01 || 7,374,038
|-
| 2018-10-01 || 8,878,639
|-
| 2018-09-01 || 8,070,578
|-
| 2018-08-01 || 8,907,342
|-
| 2018-07-01 || 7,032,236
|-
| 2018-06-01 || 6,800,241
|-
| 2018-05-01 || 7,844,796
|-
| 2018-04-01 || 6,478,883
|-
| 2018-03-01 || 6,846,537
|-
| 2018-02-01 || 7,383,846
|-
| 2018-01-01 || 9,776,325
|-
| 2017-12-01 || 8,297,104
|-
| 2017-11-01 || 7,012,428
|-
| 2017-10-01 || 8,836,025
|-
| 2017-09-01 || 8,887,701
|-
| 2017-08-01 || 8,753,927
|-
| 2017-07-01 || 9,094,546
|-
| 2017-06-01 || 7,403,015
|-
| 2017-05-01 || 7,201,718
|-
| 2017-04-01 || 8,952,099
|-
| 2017-03-01 || 7,793,566
|-
| 2017-02-01 || 7,029,498
|-
| 2017-01-01 || 6,306,309
|-
| 2016-12-01 || 8,479,478
|-
| 2016-11-01 || 6,761,878
|-
| 2016-10-01 || 7,503,416
|-
| 2016-09-01 || 10,114,598
|-
| 2016-08-01 || 7,707,543
|-
| 2016-07-01 || 6,653,053
|-
| 2016-06-01 || 8,096,248
|-
| 2016-05-01 || 7,730,585
|-
| 2016-04-01 || 8,941,196
|-
| 2016-03-01 || 8,792,159
|-
| 2016-02-01 || 10,370,374
|-
| 2016-01-01 || 10,097,003
|}
数据来源:[https://stats.wikimedia.org/#/zh.wiktionary.org/reading/total-page-views/normal|table|1-year|~total|monthly Total page views]
===热词===
页面浏览量最高的词条:
{{Wiktionary:統計/熱詞
|year=2024 |month=6
|t1=尛 |cat1=[[:Category:漢字|漢字]] |v1=5,385 |m1=82.8
|t2=。 |cat2=[[:Category:標點符號|標點符號]] |v2=5,355 |m2=94.4
|t3=! |cat3=[[:Category:標點符號|標點符號]] |v3=3,407 |m3=74.2
|t4=凪 |cat4=[[:Category:和製漢字|和製漢字]]|v4=3,120 |m4=62.0
|t5=雫 |cat5=[[:Category:和製漢字|和製漢字]] |v5= 3,114 |m5=64.6
|t6=又双叒叕 |cat6=[[:Category:漢語副詞|漢語副詞]] |v6=2,528 |m6=73.4
|t7=你好 |cat7=[[:Category:漢語感嘆詞|漢語感嘆詞]] |v7=2,513 |m7=41.1
|t8=昶 |cat8=[[:Category:漢字|漢字]] |v8=2,412 |m8=56.7
|t9=肉便器 |cat9=[[:Category:漢語名詞|漢語名詞]] |v9=2,345 |m9=78.4
|t10=辻 |cat10=[[:Category:和製漢字|和製漢字]] |v10=2,150 |m10=71.8
}}
数据来源:[https://pageviews.toolforge.org/topviews/?project=zh.wiktionary.org&platform=all-access&date={{CURRENTYEAR}}-{{CURRENTMONTH}}&excludes= Topviews Analysis - Most viewed pages of a project]
==收录词条==
{{See|Wiktionary:统计/各语言词条}}
==参看==
*[[Special:Statistics|基本统计]]
[[Category:維基詞典統計]]
h4fm5ds4sfwiu6o39vika5eqk3gzso5
maro
0
12279
9757996
9709055
2026-05-12T12:11:04Z
TongcyDai
53191
/* 意大利語 */
9757996
wikitext
text/x-wiki
{{also|Maro|maró|marò|māro|'måro}}
==阿法爾語==
===發音===
* {{aa-IPA|maró}}
===名詞===
{{aa-noun|maró|g=f}}
# [[集會]]
====來源====
* {{R:aa:Hassan Kamil:2015}}
==布列塔尼語==
===詞源===
{{inh+|br|cel-pro|*marwos|t=死的}} (對照{{cog|cy|marw}}、{{m|sga|marb}}),來自{{inh|br|ine-pro|*mr̥wós}} (對照{{m|ine-pro|*mr̥tós}}),源自詞根{{m|ine-pro|*mer-|t=死亡}}。
===形容詞===
{{br-adj}}
# [[死]]的
===詞首音變===
{{br-verb-mutation|m|aro}}
==世界語==
===詞源===
來自{{der|eo|it|-}}、{{der|eo|la|mare}}。
===發音===
{{eo-IPA|a=Eo-maro.ogg}}
===名詞===
{{eo-head}}
# {{lb|eo|geography}} [[海]]
====衍生詞====
{{der4
|eo|{{l|eo|Beringa Maro|t=白令海}}
|{{l|eo|mararmeo|t=海軍}}
|{{l|eo|marbirdo|t=海鳥}}
|{{l|eo|marhaveno|t=海港}}
|{{l|eo|markolo|t=海峽}}
|{{l|eo|marstelo|t=海星}}
|{{l|eo|marnivelo|t=海平面}}
|{{l|eo|maristo|t=水手}}
|{{l|eo|Norvega Maro|t=挪威海}}
|{{l|eo|Irlanda Maro|t=愛爾蘭海}}
|{{l|eo|Baleara Maro|t=巴利阿里海}}
|{{l|eo|Japana Maro|t=日本海}}
|{{l|eo|Sudĉina Maro|t=南海}}
|{{l|eo|Kaspia Maro|t=裡海}}
|{{l|eo|Araba Maro|t=阿拉伯海}}
|{{l|eo|Kariba Maro|t=加勒比海}}
|{{l|eo|marvirino|t=人魚}}
|{{l|eo|maranaso|t=海番鴨}}
|{{l|eo|Balta Maro|t=波羅的海}}
|{{l|eo|Flava Maro|t=黃海}}
|{{l|eo|Ruĝa Maro|t=紅海}}
}}
====派生詞====
* {{desc|io|maro}}
{{eo BRO|3}}
==伊多語==
===詞源===
來自{{der|io|eo|maro}}。
===發音===
{{io-IPA}}
===名詞===
{{io-noun|mar}}
# [[海]]
==意大利語==
===詞源===
來自{{der|it|la|marum}},來自{{der|it|grc}}。
===發音===
{{it-pr|màro}}
===名詞===
{{it-noun|m}}
# [[貓百里香]] ({{taxlink|Teucrium marum|species}})
===異序詞===
* {{anagrams|it|a=amor|Roma|amor|armo|armò|mora|orma|ramo|ramò|roma}}
{{C|it|脣形科植物}}
==新挪威語==
===名詞===
{{nn-noun-form|f}}
# {{nn-fcon|1917}} {{infl of|nn|maru||def|s}}
# {{lb|nn|dialectal|Sunnhordland|Sokndal}} {{infl of|nn|mare|mara|def|s}}
===異序詞===
* {{anagrams|nn|a=amor|Omar|Roma|amor|mora|omar|ómar|orma|roma}}
==波蘭語==
===發音===
{{pl-pr}}
===名詞===
{{head|pl|名詞變格形|g=f}}
# {{inflection of|pl|mara||voc|s}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|marar}}
==羅馬尼亞語==
===其他寫法===
* {{alt|ro|maron}}
===詞源===
{{bor+|ro|fr|marron}}。
===發音===
* {{IPA|ro|[maˈɾo]}}
* {{audio|ro|LL-Q7913 (ron)-Andreea Teodoraa-maro.wav}}
===形容詞===
{{ro-adj|inv}}
# [[棕色]]的
====變格====
{{ro-decl-adj|inv}}
===名詞===
{{ro-noun|n|uri}}
# [[棕色]]
====變格====
{{ro-noun-n-uri}}
===參見===
{{table:colors/ro}}
{{C|ro|棕色}}
==威爾士語==
===詞源===
{{bor+|cy|en|marrow}}。
===發音===
* {{IPA|cy|/ˈmarɔ/}}
* {{rhymes|cy|arɔ|s=2}}
===名詞===
{{cy-noun|m|maros}}
# [[西葫蘆]]
===詞首音變===
{{cy-mut}}
===來源===
* {{R:cy:GPC}}
{{C|cy|葫蘆科植物|蔬菜}}
2afp9d2p04duwmttofb71yurjnp46ih
gossip
0
31286
9757977
9742619
2026-05-12T12:05:16Z
TongcyDai
53191
9757977
wikitext
text/x-wiki
{{also|Gossip}}
==英语==
{{wp|lang=en}}
===词源===
源自{{inh|en|enm|godsybbe}}、{{m|enm|godsib|t=亲朋好友;教父,教母}},源自{{inh|en|ang|godsibb|t=教父,教母}},等价于{{affix|en|god|sib|nocat=1}}。{{doublet|en|godsib}}。“流言蜚语”之意的产生可对比{{m+|fr|commérage}}。
===发音===
* {{IPA|en|/ˈɡɒsɪp/|a=RP}}
* {{IPA|en|/ˈɡɑsəp/|a=GA}}
* {{audio|en|En-us-gossip.ogg|a=GA}}
* {{hyph|en|gos|sip}}
===名词===
{{en-noun|~}}
# {{lb|en|可数}} 爱[[八卦]]的人,爱传[[流言蜚语]]的人;[[八公]],[[八婆]]
#: {{syn|en|busybody|gossipmonger|meddler|rumormonger|Thesaurus:gossiper}}
#: {{ux|en|Be careful what you say to him: he’s a bit of a '''gossip'''.|跟他说话时长个心眼,他经常传'''流言蜚语'''。}}
#* {{quote-book|en|year=1752|author={{w|lang=en|Arthur Murphy (writer)|Arthur Murphy}}|title=The Gray’s Inn Journal|volume=1|issue=11|page=73|url=http://name.umdl.umich.edu/004873546.0001.001|text=A losing Gamester, who is obliged to drive into the City to dispose of a little ''South Sea'' Stock, gives the Hint there. The '''Gossips''' at ''{{w|lang=en|Exchange Alley|Garraway’s}}'' have it in a Moment: At One it is buzz’d on ''Change,'' and the circulating Whisper in the Boxes interrupts the Play at Night.}}
#* {{quote-book|en|year=1846|author=w:[[赫爾曼·梅爾維爾|Herman Melville]]|title=w:en:Typee|chapter=Sequel Containing the Story of Toby|url=http://www.gutenberg.org/files/28656/28656-h/28656-h.html|text=He was an arrant old '''gossip''', too; for ever coming off in his canoe to the ships in the bay, and regaling their crews with choice little morsels of court scandal {{...}}}}
#* {{quote-book|en|year=1952|author=w:[[約翰·史坦貝克|John Steinbeck]]|title={{w|伊甸之東|East of Eden}}|location=London|publisher=Heinemann|chapter=48|page=456|url=https://archive.org/details/in.ernet.dli.2015.458774|text=Alf could tell you about everybody on both sides of Main Street. He was a vicious male '''gossip''', insatiably curious and vindictive without malice.}}
# {{lb|en|不可数}} [[流言蜚语]],[[八卦]]
#: {{syn|en|dirt|hearsay|rumor|scandal|scuttlebutt|Thesaurus:rumor}}
#: {{ux|en|According to the latest '''gossip''', their relationship is [[on the rocks]].|据最新的'''八卦消息''',他们的感情出现了裂痕。}}
#: {{ux|en|I have a juicy piece of '''gossip''' to share with you.|我有一个劲爆的'''八卦'''要跟你说。}}
#* {{RQ:Austen Persuasion|chapter=18|text={{...}} the thing is certainly true. It is not a mere bit of '''gossip'''. We have it from Frederick himself.}}
#* {{RQ:Chambers Younger Set|II|passage=I ought to arise and go forth with timbrels and with dances; but, do you know, I am not inclined to revels? There has been a little—just a very little bit too much festivity so far …. Not that I don’t adore dinners and '''gossip''' and dances; not that I do not love to pervade bright and glittering places.{{nb...}}}}
#* {{quote-book|en|year=1980|author=w:[[約翰·馬克斯維爾·庫切|J. M. Coetzee]]| title=w:en:Waiting for the Barbarians| publisher=Penguin| year_published=1982| chapter=2|page=32| url=https://archive.org/details/waitingforbarbar00coet| text=The smaller a town the more richly it hums with '''gossip'''. There are no private affairs here. '''Gossip''' is the air we breathe.}}
#* {{quote-book|en|year=2018|author=w:en:Anna Burns|title={{w|lang=en|Milkman (novel)|Milkman}}|location=London|publisher=Faber & Faber|chapter=1|url=https://books.google.ca/books?id=Ta5PDwAAQBAJ&printsec=frontcover#v=onepage&q&f=false|text=Intense nosiness about everybody had always existed in the area. '''Gossip''' washed in, washed out, came, went, moved on to the next target.}}
# {{lb|en|不可数}} [[闲谈]]
#: {{syn|en|chat|chinwag|chit-chat|natter|Thesaurus:chatter}}
#* {{RQ:Alcott Little Women|chapter=38|text=The parlor was always bright and attractive, the chessboard ready, the piano in tune, plenty of gay '''gossip''', and a nice little supper set forth in tempting style.}}
# {{lb|en|不可数}} 八卦新闻,八卦媒体
#: {{ux|en|a '''gossip''' columnist|'''八卦'''专栏作家}}
#: {{ux|en|a '''gossip''' blog|'''八卦'''博客}}
#* {{RQ:Vance Outsider|page=373|column=2|passage=Little disappointed, then, she turned attention to "Chat of the Social World," '''gossip''' which exercised potent fascination upon the girl's intelligence. She devoured with more avidity than she had her food those pretentiously phrased chronicles of the snobocracy—{{nb...|nospace=1}}—distilling therefrom an acid envy that robbed her napoleon of all its flavor.}}
# {{lb|en|computing}} (流言协议的) [[通讯]],[[通信]]
# {{lb|en|now|仅|_|historical}} [[教父]],[[教母]],[[教父母]]
#: {{syn|en|sponsor|godsib}}
#: {{hypo|en|godfather|godmother}}
#* {{RQ:Shakespeare Verona|act=III|scene=i|text=’tis not a maid, for she hath had '''gossips''' [''[[i.e.]]'' she could not be a virgin, because she has children with godparents]}}
#* {{quote-book|en|year=1689|author=w:[[約翰·塞爾登|John Selden]]|title=Table-Talk|location=London|publisher=Jacob Tonson ''et al.,'' 1696, “Prayer”|page=134|url=http://name.umdl.umich.edu/A59095.0001.001|text=Should a great Lady, that was invited to be a '''Gossip''', in her place send her Kitchen-Maid, ’twould be ill taken;}}
#* {{RQ:Richardson Pamela|volume=III|page=400|text=It seems, Miss, that if he stood not himself, or procur’d not '''Gossips''' for the Christening of the Children of his poorer Tenants, he always sent them a large rich Cake {{...}}}}
#* {{quote-text|en|year=1908|author=Patrick Weston Joyce|title=A Smaller Social History of Ancient Ireland: Treating of the Government, Military System, and Law; Religion, Learning, and Art; Trades, Industries, and Commerce; Manners, Customs, and Domestic Life, of the Ancient Irish People|page=287
|passage=When a man stood sponsor for a child at baptism, he became the child's godfather, and '''gossip''' to the parents.}}
#* {{quote-book
|en
|year=2010
|author=Susan E. Phillips
|title=Transforming Talk: The Problem with Gossip in Late Medieval England
|publisher=Penn State Press
|isbn=9780271047393
|page=154
|passage='''Gossips''' accepted responsibility for the child's spiritual and physical well-being, {{...}}}}
# {{lb|en|弃用}} [[熟人]],[[朋友]]
#: {{syn|en|friend}}
#* {{RQ:Shakespeare Henry 8|act=V|scene=v|text=My noble '''gossips''', ye have been too prodigal:<br>I thank ye heartily;}}
# {{lb|en|弃用}} (教父母名字后加的称谓)教父,教母
#* {{RQ:Shakespeare Merry Wives|act=IV|scene=ii|text=What, ho, '''gossip''' Ford! what, ho!}}
#* {{quote-book|en|year=1905|author=w:William John Locke|title={{w|lang=en||The Morals of Marcus Ordeyne (novel)|The Morals of Marcus Ordeyne}}|chapter=11|url=http://www.gutenberg.org/files/5051/5051-h/5051-h.htm|text=He was old and infirm, he wrote, and '''Gossip''' Death was waiting for him on the moor; but before he went to join him he would like to see Susan’s boy again.}}
====衍生词汇====
{{col|en
|cybergossip
|gossipee
|gossiper
|gossipfest
|gossipful
|gossiphood
|gossipish
|gossipless
|gossiplike
|gossiply
|gossip mill
|gossip mirror
|gossip-prone
|gossipred
|gossipy
}}
====派生語彙====
* {{desc|wuu|茄山河|bor=1|unc=1}}
===动词===
{{en-verb|+,++<l:rare>}}
# {{lb|en|不及物}} [[议论]][[纷纷]],聊八卦,传八卦
#: {{syn|en|blab|dish the dirt|spill the tea|talk out of turn|tell tales out of school}}
#* {{RQ:Fielding Tom Jones|volume=I|book=2|chapter=4|page=66|text=This Place then is no other than the Chandler’s Shop; the known Seat of all the News; or, as it is vulgarly called, '''Gossiping''', in every Parish in ''England''.}}
#* {{quote-book|en|year=1959|author=w:[[繆麗爾·斯帕克|Muriel Spark]]|title={{w|lang=en|Memento Mori (novel)|Memento Mori}}|location=New York|publisher=Time-Life, 1964|chapter=8|page=109|url=https://archive.org/details/mementomori00spar_1|text=Godfrey felt guilty at having '''gossiped''' to Olive about Lettie’s changes in her will.}}
# {{lb|en|不及物}} [[闲聊]],[[聊天]]
#: {{syn|en|chat|chatter|chew the fat|chinwag|natter|prattle|shoot the breeze}}
#* {{RQ:Jerome Three Men|chapter=14|passage={{...}} on seats beneath the trees, the old men group of an evening to drink their ale and '''gossip''' over village politics;}}
#* {{RQ:Doyle Land of Mist|passage="Tut! tut! The unchanging woman. They '''gossiped''' in my time and they '''gossip''' still."}}
# {{lb|en|弃用}} 给...找教父母
#* {{RQ:Shakespeare All's Well|act=I|scene=i|text={{...}} a world<br>Of pretty, fond, adoptious christendoms [''[[i.e.]]'' Christian names],<br>That blinking Cupid '''gossips'''.}}
#* {{quote-journal|en|year=1709|author=w:en:Richard Steele|work={{w|lang=en|Tatler (1709 journal)|The Tatler}}|title=No.{{nbsp}}95 in ''The Lucubrations of Isaac Bickerstaff''|location=London, 1712|page=282|url=http://name.umdl.umich.edu/004882582.0001.002|text=The Pleasure I used to take in telling my Boy Stories of the Battles, and asking my Girl Questions about the Disposal of her Baby, and the '''Gossiping''' of it, is turned into inward Reflection and Melancholy.}}
# {{lb|en|弃用}} (节日庆典时)[[开心]],[[愉快]]
#* {{RQ:Shakespeare King John|act=V|scene=ii|text={{...}} those baby eyes<br>That never saw the giant world enraged;<br>Nor met with fortune other than at feasts,<br>Full of warm blood, of mirth, of '''gossiping'''.}}
# {{lb|en|不及物|computing}} (使用流言协议) 通讯,通信
====参考资料====
* {{R:Quinion Ballyhoo}}
{{C|en|人|說話}}
==意大利语==
===词源===
{{bor+|it|en|gossip}}。
===名词===
{{it-noun|m|#}}
# (尤指名人,要人的)[[流言蜚语]],[[八卦]]
#: {{syn|it|pettegolezzo}}
====衍生词汇====
* {{l|it|gossipparo}}
{{C|it|說話}}
e5cgsyspspxf31omjlg22h136inap4q
rehabilitate
0
32812
9758517
8444047
2026-05-13T06:18:07Z
Chihunglu83
87715
9758517
wikitext
text/x-wiki
==英语==
===發音===
* {{IPA|en|/ɹiː(h)əˈbɪlɪteɪt/|a=UK}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-rehabilitate.wav|a=Southern England}}
使复原,恢复(正常生活)
[[Category:英語]]
[[Category:拉丁文字]]
[[Category:英语动词]]
rdc2bjvl3ap6z8r2qp86t6z9anzitb2
chastise
0
65136
9758516
8438728
2026-05-13T05:51:23Z
Chihunglu83
87715
/* 英語 */
9758516
wikitext
text/x-wiki
==英語==
===發音===
* {{IPA|en|/tʃæˈstaɪz/|a=UK}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-chastise.wav|a=Southern England}}
* {{IPA|en|/ˈt͡ʃæstaɪz/|/t͡ʃæˈstaɪz/|a=GA}}
* {{rhymes|en|aɪz|s=2}}
:'''chastise'''
#[[笞责]]
#[[惩罚]]
[[Category:英语动词]]
[[Category:待分類的英語詞]]
[[Category:英語]]
[[分类:拉丁文字]]
18awmf7yyj4w53e0hf90zq7e98w6w3g
emissary
0
79870
9758099
8444216
2026-05-12T15:21:53Z
Chihunglu83
87715
9758099
wikitext
text/x-wiki
==英語==
===發音===
* {{IPA|en|/ˈɛmɪs(ə)ɹi/|a=RP}}
* {{IPA|en|/ˈɛmɪˌsɛɹi/|a=US}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-emissary.wav|a=Southern England}}
:'''emissary'''
#[[密使]]
#[[间谍]]
#[[使者]]
#[[密使的]]
#[[间谍的]]
[[Category:英语名词]]
[[Category:待分類的英語詞]]
[[Category:英語]]
[[分类:拉丁文字]]
kk8l2l2vq5ovp8dtp7uuz13qivz625s
incongruity
0
97769
9758515
6630133
2026-05-13T05:50:17Z
Chihunglu83
87715
9758515
wikitext
text/x-wiki
==英語==
===發音===
* {{IPA|en|/ɪnkɑŋˈɡɹuɪti/|a=GA}}
* {{IPA|en|/ɪnkɒŋˈɡɹuːɪti/|a=RP}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-incongruity.wav|a=Southern England}}
* {{hyph|en|in|con|gru|i|ty}}
:'''incongruity'''
#[[不调和]]
#[[不一致]]
#[[不配合]]
[[Category:英语名词]]
[[Category:待分類的英語詞]]
[[Category:英語]]
[[分类:拉丁文字]]
2bv1all8njlatlzpqudowxy4ssc0o2u
tactile
0
144869
9758534
6667048
2026-05-13T07:37:56Z
Chihunglu83
87715
/* 發音 */
9758534
wikitext
text/x-wiki
==英語==
===發音===
* {{IPA|en|/ˈtæktaɪl/|/ˈtæktəl/}}
* {{audio|en|en-uk-tactile.ogg|a=UK}}
* {{rhymes|en|æktəl|s=2}}
#触觉的
#可以用触觉感知的,具体的。
* -{[[正體]]: '''觸覺'''[電子計算機]}-
[[Category:電子計算機專有名詞]]
[[Category:待分類的英語詞]]
[[Category:英語]]
[[分類:英语形容词]]
[[分类:拉丁文字]]
k479sqe4lvhxmdxofoktyxg7fd9k584
augure
0
320299
9757997
7897466
2026-05-12T12:11:30Z
TongcyDai
53191
/* 延伸阅读 */
9757997
wikitext
text/x-wiki
{{also|auguré|áugure}}
==法语==
===词源===
{{bor+|fr|la|augurium}}。{{doublet|fr|heur}}。
===发音===
* {{fr-IPA}}
* {{audio|fr|Fr-augure.ogg|音频}}
===名词===
{{fr-noun|m}}
# {{lb|fr|historical|Ancient Rome}} [[占卜官]]
# [[预言家]]
# [[征兆]],[[预兆]]
====衍生词汇====
* {{l|fr|oiseau de mauvais augure}}
===延伸阅读===
* {{R:fr:TLFi}}
{{C|fr|古羅馬|預言}}
==意大利语==
===词源===
{{bor+|it|la|augur|augurem}}。
===发音===
{{it-pr|àugure}}
===名词===
{{it-noun|m}}
# {{lb|it|historical|Ancient Rome}} [[占卜官]]
# {{lb|it|引申义}} [[预言家]]
====相关词汇====
{{rel2|it
|augurio
|augurare}}
===延伸阅读===
* {{R:it:Trec}}
{{C|it|占卜|人}}
==拉丁语==
===名词===
{{head|la|名詞變格形}}
# {{inflection of|la|augur||abl|s}}
==中古英语==
===名词===
{{enm-noun}}
# [[预言家]]
==葡萄牙语==
===动词===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|augurar}}
==西班牙语==
===动词===
{{head|es|動詞變位形式}}
# {{es-verb form of|augurar}}
aa2f9yg9cj1p5tev1fpm19mxut6ts2l
9757998
9757997
2026-05-12T12:11:49Z
TongcyDai
53191
/* 延伸阅读 */
9757998
wikitext
text/x-wiki
{{also|auguré|áugure}}
==法语==
===词源===
{{bor+|fr|la|augurium}}。{{doublet|fr|heur}}。
===发音===
* {{fr-IPA}}
* {{audio|fr|Fr-augure.ogg|音频}}
===名词===
{{fr-noun|m}}
# {{lb|fr|historical|Ancient Rome}} [[占卜官]]
# [[预言家]]
# [[征兆]],[[预兆]]
====衍生词汇====
* {{l|fr|oiseau de mauvais augure}}
===延伸阅读===
* {{R:fr:TLFi}}
{{C|fr|古羅馬|占卜}}
==意大利语==
===词源===
{{bor+|it|la|augur|augurem}}。
===发音===
{{it-pr|àugure}}
===名词===
{{it-noun|m}}
# {{lb|it|historical|Ancient Rome}} [[占卜官]]
# {{lb|it|引申义}} [[预言家]]
====相关词汇====
{{rel2|it
|augurio
|augurare}}
===延伸阅读===
* {{R:it:Trec}}
{{C|it|占卜|人}}
==拉丁语==
===名词===
{{head|la|名詞變格形}}
# {{inflection of|la|augur||abl|s}}
==中古英语==
===名词===
{{enm-noun}}
# [[预言家]]
==葡萄牙语==
===动词===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|augurar}}
==西班牙语==
===动词===
{{head|es|動詞變位形式}}
# {{es-verb form of|augurar}}
sibbc991o03k8zs80x1y6yejjfzhto3
病院
0
584708
9758567
9756644
2026-05-13T08:11:02Z
幻光尘
67775
9758567
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{wp|gan:,hak:Phiang-yèn,nan:Pēⁿ-īⁿ}}
===詞源===
始見於宋朝,因{{cog|ja|-}} {{ja-r|病院|びょういん}}而普及化;東干語仿譯自{{cal|dng|ru|больница|notext=1}}。
===發音===
{{zh-pron
|m=bìngyuàn
|dg=бин3йүан1/бин3йүан0
|c=beng6 jyun6-2
|h=pfs=phiang-yen/piô-yín;hrs=h:piang˖ rhanˇ
|h_note=piô-yín - 來自日語發音
|md=bêng-iêng
|mn=kh,tn,yl:pēⁿ-īⁿ/tp,sx,mg:pīⁿ-īⁿ/tc:pēⁿ-ìⁿ/hc:pīⁿ-ìⁿ/lk:pǐⁿ-ǐⁿ/twv:biô-ín
|mn_note=biô-ín - 來自日語發音
|w=sh:6bin yoe
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[專科醫院]]
#* {{quote-journal|zh|date=2012-03-01|author=曾巨威|title=讓「癌細胞」變為「愛細胞」的故事|journal=水泥地播種(財團法人礦工兒子教育基金會會刊)|issue=6|page=1|url=https://www.sol.org.tw/upload/1490766371.pdf|accessdate=8 May 2024|archiveurl=https://web.archive.org/web/20240508065542/https://www.sol.org.tw/upload/1490766371.pdf|archivedate=8 May 2024}}
#*: {{zh-q|過去 幾年,^蔡 董事長{zhǎng} 已經 走-遍-了 全國 的 育幼院,下 一 步,他 決定 要 走進 ^台灣 每 一.個 癌症 病院,傳達 他 對 生命 的 堅持,對 生命 的 樂{lè}觀,以及 對 生命 的 怡然自處。}}
#* {{quote-book|zh|year=2017|editors=李兆華; 潘佩璆; 潘裕輝|quotee=沈秉韶|chapter=上善若水潤物無聲|title=《戰後香港精神科口述史》|location=Hong Kong|publisher=Joint Publishing (H.K.) Co., Ltd.|isbn=978-962-04-4197-4|page=77|pageurl=https://books.google.com/books?id=N19WDwAAQBAJ&pg=PA77}}
#*: {{zh-q|青山 醫院 未 啟用 之前,精神科 病院{jyun6-2} 就是 戒毒 中心。||C-LIT}}
#* {{quote-book|zh|author=巩守平; 康芳琴|chapter=医院对外宣传工作的实践与思考|title=西安交通大学发展研究报告<t:Research Report on Development of Xi’an Jiaotong University>|page=44|url=http://zys.xjtu.edu.cn/8_8.pdf}}
#*: {{zh-q|医院 成立-了 皮肤 病院、耳 鼻 咽喉 头颈 外科 病院、肿瘤 病院、儿童 病院 四 个 院-中-院,以 充分 发挥 学科 特色 优势,更好 地{de} 为 广大 患者 提供 医疗.保健 服务。|simp=y}}
# {{lb|zh|dated|or|dialectal|now|chiefly|Dungan|Taiwanese Hokkien|Taiwanese Hakka|Taishanese}} [[醫院]]
#* {{zh-x|^廣州 商旅 所 聚,疾疫 作,客 先 僵仆,因 薰染 居 者,事 與 ^杭 相類。莫 可 擘劃 一 病院,要 須 有 歲入 課利 供 之,乃 長久 之 利,試 留意。||CL|ref='''11世紀''',{{w|蘇軾}}《[[s:與王敏仲八首(之四)|與王敏仲八首(之四)]]》}}
#* {{zh-x|又 有 病院,大城 多 至 數 十 所,有 中 下 院,處{chǔ} 中 下 人,有 大人 院,處{chǔ} 貴人。||CL|ref='''1623'''年,{{w|艾儒略}}《{{w|職方外紀}}》}}
#* {{quote-book|zh|year=1947|editor=國立中山大學學生工作委員會|chapter=慰勞歌|title=《血債——「五·卅一」紀念手册》|page=87}}
#*: {{zh-q|你們 正 爲着{zhe} 全國 的 老百姓,喊-出-了 嘹亮 的 正義 呼聲,受-了 極 名譽 的 傷,剛 從 那 病院 裏 出來}}
====同義詞====
* {{s|醫院}}
{{zh-dial|醫院}}
{{C|zh|醫學|建築}}
==日語==
{{ja-kanjitab|びょう|いん|yomi=goon,kan}}
{{swp|ja:}}
===詞源===
來自{{ja-com|病|びょう|院|-いん|t2=[[機構]]|sort=ひょういん'}}。
===發音===
{{ja-pron|acc=0|acc_ref=DJR|a=Ja-byouin-hospital.ogg|びょういん}}
===名詞===
{{ja-noun|びょういん|hhira=びやうゐん}}
# [[醫院]]
#: {{ja-x|'''病院'''へ[[連れる|連れて]]行って下さい。|'''びょういん''' へ つれて いって ください。|請送我去'''醫院'''。}}
====派生語彙====
* {{desc|bor=1|chk|pioing}}
* {{desc|bor=y|jje|벵완}}
* {{desc|bor=y|ko|병원(病院)}}
* {{desc|bor=1|pon|pioing}}
* {{desc|bor=y|nan-hbl|病院}}
===來源===
<references/>
* {{R:Kanjipedia Kotoba|0005958000}}
{{topics|ja|建築|健康照護|機構|sort=ひょういん'}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=병원}}
# {{hanja form of|병원|[[醫院]]}}
==越南語==
{{vi-hantutab|病|院}}
===名詞===
{{vi-noun|sc=Hani}}
# {{vi-Han form of|bệnh viện|[[醫院]]}}
gf3wzhaag02ph8ou3vobsymaljg4k4l
赤背
0
586367
9758521
6779711
2026-05-13T07:04:51Z
Fglffer
55252
9758521
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=chìbèi
|c=cek3 bui3
|cat=v
}}
===動詞===
{{zh-verb|type=vo}} {{tlb|zh|intransitive}}
# [[赤膊]]
====同義詞====
{{zh-dial|赤膊}}
qtlr962zqkgedm8qypx4h2knbkgkniw
赤膊
0
586369
9758522
6779713
2026-05-13T07:08:18Z
Fglffer
55252
9758522
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{wp|zh:}}
===發音===
{{zh-pron
|m=chìbó
|c=cek3 bok3
|h=pfs=chhak-pok;gd=cag5 bog5
|mn=xm,zz:chhek-pok/qz:chhiak-pok/xm:chhek-phok
|w=sh:7tshaq poq7
|cat=v,n
}}
===動詞===
{{zh-verb|type=vo}}
# [[裸露]][[上身]]
====同義詞====
{{zh-dial}}
====衍生詞====
{{col3|zh|赤膊上陣}}
===名詞===
{{head|zh|名詞}}
# [[赤裸]]的上身
====衍生詞====
{{col3|zh|打赤膊}}
2viw7lt9u7e9cpvpavo3bx7i8e824mu
赤膊上陣
0
586371
9758523
7618146
2026-05-13T07:08:58Z
Fglffer
55252
Fglffer移动页面[[赤膊上阵]]至[[赤膊上陣]],不留重定向
7618146
wikitext
text/x-wiki
==漢語==
===寫法===
{{漢語寫法|简=[[赤]][[膊]][[上]][[阵]]|正=}}
===讀音===
{{zh-pron|m=chìbóshàngzhèn}}
===翻譯===
{{翻译-顶}}
*德语:
*英语:
*西班牙语:
*葡萄牙语:
*法语:
*意大利语:
*俄语:[[идти]] [[в]] [[бой]] [[обнажённым]] [[до]] [[пояса]] (''[[обр.]]'' [[в]] знач. [[сбросить]] [[с]] [[себя]] [[маску]], [[действовать]] [[в]] [[открытую]])
*日语:
*韩语:
*越南语:
{{翻译-底}}
mhcxk1on1urpcuq67eqeg0u839py0s3
9758525
9758523
2026-05-13T07:13:20Z
Fglffer
55252
9758525
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=赤膊上阵|type=22}}
===發音===
{{zh-pron
|m=chìbóshàngzhèn
|c=cek3 bok3 soeng5 zan6
|mn=xm:chhek-phok-siōng-tīn
|cat=cy
}}
===成語===
{{head|zh|成語}}
# 光著[[膀子]][[戰鬥]]
# {{lb|zh|figurative}} [[全力以赴]],[[勇往直前]];毫無[[保留]]、[[隱瞞]]的做事(多指[[壞事]])
laf356npfu3udzkffczuxeznamwnhck
串親戚
0
591315
9758120
8121763
2026-05-12T21:12:25Z
Fglffer
55252
9758120
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=串亲戚|type=12}}
===發音===
{{zh-pron
|m=chuàn qīnqī,tl=y
|c=cyun3 can1 cik1
|j=cuan3 qing1 qing3
|cat=v
}}
===動詞===
{{zh-verb|type=vo1}}
# [[走親戚]]
====同義詞====
{{zh-dial|走親戚}}
oeallhr99fa35f43xe7mjodchlqekhy
翻篇
0
617590
9758111
6811404
2026-05-12T20:15:52Z
Fglffer
55252
9758111
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=fānpiān
|cat=v
}}
===動詞===
{{zh-verb}}
# 某件[[事情]][[已經]][[過去]],不再[[提及]]和[[糾結]]
99ryvejhclw557yf61xkr6b887i7x9z
計數
0
636887
9758115
8191694
2026-05-12T20:43:17Z
Fglffer
55252
9758115
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=计数}}
===發音1===
{{zh-pron
|m=jìshù
|c=gai3 sou3
|mn=kè-sò͘
|cat=v,n
}}
====動詞====
{{zh-verb|type=vo}}
# [[數數]]
# {{lb|zh|Cantonese|intransitive}} [[計算]]
# {{lb|zh|Cantonese}} [[算賬]]
=====同義詞=====
{{zh-dial|算賬}}
=====衍生詞=====
{{col3|zh|計數器|計數機}}
===發音2===
{{zh-pron
|m=jìshǔ
|c=gai3 sou2
|cat=v
}}
====動詞====
{{zh-verb}}
# {{lb|zh|literary|transitive}} [[算]]
=====同義詞=====
{{zh-dial|算}}
==日語==
{{ja-kanjitab|けい|すう|yomi=o}}
===名詞===
{{ja-noun|けいすう}}
# {{ja-kyu sp|計数}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=계수}}
# {{hanja form of|계수}}
28lgan58sk7w0lbjsyi6zl47d0zpgxy
記功
0
636921
9758116
8191807
2026-05-12T20:46:34Z
Fglffer
55252
9758116
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=记功}}
===發音===
{{zh-pron
|m=jìgōng
|h=pfs=ki-kûng;hrs=h:giˇ gungˋ
|mn=kì-kong
|mc=y
|oc=y
|cat=v
}}
===動詞===
{{zh-verb|type=vo}}
# [[記載]][[功績]]
e8xu1jmacw2uv1lpsam5cj478x8aaxj
記過
0
636924
9758117
8192045
2026-05-12T20:48:37Z
Fglffer
55252
9758117
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=记过}}
===發音===
{{zh-pron
|m=jìguò
|c=gei3 gwo3
|h=pfs=ki-ko;hrs=h:giˇ goˇ
|mn=qz:kì-kò͘/tw,xm,zz:kì-kò
|cat=v
}}
===動詞===
{{zh-verb|type=vo}}
# [[記載]][[過失]]
pz34vvf1fw1pnb5ihhfx766sykt1jdw
落地窗
0
669039
9758112
9060003
2026-05-12T20:21:44Z
Fglffer
55252
9758112
wikitext
text/x-wiki
==漢語==
{{zh-forms|type=21}}
===發音===
{{zh-pron
|m=luòdìchuāng
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[下端]]直到[[地面]]或[[樓板]]的[[窗子]]{{zh-mw|m:扇}}
cj0kfb5e2z3p6v94qlv743fq4jv7mrn
9758142
9758112
2026-05-13T03:20:12Z
Sayonzei
40728
9758142
wikitext
text/x-wiki
==漢語==
{{zh-forms|type=21}}
===發音===
{{zh-pron
|m=luòdìchuāng
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[下端]]直到[[地面]]或[[樓板]]的[[窗子]]{{zh-mw|m:扇}}
{{c|zh|建築學}}
sqpf8u2nfhlh7zskdo6kvh6i672xede
ưu du
0
672926
9758093
6723885
2026-05-12T15:11:37Z
TongcyDai
53191
9758093
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|優||遊}}。
===發音===
{{vi-IPA}}
===形容詞===
{{vi-adj}}
# {{lb|vi|書面|rare}} [[優遊]][[自在]]的
===副詞===
{{vi-adv}}
# {{lb|vi|書面|rare}} [[優遊]][[自在]]地
myem0u7hkfhry18xkpctk07iosy1799
ưu đãi
0
672927
9758094
6723886
2026-05-12T15:14:43Z
TongcyDai
53191
9758094
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|優待}}。
===發音===
{{vi-IPA}}
===動詞===
{{vi-verb}}
# [[優待]],[[優先]]
#: {{uxi|vi|quyền '''ưu đãi'''|'''優先'''權}}
===名詞===
{{vi-noun}}
# {{lb|vi|chiefly|商業}} [[優待]],[[優惠]]
#: {{uxi|vi|'''ưu đãi''' cho khách hàng thân thiết|忠實客戶'''優惠'''}}
mc0dhhqyw4m16yjez1iavpsnfygadbi
ưu điểm
0
672928
9758086
7577696
2026-05-12T15:07:48Z
TongcyDai
53191
9758086
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|優點}}。
===發音===
{{vi-IPA}}
===名詞===
{{vi-noun}}
# [[優點]]
#: {{ant|vi|nhược điểm|khuyết điểm}}
30ysytdv27piliokw22gxfts03txynb
ưu phiền
0
672940
9758095
6723899
2026-05-12T15:15:25Z
TongcyDai
53191
9758095
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|憂||煩}}。
===發音===
{{vi-IPA}}
===名詞===
{{vi-noun}}
# [[憂煩]]
===形容詞===
{{vi-adj}}
# {{lb|vi|rare}} [[悲傷]]的;[[憂慮]]的;[[擔憂]]的
pgnmx2q1i2kk0pj9jqanc2ejq2tzs7w
ưu sầu
0
672942
9758096
6723901
2026-05-12T15:16:10Z
TongcyDai
53191
9758096
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|憂||愁}}。
===發音===
{{vi-IPA}}
===形容詞===
{{vi-adj}}
# [[憂愁]]的
===名詞===
{{vi-noun}}
# [[憂愁]]
arclczs5g2xpk6lrgvjy0v6os88ejjv
ưu tú
0
672944
9758087
6006967
2026-05-12T15:08:32Z
TongcyDai
53191
9758087
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|優秀}}。
===發音===
{{vi-IPA}}
===形容詞===
{{vi-adj}}
# [[優秀]]的
q6rgw88nineysm7vlfoprrli1cnrdzn
ưu tư
0
672946
9758097
6723904
2026-05-12T15:17:04Z
TongcyDai
53191
9758097
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|憂||思}}。
===發音===
{{vi-IPA}}
===形容詞===
{{vi-adj}}
# [[心事重重]]的,[[哀思]]的
===名詞===
{{vi-noun}}
# [[憂思]]
g56lupxdswi0frdvj95ofyqcts5zqcn
ưu thế
0
672947
9758090
6723905
2026-05-12T15:10:04Z
TongcyDai
53191
9758090
wikitext
text/x-wiki
==越南語==
===發音===
{{vi-IPA}}
===詞源1===
{{vi-etym-sino|優勢}}。
====名詞====
{{vi-noun}}
# [[優勢]]
===詞源2===
{{vi-etym-sino|憂世}}。
====名詞====
{{vi-noun}}
# [[憂世]]
ttkfkwd9u4ba0vc5qm6y37s4avz1z7d
アフガニスタン
0
704853
9758586
5469139
2026-05-13T08:22:22Z
Sayonzei
40728
9758586
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|alt=亜富汗斯坦:obsolete}}
{{wp|ja:}}
===發音===
{{ja-pron|アフガニスタン|dev=5|acc=4|acc_ref=NHK}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|cont/亞洲|t=阿富汗}}
====相關詞彙====
* {{ja-r|アフガン}}
===參考資料===
<references/>
qq0atveyy77a4qvgba2yl7pawb1m13x
イエメン
0
705950
9758590
5469352
2026-05-13T08:24:14Z
Sayonzei
40728
9758590
wikitext
text/x-wiki
==日語==
{{swp|ja:}}
===發音===
* {{ja-pron|acc=2}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|r/西亞|t=也門|t2=葉門}}
# {{lb|ja|historical|sort=いえめん}} {{w|也門王國}}
====近義詞====
* {{s|共和國}} {{ja-r|イエメン共和国|イエメン きょうわこく|caps=y}}
* {{s|王國}} {{ja-r|イエメン王国|イエメン おうこく|caps=y}}
c0fce1klv1bqcy8p18niqzbcp72ymmj
キプロス
0
712321
9758618
5440022
2026-05-13T08:34:17Z
Sayonzei
40728
9758618
wikitext
text/x-wiki
==日語==
{{wp|ja:}}
===詞源===
{{bor+|ja|el|Κύπρος}}。
===發音===
{{ja-pron|acc=a|acc_ref=NHK,SMK5|acc2=h|acc2_ref=NHK}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家/島|r/東南歐|or|r/西亞|t=塞浦路斯|t2=賽普勒斯}}
===參考資料===
<references />
bp9xqd9zit8j1tdwf40jk6ya5xuny15
クウェート
0
713148
9758598
5424050
2026-05-13T08:26:51Z
Sayonzei
40728
9758598
wikitext
text/x-wiki
==日語==
{{swp|ja:}}
===發音===
{{ja-pron|acc=2|acc2=0|acc_ref=NHK,SMK5|acc2_ref=SMK5}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|r/西亞|t=科威特}}
===參考資料===
<references/>
hutotemgku6nbdejzjxf8vkq9kt7061
トルコ
0
736702
9758604
7997819
2026-05-13T08:28:36Z
Sayonzei
40728
/* 派生詞彙 */
9758604
wikitext
text/x-wiki
==日语==
{{DEFAULTSORT:とるこ}}
{{ja-kanjitab|alt=土耳古}}
{{wikipedia|lang=ja}}
===詞源===
源自{{der|ja|pt|turco||土耳其的/人}}。<ref>{{R:Kokugo Dai Jiten}}</ref><ref>{{R:Daijisen}}</ref><ref>{{R:Kojien}}</ref><ref>{{R:Daijirin}}</ref>
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|位於<<r/東南歐>>和<<r/西亞>>交界處、南臨<<sea/地中海>>的<<國家>>|t=土耳其}}
====派生詞彙====
{{der3|ja
| {{ja-r|トルコ帽|トルコ ぼう}}
| {{ja-r|トルコ赤|トルコ あか}}
| {{ja-r|トルコ石|トルコ いし}}
| {{ja-r|トルコ革%命|トルコ かく%めい}}
| {{ja-r|トルコ桔%梗|トルコ ぎ%きょう}}
| {{ja-r|トルコ語|トルコ ご}}
| {{ja-r|トルコ行%進%曲|トルコ こう%しん%きょく}}
| {{ja-r|トルコ コーヒー}}
| {{ja-r|トルコ タバコ}}
| {{ja-r|トルコ玉|トルコ だま}}
| {{ja-r|トルコ風%呂|トルコ ぶ%ろ}}
| {{ja-r|トルコ帽|トルコ ぼう}}
}}
===參見===
* {{ja-r|トルコ共%和%国|^トルコ ^きょう%わ%こく}}
* {{ja-r|ターキー}}
===參考資料===
<references/>
f4ucaqki7pl0x1nnysrxykz6jmc4m0z
ブルガリア
0
744898
9758623
5473595
2026-05-13T08:35:28Z
Sayonzei
40728
9758623
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|alt=勃牙利:obsolete,勃爾瓦利:obsolete}}
{{wp|ja:}}
===發音===
* {{ja-pron|acc=h|acc_ref=SMK5}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|r/東南歐|t=保加利亞}}
===參考資料===
<references/>
{{cln|ja|外名}}
7esixtosyvb3tp2baml8c8c8j4be61b
もくろむ
0
751836
9758538
1749249
2026-05-13T07:53:59Z
Sayonzei
40728
9758538
wikitext
text/x-wiki
==日語==
{{ja-see|目論む}}
t1wxs6dkgj8m5iuxzz01ms9cr1ut3fr
мудрый
0
854726
9758147
9538476
2026-05-13T04:12:36Z
Sayonzei
40728
/* 形容詞 */
9758147
wikitext
text/x-wiki
==俄語==
===詞源===
{{inh+|ru|orv|мудръ}},來自{{inh|ru|sla-pro|*mǫdrъ}},來自{{inh|ru|ine-bsl-pro|*mandras}},來自{{inh|ru|ine-pro|*mondʰh₁ros}},來自{{af|ine-pro|*men(s)dʰh₁-|*-rós|nocat=1}}。與{{cog|lt|mandrùs}}和{{cog|gem-pro|*mundraz}} ({{cog|de|munter}})同源。
===發音===
* {{ru-IPA|му́дрый}}
* {{audio|ru|Ru-мудрый.ogg}}
===形容詞===
{{ru-adj|му́дрый|+c'}}
# [[英明]]的;有[[智慧]]的
#: {{ux|ru|[[тренер|Тре́неры]] [[у]] [[команда|кома́нды]] [[молодой|молоды́е]], [[но]] [[уже́]] '''му́дрые'''.|这支球队的教练们虽然年轻,但已经验丰富。|ref=[http://24news.ru/news/sports/895894773s.html]}}
====變格====
{{ru-decl-adj|му́дрый|c'}}
====衍生詞====
* {{l|ru|му́дрость}}
* {{l|ru|мудри́ть}}
* {{l|ru|умудря́ться|g=impf}}, {{l|ru|умудри́ться|g=pf}}
* {{l|ru|мудрёный}}
* {{l|ru|мудре́ц}}
* {{l|ru|целому́дрие}}
====派生詞====
* {{desc|izh|muudra|bor=1}}
* {{desc|sah|муударай|bor=1}}
===來源===
* {{R:ru:Vasmer}}
qkz02q2pd9ruu5121pj373w6xuzb7tj
水素
0
916052
9758079
8296769
2026-05-12T12:26:57Z
TongcyDai
53191
9758079
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
===發音===
{{zh-pron
|m=shuǐsù
|mn=chúi-sò͘
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|rare|主要|臺灣話}} [[氫]]
#* {{zh-x|酸素 和 水素 造成 的 純一-無-雜 的 水,這樣 的 東西,如果 是 有 生命 的 自然界 中,是 不 存在 的。||MSC|ref={{w|魯迅}}《[[s:出了象牙之塔|出了象牙之塔]]》,翻譯自{{w|廚川白村}}的書「{{lang|ja|象牙の塔を出て}}」}}
#* {{zh-x|卵白{pe̍h}質,伊 ê 成分 是 炭{Thàn}素,'''^水素''',^酸素,窒{Chek}素,伊 ê 路用 是 會{ōe} hō͘ 人 ê 身軀 得{tit}著[着] 勢{sè}力{le̍k},也 是 hō͘ 細胞 加{ke}添 新 %ê。|蛋白質的成份是碳、'''氫'''、氧、氮,其用途是給人的身體提供能量,也增加新的細胞。|TW|ref='''1926''', {{lang|zh|張基全}} (Tiuⁿ Ki-chôan), [http://210.240.194.97/nmtl/dadwt/thak.asp?id=513&kw=%B2%BF%AF%C0 {{lang|zh|酒佮健康}} (Chiú kap Kiān-khong)]}}
====同義詞====
* {{zh-l|氫}}
===來源===
* {{R:nan:tdj|14979|v=2|p=327}}
{{zh-cat|化學元素}}
==日語==
{{ja-kanjitab|すい|そ|yomi=o}}
{{elements|ja|H|||{{ja-r|ヘリウム}}|He|sort=すいそ}}
{{swp|lang=ja}}
===詞源===
{{cal|ja|nl|waterstof|lit=水-物質|sort=すいそ}},等同於{{com|ja|水|素|tr1=sui|tr2=so|t2=[[元素]]|sort=すいそ}}。對照{{cog|de|Wasserstoff}}、{{cog|lb|Waasserstoff}}。
{{coinage|ja|宇田川榕庵|w=:ja:宇田川榕菴|in=1834年|nat=日本|occ=科學家}},最早用於其著作[http://www.wul.waseda.ac.jp/kotenseki/html/ya09/ya09_00857_0037/index.html 遠西医方名物考補遺]([http://archive.wul.waseda.ac.jp/kosho/ya09/ya09_00857/ya09_00857_0044/ya09_00857_0044_p0012.jpg “水素”])。
===發音===
{{ja-pron|すいそ|acc=1|acc_ref=DJR,NHK}}
===名詞===
{{ja-noun|すいそ}}
# [[氫]]
# 氫分子
====衍生詞====
{{der-top}}
* {{ja-r|塩%化 水%素|えん%か すい%そ}}
* {{ja-r|過%酸%化 水%素|か%さん%か すい%そ}}
* {{ja-r|軽%水%素|けい%すい%そ}}
* {{ja-r|原%子 水%素 溶%接|げん%し すい%そ よう%せつ}}
* {{ja-r|三%重 水%素|さん%じゅう すい%そ}}
* {{ja-r|酸%水%素%炎|さん%すい%そ%えん}}
* {{ja-r|シアン化 水%素|シアンか すい%そ}}
* {{ja-r|臭%化 水%素|しゅう%か すい%そ}}
* {{ja-r|重%水%素|じゅう%すい%そ}}
* {{ja-r|水%素 イオン|すい%そ イオン}}
* {{ja-r|水%素 エネルギー|すい%そ エネルギー}}
* {{ja-r|水%素%化|すい%そ%か}}
* {{ja-r|水%素 吸%蔵 合%金|すい%そ きゅう%ぞう ごう%きん}}
* {{ja-r|水%素 結%合|すい%そ けつ%ごう}}
* {{ja-r|水%素 細%菌|すい%そ さい%きん}}
{{der-mid}}
* {{ja-r|水%素 ステーション|すい%そ ステーション}}
* {{ja-r|水%素 貯%蔵 合%金|すい%そ ちょ%ぞう ごう%きん}}
* {{ja-r|水%素 添%加|すい%そ てん%か}}
* {{ja-r|水%素 電%極|すい%そ でん%きょく}}
* {{ja-r|水%素 爆%弾|すい%そ ばく%だん}}
* {{ja-r|水%素 爆%鳴%気|すい%そ ばく%めい%き}}
* {{ja-r|脱%水%素|だっ%すい%そ}}
* {{ja-r|炭%化 水%素|たん%か すい%そ}}
* {{ja-r|ニッケル 水%素 電%池|ニッケル すい%そ でん%ち}}
* {{ja-r|砒%化 水%素|ひ%か すい%そ}}
* {{ja-r|弗%化 水%素|ふっ%か すい%そ}}
* {{ja-r|沃%化 水%素|よう%か すい%そ}}
* {{ja-r|硫%化 水%素|りゅう%か すい%そ}}
* {{ja-r|燐%化 水%素|りん%か すい%そ}}
{{der-bottom}}
====派生語彙====
* {{desc|bor=y|ko|수소}}
* {{desc|bor=y|nan-hbl|水素|tr=chúi-sò͘}}
===來源===
<references/>
:* {{R:Shogakukan}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=수소}}
# {{hanja form of|수소|氫}}
rr42o0nvhc7t1s1h01uxel1z3pve9is
企図
0
927459
9758537
6687926
2026-05-13T07:53:15Z
Sayonzei
40728
9758537
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|き|と|yomi=o}}
===發音===
{{ja-pron|きと|acc=1|acc2=2|acc_ref=DJR|acc2_ref=DJR}}
===名詞===
{{ja-noun|きと}}
# [[企圖]],[[意圖]]
====近義詞====
* {{ja-r|目%論%見|もく%ろ%み}}
===動詞===
{{ja-verb-suru|tr=trans|きと}}
# [[企圖]]
====活用====
{{ja-suru|きと}}
====近義詞====
* {{ja-r|目%論む|もく%ろむ}}
* {{ja-r|企てる|くわだてる}}
===參考資料===
<references/>
:* {{R:Kanjipedia Kotoba|0001179700}}
p6wf0frvd4szp4yedquz0lfgh1jee7t
帰途
0
929077
9758540
7724964
2026-05-13T07:56:26Z
Sayonzei
40728
9758540
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|き|と|yomi=o}}
===發音===
{{ja-pron|きと|acc=1|acc2=2|acc_ref=DJR,NHK,SMK7,NKD2|acc2_ref=DJR,NHK,SMK7,NKD2}}
===名詞===
{{ja-noun|きと}}
# [[歸途]]
====近義詞====
* {{ja-r|帰路|きろ}}
* {{ja-r|帰り道|かえりみち}}
===參考資料===
<references/>
cpdjklw6upi14p0zb69xr8g8poalxgl
計数
0
936945
9758113
7682348
2026-05-12T20:41:30Z
Fglffer
55252
9758113
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|けい|すう|yomi=o}}
===發音===
{{ja-pron|けいすう|acc=3|acc_ref=DJR}}
===名詞===
{{ja-noun|けいすう}}
# [[計算]]得到的[[數字]]
===來源===
<references/>
* {{R:Kanjipedia Kotoba|0001770700}}
71quf28vx7slcww4bn62l691qc9ytfa
9758144
9758113
2026-05-13T03:26:38Z
Sayonzei
40728
/* 日語 */
9758144
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|けい|すう|yomi=o}}
===發音===
{{ja-pron|けいすう|acc=3|acc_ref=DJR}}
===名詞===
{{ja-noun|けいすう}}
# [[計算]];或指計算得到的[[數字]]
# {{lb|ja|accounting}} [[會計]];[[算賬]]
====衍生詞====
* {{ja-r|計%数%器|けい%すう%き}}
* {{ja-r|計数管|けいすうかん}}
* {{ja-r|計数 管%理|けいすう かん%り}}
===來源===
<references/>
* {{R:Kanjipedia Kotoba|0001770700}}
owgu7d9qgvcc2f2ke4jbcqhubal2fe3
個人
0
938612
9758104
9253501
2026-05-12T17:48:06Z
Jiba1219
110530
/* 日語 */
9758104
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=个人}}
===發音===
{{zh-pron
|m=gèrén
|c=go3 jan4
|h=pfs=ke-ngìn
|mn=xm,qz,tp,sg:kò-lîn/zz,kh:kò-jîn
|mn-t=go6 ring5/go6 rêng5
|mn-t_note=go6 rêng5 - 揭陽
|ma=y
|w=sh:5ku gnin,5ku zen,7keq gnin
|ca=LL-Q9186-Luilui6666-个人.wav
|cat=n,a,pron
}}
{{rfp|nan-tws|gai nang ([[個儂]]) [https://www.bilibili.com/video/BV1b7411b7t8/] 1:38}}
===名詞===
{{head|zh|名詞}}
# [[單獨]]一個人
#: {{ant|zh|集體|團體}}
# {{lb|zh|literary}} 那人,彼人{{gl|多指所愛的人}}
#* {{zh-x|因 念 舊日 山城,個人 如 畫,已 作 ^中州 想。||CL|ref=宋·陈亮《念奴娇·至金陵》}}
#* {{zh-x|黯 凝佇。因 念 個人 痴小,乍 窺 門戶。||CL|ref=宋·{{w|周邦彥}}《瑞龍吟·章臺路》}}
====翻譯====
{{trans-top|單獨一個人}}
* 南非語:{{t+|af|individu}}
* 阿爾巴尼亞語:{{t+|sq|individ|m}}
* 阿拉伯語:{{t+|ar|فَرْد|m}}
* 亞美尼亞語:{{t+|hy|անհատ}}、{{t+|hy|առանձնյակ}} {{qual|生物學}}
* 阿塞拜疆語:{{t+|az|fərd}}
* 白俄羅斯語:{{t|be|індыві́д|m}}
* 孟加拉語:{{t+|bn|ব্যক্তি}}
* 保加利亞語:{{t+|bg|индиви́д|m}}
* 緬甸語:{{t+|my|ပုဂ္ဂိုလ်}}
* 加泰羅尼亞語:{{t+|ca|individu|m}}
* 捷克語:{{t+|cs|jedinec|m}}、{{t+|cs|jednotlivec|m}}
* 丹麥語:{{t+|da|individ|n}}
* 荷蘭語:{{t+|nl|enkeling|m}}、{{t+|nl|individu|n}}
* 英語:{{t+|en|individual}}
* 世界語:{{t|eo|unuopulo}}
* 愛沙尼亞語:{{t|et|indiviid}}
* 芬蘭語:{{t+|fi|yksilö}}
* 法語:{{t+|fr|individu|m}}
* 加利西亞語:{{t+|gl|individuo|m}}
* 格魯吉亞語:{{t|ka|პიროვნება}}、{{t|ka|ინდივიდი}}
* 德語:{{t+|de|Individuum|n}}
* 希臘語:{{t+|el|άτομο|n}}
* 希伯來語:{{t+|he|פרט|m}} (prat)
* 印地語:{{t+|hi|व्यक्ति|m}}
* 匈牙利語:{{t+|hu|individuum}}、{{t+|hu|egyén}}
* 伊多語:{{t+|io|individuo}}
* 意大利語:{{t+|it|individuo}}、{{t+|it|soggetto}}
* 日語:{{t+|ja|個人|tr=こじん, kojin}}、{{t+|ja|個体|tr=こたい, kotai}}
* 哈薩克語:{{t|kk|[[жеке]] [[тұлға]]}}、{{t|kk|[[жеке]] [[түр]]}}、{{t|kk|[[жеке]] [[адам]]}}
* 高棉語:{{t+|km|បុគ្គល}}
* 朝鮮語:{{t+|ko|개인(個人)}}、{{t|ko|개체(個體)}}
* 吉爾吉斯語:{{t|ky|индивидуум}}、{{t|ky|индивид}}
* 老撾語:{{t+|lo|ບຸກຄົນ}}、{{t|lo|ພົນ}}
* 拉丁語:{{t|la|indīviduum|n}}
* 拉脫維亞語:{{t|lv|indivīds|m}}
* 立陶宛語:{{t|lt|individas|m}}
* 馬其頓語:{{t|mk|индивидуа|f}}、{{t|mk|поединец|m}}
* 馬來語:{{t+|ms|individu}}
* 毛利語:{{t+|mi|tangata}}
* 納瓦霍語:{{t|nv|hwó}}
* 挪威語:
*: 書面挪威語:{{t+|nb|individ|n}}、{{t|nb|enkeltperson|m}}、{{t+|nb|menneske|n}}
*: 新挪威語:{{t|nn|individ|n}}、{{t|nn|enkeltperson|m}}
* 巴利語:{{t|pi|puggala|m}}
* 普什圖語:{{t+|ps|فرد|m|tr=fard}}
* 波斯語:{{t+|fa|فرد|tr=fard}}
* 門諾低地德語:{{t+|pdt|Persoon|f}}
* 波蘭語:{{t+|pl|indywiduum|n}}、{{t+|pl|jednostka|f}}
* 葡萄牙語:{{t+|pt|indivíduo|m}}
* 羅馬尼亞語:{{t+|ro|individ}}
* 俄語:{{t+|ru|индиви́дуум|m}}、{{t+|ru|лицо́|n}}、{{t+|ru|ли́чность|f}}、{{t+|ru|осо́ба|f}}、{{t+|ru|индиви́д|m}}、{{t+|ru|персо́на|f}}、{{t+|ru|о́собь|f}} {{qualifier|生物學}}
* 梵語:{{t+|sa|व्यक्ति|m}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|поједи́нац|m}}、{{t|sh|поједи́нка|f}}、{{t|sh|индиви́дуа|f}}
*: 拉丁字母:{{t+|sh|pojedínac|m}}、{{t|sh|pojedinka|f}}、{{t+|sh|indivídua|f}}
* 斯洛伐克語:{{t|sk|jedinec|m}}、{{t|sk|jednotlivec|m}}
* 斯洛文尼亞語:{{t+|sl|posameznik|m}}、{{t|sl|posameznica|f}}
* 西班牙語:{{t+|es|individuo|m}}
* 瑞典語:{{t+|sv|individ|c}}、{{t+|sv|enskild|c}}
* 塔吉克語:{{t|tg|фард}}
* 泰盧固語:{{t+|te|వ్యక్తి}}
* 泰語:{{t+|th|บุคคล}}
* 土耳其語:{{t+|tr|birey}}
* 烏克蘭語:{{t+|uk|індиві́д|m}}、{{t|uk|індиві́дуум|m}}
* 烏爾都語:{{t|ur|فرد|tr=fard}}
* 烏茲別克語:{{t+|uz|fard}}、{{t+|uz|individuum}}
* 越南語:{{t+|vi|cá nhân}}、{{t+|vi|cá thể}}
* 威爾士語:{{t+|cy|unigolyn|m}}
{{trans-bottom}}
===形容詞===
{{head|zh|形容詞}}
# {{lb|zh|attributive}} 屬於個人的;有關個人的
#: {{zh-x|個人 數據|}}
#: {{zh-x|請 保管 好 個人 物品。|}}
#: {{zh-x|她 總是 有意無意 問 起 他 個{gè}人 感情 經歷。|}}
====衍生詞====
{{col3|zh|個人崇拜|個人數碼助理|個人所得稅|個人衛生|個人化|個人主義|個人英雄主義|個人照}}
===代詞===
{{head|zh|代詞}}
# [[自己]];[[我]],[[本人]]
====近義詞====
{{syn-saurus|zh|自身}}
===派生語詞===
{{CJKV||j=個%人|こ%じん|개인|cá nhân}}
{{zh-cat|Elementary}}
{{C|zh|人}}
==日語==
{{ja-kanjitab|こ|じん|yomi=kan,kanon|alt=箇人}}
{{swp|lang=ja}}
===詞源===
{{ja-r|一%個%人|いっ%こ%じん}} 或 {{ja-r|各%個%人|かく%こ%じん}}的縮寫,源自{{ja-r|[[一%個]][[の#詞源2|の]][[人]]|いっ%こ の ひと}},{{calque|ja|en|individual|sort=こじん|nocap=y}}。<ref name="DJR"/><ref name="DDJS">{{R:ja:DDJS}}</ref>
在{{lang|ja|[https://dl.ndl.go.jp/pid/752943/1/43 英独仏和哲学字彙]}} (''Ei-Doku-Futsu-Wa Tetsugaku Jii'') 中被列為{{cog|en|individual}} 的翻譯。<ref name="DJR"/>
===發音===
{{ja-pron|こじん|acc=1|acc_ref=NHK,SMK7,DJR}}
===名詞===
{{ja-noun|こじん|hhira=こじん}}
# 個人
====派生詞====
{{col2-u|ja
|{{ja-r|個%人%営%業|こ%じん% えい%ぎょう}}
|{{ja-r|個%人%企%業|こ%じん% き%ぎょう}}
|{{ja-r|個%人%競%技|こ%じん% きょう%ぎ}}
|{{ja-r|個%人%教%授|こ%じん% きょう%じゅ}}
|{{ja-r|個%人%空%間|こ%じん% くう%かん}}
|{{ja-r|個%人%経%営|こ%じん% けい%えい}}
|{{ja-r|個%人%語|こ%じん%ご}}
|{{ja-r|個%人%差|こ%じん%さ}}
|{{ja-r|個%人%再%生|こ%じん% さい%せい}}
|{{ja-r|個%人%主%義|こ%じん% しゅ%ぎ}}
|{{ja-r|個%人%情%報|こ%じん% じょう%ほう}}
|{{ja-r|個%人%心%理%学|こ%じん% しん%り%がく}}
|{{ja-r|個%人%葬|こ%じん%そう}}
|{{ja-r|個%人%通%報|こ%じん% つう%ほう}}
|{{ja-r|個%人%手%形|こ%じん% て%がた}}
|{{ja-r|個%人%的|こ%じん%てき}}
|{{ja-r|個%人%輸%入|こ%じん% ゆ%にゅう}}
|{{ja-r|個%人%倫%理|こ%じん% りん%り}}
}}
===參考資料===
<references/>
==朝鮮語==
{{ko-hanjatab|個|人}}
===名詞===
{{ko-noun|rv=gaein|hangeul=개인}}
# {{hanja form of|개인|個人}}
==越南語==
{{vi-hantutab}}
===形容詞===
{{vi-adj|sc=Hani}}
# {{vi-Han form of|cá nhân|}}
===名詞===
{{vi-noun|sc=Hani}}
# {{vi-Han form of|cá nhân|[[個人]]}}
tahvhb741ds4n0dzec15o9pjpw2gggt
通常
0
943264
9758520
7885566
2026-05-13T06:34:56Z
Jiba1219
110530
/* 日语 */
9758520
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===讀音===
{{zh-pron
|m=tōngcháng
|c=tung1 soeng4
|h=pfs=thûng-sòng
|mn=xm,qz,tw:thong-siông/zz:thong-siâng
|cat=a,adv}}
===釋義===
# {{rfdef|zh}}
===翻譯===
{{翻译-顶}}
{{翻译-底}}
==日语==
{{ja-kanjitab|つう|じょう|yomi=goon}}
===讀音===
{{ja-pron|つうじょう|acc=h|acc_ref=NHK,DJR}}
通常【つうじょう】
普通,通常。
通常国会
定期国会(每年十二月上旬召开)。
[[Category:日語]]
[[Category:待分類的漢語詞]]
[[Category:漢語|辵07巾08]]
1iv6hh9e6189f7rqze3uumqimlplcee
lenticchia
0
955431
9757991
9000519
2026-05-12T12:10:21Z
TongcyDai
53191
9757991
wikitext
text/x-wiki
==意大利語==
[[Image:Lens culinaris seeds.jpg|thumb|right]]
===詞源===
{{inh+|it|VL.||*lenticla}},{{inh|it|la|lenticula}}({{m|la|lēns}} 的指小詞)的詞中略音形式。
===發音===
{{it-pr|lentìcchia}}
===名詞===
{{it-noun|f}}
# [[小扁豆]]
====派生詞彙====
* {{l|it|per un piatto di lenticchie||為了微不足道的利益/報酬|lit=為了一盤小扁豆}}
====相關詞彙====
* {{l|it|lente}}
===延伸閱讀===
* {{pedia|lens culinaris|lang=it}}
* {{R:it:Collins}}
* {{R:it:Treccani}}
{{C|it|豆科|蔬菜}}
lihkydt7uq8idquausrlhub7z0rcf66
veicolo
0
981873
9757995
7530199
2026-05-12T12:10:40Z
TongcyDai
53191
9757995
wikitext
text/x-wiki
{{also|veicolò}}
==意大利语==
===发音===
{{it-pr|veìcolo}}
===词源 1===
{{bor+|it|la|vehiculum}}。
====其他形式====
* {{alt|it|vehicolo||弃用}}
====名词====
{{it-noun|m}}
# [[载具]],[[车辆]]
# ([[细菌]]等的)[[载体]]
===词源 2===
{{nonlemma}}
====动词====
{{head|it|動詞變位形式}}
# {{inflection of|it|veicolare||1|s|pres|indc}}
{{C|it|交通工具}}
t0r2swmxc9gamos0uu1xq7mkwv8nszr
傍若無人
0
988860
9758010
9757902
2026-05-12T12:13:46Z
Sayonzei
40728
/* 日語 */
9758010
wikitext
text/x-wiki
==漢語==
{{zh-see|旁若無人|v}}
==日語==
{{ja-kanjitab|ぼう|じゃく|ぶ|じん|yomi=on}}
===發音===
{{ja-pron|ぼうじゃくぶじん|acc=0|acc_ref=NHK,DJR}}
{{ja-pron|ぼうじゃく ぶじん|acc=ぼうじゃく+ぶじん 0+0|acc_ref=SMK5}}
===形容詞===
{{ja-adj|infl=na|ぼうじゃくぶじん|hhira=ばうじやくぶじん}}
# [[無視]][[他人]],[[專斷獨行]]
====活用====
{{ja-na|ぼうじゃくぶじん}}
{{ja-conj-bungo|ぼうじゃくぶじん|adj-nar}}
===名詞===
{{ja-noun|ぼうじゃくぶじん|hhira=ばうじやくぶじん}}
# [[無視]][[他人]],[[專斷獨行]]
===來源===
* {{R:Kanjipedia Kotoba|0006446900}}
{{reflist}}
{{cln|ja|四字熟語}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=방약무인}}
# {{hanja form of|방약무인}}
==越南語==
{{vi-hantutab}}
===成語===
{{vi-pos|成語|sc=Hani}}
# {{vi-Han form of|bàng nhược vô nhân}}
dghh8fx1jaesn4cd9yzu9ta3e2vqxwb
予算
0
991519
9758549
7705311
2026-05-13T08:00:57Z
Sayonzei
40728
9758549
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|よ|さん|yomi=o}}
{{swp|ja:}}
===發音===
{{ja-pron|よさん|acc=0|acc2=1|acc_ref=SMK7,DJR|acc2_ref=SMK7}}
===名詞===
{{ja-noun|よさん}}
# [[預算]]
#: {{ja-uxi|'''予%算'''がない。|'''^よ%さん''' が ない。|沒有'''預算'''。}}
#: {{ja-uxi|'''予%算'''を超えた金%額|'''よ%さん''' を こえた きん%がく|超過'''預算'''的金額}}
# [[預算案]]
#: {{ja-uxi|'''予%算'''が成%立した。|'''^よ%さん''' が せい%りつ した。|'''預算案'''成立。}}
====派生詞彙====
{{col|ja
|{{ja-r|予%算%案|よ%さん%あん}}
|{{ja-r|予%算 委%員%会|よ%さん い.%いん%かい}}
|{{ja-r|予%算 管%理|よ%さん かん%り}}
|{{ja-r|予%算 折%衝|よ%さん せっ%しょう}}
|{{ja-r|予%算 先%議%権|よ%さん せん%ぎ%けん}}
|{{ja-r|予%算 措%置|よ%さん そ%ち}}
|{{ja-r|予%算 編%成|よ%さん へん%せい}}
}}
===參考資料===
<references/>
:* {{R:Kanjipedia Kotoba|0006908000}}
{{c|ja|經濟學|sort=よさん}}
ql7juk61nmxtcfezin7pggkqywvhval
𡭴
0
1030835
9758109
5742275
2026-05-12T20:09:51Z
Fglffer
55252
9758109
wikitext
text/x-wiki
{{character info}}
==跨語言==
===漢字===
{{Han char|rn=42|rad=小|as=7|sn=10|four=|canj=|ids=⿱小⿱日小}}
====來源====
* {{Han ref|kx=0297.170|dkj=|dj=|hdz=10564.130|sbgy=511.22|ch=4440004.01|uh=21B74}}
==漢語==
{{zh-forms|alt=𡭽,𡮂}}
===字源===
{{Han etym}}
===發音===
{{zh-pron
|m=xì
|mc=y
|oc=y
|cat=n
}}
===釋義===
{{head|zh|漢字}}
# [[牆壁]]上[[透光]]的小[[縫隙]]
lozgh8esgw2ddl0ykb7rs94so1hlkx4
豈有此理
0
1043439
9758080
9757915
2026-05-12T12:27:31Z
Sayonzei
40728
9758080
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=岂有此理|lit=哪裡有這樣的道理}}
===發音===
{{zh-pron
|m=qǐyǒu#cǐlǐ
|ma=Zh-qiyoucili.ogg
|c=hei2 jau5 ci2 lei5
|mn=khí-iú-chhú-lí
|mn-t=ki2 u6 ce2 li2/ka2 u6 ce2 li2
|cat=cy,a
}}
===成語===
{{head|zh|成語}}
# 表達[[憤怒]]之詞
#* {{zh-x|他 丈母 道:「豈有此理!你 一人 就 占 我 三 個 女兒 不成!」|ref=Xiyouji}}
====近義詞====
* {{qualifier|粵語}} {{zh-l|有冇搞錯}}
====派生詞彙====
{{col3|zh|豈有此佢}}
ph4mvqzqm6uqv1nypsu1qh1lidxw9pd
鎖匙
0
1069359
9758138
8298608
2026-05-13T01:49:04Z
Sṳnhien892
127220
/* 發音 */
9758138
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=锁匙}}
===發音===
{{zh-pron
|m=suǒchí,suǒshí,suǒshi,1nb=中國大陸標準,2nb=中國大陸異讀,3nb=台灣標準
|c=so2 si4
|c-t=lho2 si3
|g=so3 si
|h=pfs=só-sṳ́/só-sṳ̀;hrs=h:soˊ shi;gd=so3 si3/so3 si2
|mb=sǒ̤-ǐ
|md=sō̤-siè
|mn=ml,tp,kh,tn,lk,sx,yl,km,mg,hc,tc,jj,ph,sg,pn:só-sî
|mn-t=so2 si5
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|dialectal}} [[鑰匙]] {{zh-mw|c:條|c:抽|mn:支}}
# {{lb|zh|閩東語}} [[鎖]]
====同義詞====
{{zh-dial|鑰匙}}
{{zh-dial|鎖}}
====衍生詞====
{{der3|zh|鎖匙窿|鎖匙扣|鎖匙金|鎖匙佬}}
====派生詞====
* {{desc|bor=1|id|sosi}}
* {{desc|bor=1|tl|susi}}
a6u7gsrew3gpysiusw9pj94naatmluo
小茴香
0
1074340
9758107
6904728
2026-05-12T18:10:17Z
P1ayer
5118
內容擴充
9758107
wikitext
text/x-wiki
==漢語==
{{zh-forms|type=12}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiǎohuíxiāng
|c=siu2 wui4 hoeng1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 傘形科植物{{w|茴香}}({{taxlink|Foeniculum vulgare|species|nomul=1}})的乾燥成熟[[果實]],作為[[藥材]]有開胃進食、理氣散寒、有助陽道之效
g65exc1ux949qi8cbac13yhqza4co34
小薊
0
1074408
9758137
8146391
2026-05-13T01:41:57Z
P1ayer
5118
內容擴充
9758137
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=小蓟}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiǎojì
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 菊科植物{{w|刺兒菜}}({{taxlink|Cirsium setosum|species|nomul=1}})的乾燥地上部分,作為[[藥材]]有涼血止血、祛瘀消腫之效
dhlh7cs2kf78c0ppraqh754ybknlndi
無可厚非
0
1103131
9758527
8390965
2026-05-13T07:18:42Z
Fglffer
55252
/* 漢語 */
9758527
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=无可厚非|type=22}}
===發音===
{{zh-pron
|m=wúkěhòufēi
|c=mou4 ho2 hau5 fei1
|mn-t=bho5 ko2 gao6 hui1
|cat=ch
}}
===成語===
{{head|zh|成語}}
# [[言行]]合乎[[情理]],沒有什麼可以[[過分]][[批評]]、[[責難]]的
====近義詞====
* {{zh-l|未可厚非}}
====參見====
* {{zh-l|無可非議}}
ih597tr7og1rk4d325sx8gtjcfnn87t
無可置疑
0
1103151
9758529
8160137
2026-05-13T07:21:10Z
Fglffer
55252
9758529
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=无可置疑|type=22}}
===發音===
{{zh-pron
|m=wúkězhìyí
|c=mou4 ho2 zi3 ji4
|cat=cy
}}
===成語===
{{head|zh|成語}}
# 沒有什麼[[可以]][[懷疑]]的
aw7rcb02y3u8h8u3qvskulycyaq2jcm
夏枯草
0
1113433
9758078
6943778
2026-05-12T12:25:58Z
P1ayer
5118
內容擴充
9758078
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Prunella vulgaris, Merwelanden, Dordrecht, Netherlands (14799491412).jpg|thumb]]
===發音===
{{zh-pron
|m=xiàkūcǎo
|c=haa6 fu1 cou2
|mn=hē-ko͘-chháu
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 唇形科植物{{w|夏枯草}}({{taxlink|Prunella vulgaris|species}}),多年生[[草本植物]]
# {{lb|zh|TCM}} 上述植物的乾燥[[果穗]],作為[[藥材]]有清火明目、散結消腫之效
bhnhfah56k13fnikcnw8shyah5xaei5
仙鶴草
0
1113631
9758102
8124705
2026-05-12T16:56:57Z
P1ayer
5118
內容擴充
9758102
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=仙鹤草|type=21}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiānhècǎo
|c=sin1 hok6 cau2
|mn=sian-ho̍h-chháu
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 薔薇科植物{{w|龍牙草}}({{taxlink|Agrimonia pilosa|species|nomul=1}})的乾燥地上部分,作為[[藥材]]有收斂止血、止痢、殺蟲之效
oliga2x5gu8pz1gkgzm0yc7emc47fx9
仙茅
0
1113692
9758103
6944035
2026-05-12T17:07:26Z
P1ayer
5118
內容擴充
9758103
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Curculigo orchioides.jpg|thumb]]
===發音===
{{zh-pron
|m=xiānmáo
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 石蒜科植物{{w|仙茅}}({{taxlink|Curculigo orchioides|species}}),多年生[[草本植物]]
# {{lb|zh|TCM}} 上述植物的乾燥根莖,作為[[藥材]]有溫腎陽、壯筋骨之效
sqwtiv3ls2l03bvq23vwm3ad7gi0gq6
翌月
0
1117050
9758105
7771147
2026-05-12T17:50:19Z
Jiba1219
110530
/* 日語 */
9758105
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|よく|げつ|yomi=kanon}}
===發音===
{{ja-pron|よくげつ|acc=0|acc_ref=DJR,NHK,SMK5}}
===名詞===
{{ja-noun|よくげつ}}
# [[下月]],下個月
====關聯詞====
* {{ja-r|翌日|よくじつ}}、{{ja-r|翌週|よくしゅう}}、{{ja-r|翌月|よくげつ}}、{{ja-r|翌年|よくねん}}
{{Japanese temporal nouns}}
===參考資料===
<references/>
{{c|ja|未來|sort=よくげつ}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=익월}}
# {{hanja form of|익월}}
5ak51xdzy7kirtre1e1ox2xu4d7zdt9
相思子
0
1118573
9758100
9236490
2026-05-12T16:32:10Z
P1ayer
5118
內容擴充
9758100
wikitext
text/x-wiki
==漢語==
{{zh-forms|type=21}}
{{zh-wp}}
[[File:Abrus precatorius - Köhler–s Medizinal-Pflanzen-002.jpg|thumb]]
===發音===
{{zh-pron
|m=xiāngsīzǐ
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 豆科植物{{zh-alt-name|雞母珠|{{taxlink|Abrus precatorius|species}}}}
# {{lb|zh|TCM}} 上述植物的乾燥近成熟[[種子]],作為[[藥材]]有清熱解毒、湧吐、殺蟲之效
d29n87jm271zdhbhke20vz1obfxfo48
香附子
0
1118899
9758081
6949152
2026-05-12T13:09:13Z
P1ayer
5118
內容擴充
9758081
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Nutgrass Cyperus rotundus flower head.jpg|thumb]]
===發音===
{{zh-pron
|m=xiāngfùzi
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 莎草科植物{{w|香附子}}({{taxlink|Cyperus rotundus|species}}),多年生[[草本植物]]
# {{lb|zh|TCM}} 上述植物的乾燥根莖,作為[[藥材]]有理氣解鬱、調經止痛之效
deootyzqwvz1unmcd5kt4u8i4522o6d
9758084
9758081
2026-05-12T14:49:51Z
Sayonzei
40728
/* 漢語 */
9758084
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Nutgrass Cyperus rotundus flower head.jpg|thumb]]
===發音===
{{zh-pron
|m=xiāngfùzǐ
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 莎草科植物{{w|香附子}}({{taxlink|Cyperus rotundus|species}}),多年生[[草本植物]]
# {{lb|zh|TCM}} 上述植物的乾燥根莖,作為[[藥材]]有理氣解鬱、調經止痛之效
nn4h3o0k2s46rgl4p4ixc5asj7mcncm
香薷
0
1119117
9758085
7042407
2026-05-12T14:58:23Z
P1ayer
5118
內容擴充
9758085
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiāngrú
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 唇形科植物{{w|石香薷}}({{taxlink|Mosla chinensis|species}})以及香薷變種江香薷(Mosla chinensis ‘Jiangxiangru’)的乾燥地上部分,作為[[藥材]]有發汗解暑、行水散濕、溫胃調中之效
tg4qfagw7eyz1zrcyjm1pc75javlxic
香櫞
0
1119249
9758101
8209423
2026-05-12T16:45:21Z
P1ayer
5118
內容擴充
9758101
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=香橼|alt=香黃-Teochew,香椽}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiāngyuán
|c=hoeng1 jyun4
|h=pfs=hiông-yèn;hrs=h:hiongˋ rhan
|md=hiŏng-iòng
|mn=tw:hiuⁿ-îⁿ/zz:hioⁿ-îⁿ
|mn-t=hiên1 ng5/hion1 ng5
|mn-t_note=hiên1 ng5 - Chaozhou; hion1 ng5 - Jieyang
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 芸香科植物{{w|枸櫞}}({{taxlink|Citrus medica|species|nomul=1}})的乾燥成熟[[果實]],作為[[藥材]]有疏肝理氣、寬中化痰之效
enq79t36nn3qjpudtbd5roxg4lkjv4i
9758140
9758101
2026-05-13T03:11:28Z
Sayonzei
40728
9758140
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=香橼|alt=香黃-Teochew,香椽}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiāngyuán
|c=hoeng1 jyun4
|h=pfs=hiông-yèn;hrs=h:hiongˋ rhan
|md=hiŏng-iòng
|mn=tw:hiuⁿ-îⁿ/zz:hioⁿ-îⁿ
|mn-t=hiên1 ng5/hion1 ng5
|mn-t_note=hiên1 ng5 - Chaozhou; hion1 ng5 - Jieyang
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[枸櫞]]({{taxfmt|Citrus medica|species}})
# {{lb|zh|TCM}} 該種植物的乾燥成熟[[果實]],作為[[藥材]]有疏肝理氣、寬中化痰之效
====近義詞====
* {{zh-l|香水檸檬}}
* {{qualifier|泉漳話}} {{zh-l|佛手|tr=-}}
====派生詞彙====
{{col3|zh|香櫞瓜}}
3hnd5jbjh5qqs3p9wzbbt4wsozoc55o
勇往直前
0
1123622
9758526
8369149
2026-05-13T07:15:40Z
Fglffer
55252
9758526
wikitext
text/x-wiki
==漢語==
{{zh-forms|type=22}}
===發音===
{{zh-pron
|m=yǒngwǎngzhíqián
|c=jung5 wong5 zik6 cin4
|mn=ióng-óng-ti̍t-chiân
|cat=cy
}}
===成語===
{{head|zh|成語}}
# [[奮勇]][[前進]],[[無所畏懼]]
#: {{zh-x|無論 遇到 什麼 挫折,他 都 能 不屈不撓 的 勇往直前。}}
#* {{quote-song|zh|author={{w|許巍}}|artist={{w|許巍}}|title=曾經的你|album=每一刻都是嶄新的|date=2004 December 9}}
#*: {{zh-x|^走 在 勇往直前 的 路上}}
qu0zs4kagyqoy7zda6b3pphea38icfz
𡮂
0
1184136
9758110
5660654
2026-05-12T20:10:53Z
Fglffer
55252
9758110
wikitext
text/x-wiki
{{character info}}
==跨語言==
===漢字===
{{Han char|rn=42|rad=小|as=8|sn=11|four=|canj=|ids=⿳小白小}}
====來源====
* {{Han ref|kx=0297.231|dkj=|dj=|hdz=|ch=4440005.01|uh=21B82}}
==漢語==
{{zh-see|𡭴|v}}
t40u4c58g0exvmqz1jb1v74crhcau6w
𫽽
0
1243182
9758118
9757750
2026-05-12T21:08:50Z
Fglffer
55252
9758118
wikitext
text/x-wiki
{{character info}}
==跨語言==
===漢字===
{{Han char|rn=64|rad=手|as=11|sn=|four=|canj=|ids=⿰扌𡭽}}
====來源====
* {{Han ref|kx=|dkj=|dj=|hdz=|uh=2BF7D}}
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=xì
|cat=v
}}
===釋義===
{{head|zh|漢字}}
# [[撿拾]]
# [[收取]]
9q2x48ln5v8tahzvkgp3rol0s480tku
無路可退
0
1279375
9758533
7001037
2026-05-13T07:31:32Z
Fglffer
55252
9758533
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=无路可退}}
===發音===
{{zh-pron
|m=wúlùkětuì
|cat=cy
}}
===成語===
{{head|zh|成語}}
# {{syn of|zh|無路可走}}
3pp2yqzqd5o4f1txi8whzx1mmwr8pcw
無路可逃
0
1279717
9758532
7001192
2026-05-13T07:30:57Z
Fglffer
55252
9758532
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=无路可逃}}
===發音===
{{zh-pron
|m=wúlùkětáo
|cat=cy
}}
===成語===
{{head|zh|成語}}
# {{syn of|zh|無路可走}}
3zmvuehygt0cdl4hglf6folabne5dog
無路可走
0
1279983
9758531
7001299
2026-05-13T07:28:53Z
Fglffer
55252
9758531
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=无路可走}}
===發音===
{{zh-pron
|m=wúlùkězoǔ
|cat=cy
}}
===成語===
{{head|zh|成語}}
# 形容[[境遇]]極為[[窮困]][[潦倒]]
====同義詞====
* {{zh-l|無路可逃}}
* {{zh-l|無路可退}}
4qju4x85scwa3ej2kbj8rzm6qkz0yno
進退無路
0
1325246
9758530
7012973
2026-05-13T07:24:55Z
Fglffer
55252
9758530
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=进退无路|type=211}}
===發音===
{{zh-pron
|m=jìntuìwúlù
|cat=cy
}}
===成語===
{{head|zh|成語}}
# 形容[[處境]][[窘迫]],無處[[容身]]
qudz3z35agdzrccdeceluo81eiuzv2m
走親戚
0
1325663
9758119
7013126
2026-05-12T21:11:30Z
Fglffer
55252
9758119
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=走亲戚|type=12}}
{{wp|zh:}}
===發音===
{{zh-pron
|m=zǒu qīnqī,tl=y
|m-s=zou3 qin1 qi2
|m-nj=zǒuqìnqiq
|m-x=zòuqiǎnqi
|c=zau2 can1 cik1
|g=zeu3 qin1 qit
|h=gd=zêu3 qin1 qid5
|x=zou3 qin1 qi2
|cat=v
}}
===動詞===
{{zh-verb|type=vo1}}
# [[年節]][[期間]][[親戚]]間[[互訪]]
====同義詞====
{{zh-dial}}
pj5kzip2jzu4fxt34a6tep9y0ngi5pg
ưu việt
0
1356834
9758089
6730722
2026-05-12T15:09:30Z
TongcyDai
53191
9758089
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|優越}}。
===發音===
{{vi-IPA}}
===形容詞===
{{vi-adj}}
# [[優越]]的
6a2cvgkg1aehcvaqcq3cr3aikfsdxtu
手遊
0
1375198
9758518
8302719
2026-05-13T06:31:11Z
Tony85poon
62011
/* 漢語 */ wiki
9758518
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=手游|t2=手游}}
{{wiki|手机游戏}}
===發音===
{{zh-pron
|m=shǒuyóu
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{zh-short-comp|手機|遊戲}}
{{C|zh|電子遊戲}}
qsbqgu1srtga5h97tb3frb6xby8motj
無路賽
0
1376122
9758528
7256841
2026-05-13T07:19:06Z
Fglffer
55252
9758528
wikitext
text/x-wiki
==汉语==
{{zh-forms|s=无路赛|gloss=-}}
===词源===
源自{{bor|zh|ja|うるさい|tr=urusai|t=[[烦人]]的;[[吵闹]]的}}。
===发音===
{{zh-pron
|m=wúlùsài
|cat=intj
}}
===叹词===
{{head|zh|感嘆詞}}
# {{lb|zh|主要|ACG}} 吵死了,烦死了
#* {{quote-journal|zh|date=2021 August 22|author=渡也|title=故人江海別|newspaper={{w|自由時報}}|url=https://ent.ltn.com.tw/news/paper/1468099}}
#*: {{zh-x|我 常 向 母親 吵 著 要 上學,祖籍 日本 的 母親 老 用 日語 回 我 一句:「無路賽!」叫 我 別 煩 她。}}
9navhizxv6lw5svi3yb4pwo0k1gx1je
数字
0
1377005
9758519
8341251
2026-05-13T06:31:29Z
Jiba1219
110530
/* 日語 */
9758519
wikitext
text/x-wiki
==漢語==
{{zh-see|數字}}
==日語==
{{ja-kanjitab|すう|じ|yomi=kanon,goon}}
===讀音===
{{ja-pron|すうじ|acc=0|acc_ref=NHK}}
===名詞===
{{ja-noun|すうじ}}
# 数字。
[[Category:待分類的漢語詞]]
[[Category:漢語|攴09子03]]
[[Category:待分類的日語詞]]
[[Category:日語]]
2ft5zw7xd6wwn6tkwspzvwsyamwpbff
齒輪
0
1377589
9758021
9757888
2026-05-12T12:15:01Z
Sayonzei
40728
9758021
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=齿轮}}
{{wp|zh:}}
===發音===
{{zh-pron
|m=chǐlún,er=y
|m-s=ci3nen2
|c=ci2 leon4
|h=pfs=chhṳ́-lùn
|mn=khí-lûn
|mn-t=ki2 lung5
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 輪緣上有齒能[[連續]][[嚙合]][[傳遞]][[運動]]和[[動力]]的[[機械]][[零件]]
# {{lb|zh|Sichuan}} [[知心]][[朋友]]
====同義詞====
* {{s|知心朋友}}
{{syn-saurus|zh|知心朋友}}
====衍生詞====
{{col3|zh|行星齒輪|遊星齒輪|大齒輪|差速齒輪|輥齒輪}}
====翻譯====
{{trans-top|機械零件}}
* 阿爾巴尼亞語:{{t+|sq|ingranázh|m}}、{{t|sq|ingranázhi|m}}、{{t|sq|rrótë e dhëmbëzúar|f}}、{{t|sq|rróta e dhëmbëzúar|f}}
* 阿拉伯語:{{t|ar|مُسَنَّنَة|f|tr=musannana}}
* 亞美尼亞語:{{t+|hy|ատամնանիվ}}
* 阿塞拜疆語:{{t|az|çarxdiş}}
* 白俄羅斯語:{{t|be|шасцярня́|f}}、{{t|be|шасьцярня́|f}}、{{t|be|зубча́стае ко́ла|n}}
* 保加利亞語:{{t|bg|зъ́бно колело́|n}}
* 加泰羅尼亞語:{{t+|ca|roda|f}}、{{t+|ca|roda dentada|f}}
* 捷克語:{{t|cs|ozubené kolo|n}}
* 丹麥語:{{t+|da|tandhjul|n}}
* 荷蘭語:{{t+|nl|tandwiel|n}}、{{t+|nl|tandrad|n}}
* 英語:{{t+|en|gear wheel}}、{{t+|en|gear}}
* 世界語:{{t|eo|dentrado}}
* 法羅語:{{t|fo|tannhjól|n}}、{{t|fo|naddahjól|n}}
* 芬蘭語:{{t+|fi|hammaspyörä}}、{{t+|fi|hammasratas}}、{{t+|fi|ratas}}
* 法語:{{t+|fr|roue dentée|f}}、{{t+|fr|pignon|m}}、{{t+|fr|engrenage|m}}
* 加利西亞語:{{t|gl|engrenaxe|f}}、{{t+|gl|piñón|m}}、{{t|gl|roda dentada|f}}
* 格魯吉亞語:{{t|ka|კბილანა თვალი}}、{{t|ka|კბილანა}}
* 德語:{{t+|de|Zahnrad|n}}
* 希臘語:{{t+|el|γρανάζι|n}}、{{t|el|οδοντωτός τροχός|m}}
* 希伯來語:{{t+|he|גלגל שיניים|m|tr=galgál shináyim|alt=גלגל שיניים \ גַּלְגַּל שִׁנַּיִם}}
* 印地語:{{t+|hi|गरारी}}
* 匈牙利語:{{t+|hu|fogaskerék}}
* 冰島語:{{t|is|tannhjól|n}}
* 印尼語:{{t+|id|roda gigi}}
* 意大利語:{{t+|it|ruota dentata|f}}、{{t+|it|ingranaggio|m}}
* 日語:{{t+|ja|歯車|tr=はぐるま, haguruma}}、{{t+|ja|ギア|tr=gia}}
* 朝鮮語:{{t|ko|톱니바퀴}}
* 拉脫維亞語:{{t|lv|zobrats|m}}
* 馬其頓語:{{t|mk|запченик|m}}
* 馬來語:{{t|ms|gigi roda}}
* 毛利語:{{t|mi|([[wira]]) [[nihowhiti]]}}
* 那不勒斯語:{{t|nap|turnese|f}}
* 挪威語:
*: 書面挪威語:{{t+|nb|tannhjul|n}}
*: 新挪威語:{{t|nn|tannhjul|n}}
* 奧克語:{{t+|oc|engranatge|m}}、{{t|oc|ròda dentada|f}}
* 波蘭語:{{t+|pl|koło zębate|n}}、{{t+|pl|trybik|m}}
* 葡萄牙語:{{t+|pt|engrenagem|f}}、{{t|pt|roda dentada|f}}
* 羅馬尼亞語:{{t|ro|roată dințată|f}}
* 俄語:{{t+|ru|шестерня́|f}}、{{t+|ru|шестерёнка|f}}、{{t|ru|[[зубчатый|зу́бчатое]] [[колесо́]]|n}}
* 蘇格蘭蓋爾語:{{t|gd|cuibhle-ghèar|f}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|зупча̀нӣк|m}}
*: 拉丁語:{{t+|sh|zupčànīk|m}}
* 斯洛伐克語:{{t|sk|ozubené koleso|n}}
* 斯洛文尼亞語:{{t|sl|zobnik|m}}
* 西班牙語:{{t|es|rueda dentada|f}}、{{t+|es|corona|f}}
* 瑞典語:{{t+|sv|kugghjul|n}}、{{t|sv|tandhjul|n}}、{{t+|sv|drev|n}}
* 他加祿語:{{t|tl|ngiplong}}
* 泰語:{{t+|th|เฟือง}}、{{t|th|ฟันเฟือง}}
* 土耳其語:{{t+|tr|dişli çark}}
* 烏克蘭語:{{t|uk|шестірня́|f}}、{{t|uk|зубча́сте ко́лесо|n}}
* 越南語:{{t+|vi|bánh răng}}、{{t|vi|bánh xe răng cưa}}
* 威爾士語:{{t|cy|olwyn gêr|f}}
{{trans-bottom}}
{{zh-cat|Advanced}}
5tyrez3vok75f31im7est44rrds5iw2
アルメニア
0
1384196
9758589
7818663
2026-05-13T08:23:09Z
Sayonzei
40728
9758589
wikitext
text/x-wiki
==日語==
{{wp|ja:}}
===發音===
{{ja-pron|acc=0}}
===專有名詞===
{{ja-pos|proper}}
# {{Place|ja|國家|r/高加索|t=亞美尼亞}}
====近義詞====
* {{ja-r|アルメニア共%和%国|アルメニア きょう%わ%こく|caps=y}}
{{cln|ja|外名|sort=あるめにあ}}
80ppofkl6qqn7jujtveq4ejm0qzgg3s
オマーン
0
1384303
9758595
7818700
2026-05-13T08:25:41Z
Sayonzei
40728
9758595
wikitext
text/x-wiki
==日語==
{{swp|ja:}}
===詞源===
{{der+|ja|ar|عُمَان}}。
===發音===
{{ja-pron|acc=2}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|r/西亞|t=阿曼}}
===參見===
* {{ja-r|オマーン国|^オマーン-こく}}
fxa9c58zk3cmro5hycks9c09ig8uzdx
ocelotl
0
1417853
9758083
7706148
2026-05-12T14:12:36Z
InternetArchiveBot
95668
Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.9.5
9758083
wikitext
text/x-wiki
==中納瓦特爾語==
[[file:Jaguar head shot.jpg|thumb|美洲虎 ''(ocelotl)'']]
===其它拼写===
*[[ozelotl]] (特斯科科)
*[[oselotl]] (特拉斯卡拉)
===發音===
* {{IPA|nhn|/oˈseː.loːtɬ/}}
===名詞===
{{head|nhn|名詞}}
#[[美洲虎]]
====派生词====
* {{l|nci|tlalocelotl}}
===參考資料===
* Medina, Genaro (1999); [http://jupiter.plymouth.edu/~wjt/Nahuatl/Nahuatl1.pdf online ''Curso de Náhuatl'']{{Dead link|date=May 2026 |bot=InternetArchiveBot |fix-attempted=yes }}, Universidad de las Américas; San Pedro Cholula, Puebla, Mexico.
* Mancilla Sepúlveda, Héctor (2002); Lecciones de Náhuatl, (Amecameca variant), Editorial Hirata; Mexico City, Mexico.
* Aguilar Carrera, Sergio (2012); ''Método práctico de lengua náhuatl del Altiplano Mexicano''; Amecameca variant, Dirección de Casa de Cultura de Tecámac, State of Mexico, Mexico. ISBN 03-2012-030812540200-01.
==古典納瓦特爾語==
===其它拼写===
*[[oçelotl]] (''Alonso de Molina, 1571'')
*[[ōcēlōtl]] (''Alexis Wimmer, 2004'')
===發音===
* {{IPA|nci|/oˈseː.loːt͡ɬ/}}
===名詞===
{{head|nci|名詞|head=ocelotl|複數|ocelomeh}}
#[[美洲虎]]
#* '''1571''', [[w:Alonso de Molina|Alonso de Molina]], ''[[w:Vocabulario en lengua castellana y mexicana y mexicana y castellana|Vocabulario en lengua castellana y mexicana y mexicana y castellana]]'', f. 75r. col. 2.
#*: '''Ocelotl'''. tigre. […] / '''Ocelome'''. tigres.
#*:: '''Ocelotl'''. a jaguar. […] / '''Ocelome'''. jaguars.
#* ibid., f. 77v. col. 1.
#*: '''Oocelo'''. tigres.
#*:: '''Oocelo'''. jaguars.
#* '''c. 1600''', Anonymous, ''[[w:Anónimo Mexicano|Anónimo Mexicano]]'', f. 7r.
#*: oquitlalílique miec ytlahuitol, ce cuauhtlí tlacuicuítl, ce '''ozelotl''' ycxitlan
#*:: They buried him with very many of his things: his bow, an eagle carved of wood, a jaguar at his feet
#* ibid., f. 11r.
#*: onca:ncamaía, tepe Zolime, totochtin, cuahtotolim, Mazame, '''oze lome''', cuamíztin, tecuanímê
#*:: There were partridges, rabbits, fowl, deer, jaguars, mountain lions, and savage beasts
#* '''c. 1609''', [[w:Fernando Alvarado Tezozomoc|Tezozomoc]], [[w:Chimalpahin|Chimalpahin]], ''Cronica mexicayotl'', f. 22r
#*: camo çan quexquich yn ompa onoque yn ompa tlapia yn tequanime yn cuecuetlachtin. yn '''ocelome'''. yn mimiztin yn cocohua
#*:: Countless fierce animals were there; bears, jaguars, mountain lions, snakes were on guard.
#* '''1645''', [[w:Horacio Carochi|Horacio Carochi]], ''[[w:Arte de la lengua mexicana con la declaración de los adverbios della|Arte de la lengua mexicana con la declaración de los adverbios della]]'', f. 4v.
#*: '''''ocēlōtl''''', tigre. Pl. '''''ōocēlō'''''. [...] '''''ocēlōmê''''' tigres.
#*:: '''''ocēlōtl''''', a jaguar. Pl. '''''ōocēlō'''''. [...] '''''ocēlōmê''''' jaguar.
* ''[[w:Panthera onca|Panthera onca]]''.
# {{gloss|it is}} the fourteenth of the twenty [[day sign]]s of the {{mention|nci|tonalpohualli}}; a jaguar or [[disembodied]] jaguar's head.
#* '''16th c.''', ''[[w:Codex Magliabechiano|Codex Magliabechiano]]'', f. 13r.
#*: naVi '''oçelotl'''. q qujere dezir quatro tigre.
#*:: navi '''oçelotl'''. that is to say, four tiger.
====派生詞彙====
{{rel-top3|Terms derived from ''ocelotl''}}
* {{l|nci|ocelocopilli}}
* {{l|nci|oceloehuatl}}
* {{l|nci|oceloiyataztli}}
* {{l|nci|ocelomatetepontli}}
* {{l|nci|ocelometl}}
* {{l|nci|ocelomichin}}
* {{l|nci|ocelopetlatl}}
* {{l|nci|oceloquichtli}}
* {{l|nci|ocelotamalli}}
{{rel-mid3}}
* {{l|nci|ocelotenamitl}}
* {{l|nci|ocelotepotzohicpalli}}
* {{l|nci|ocelotetl}}
* {{l|nci|ocelotexochitl}}
* {{l|nci|oceloti}}
* {{l|nci|ocelotia}}
* {{l|nci|ocelotic}}
* {{l|nci|ocelotilmahtli}}
* {{l|nci|ocelotlah}}
{{rel-mid3}}
* {{l|nci|ocelotlachicomitl}}
* {{l|nci|ocelotlatzacuilli}}
* {{l|nci|ocelotocatl}}
* {{l|nci|oceloxochitl}}
* {{l|nci|oceloyotl}}
* {{l|nci|tlahcoocelotl}}
* {{l|nci|tlalocelotl}}
{{rel-bottom}}
====派生詞====
* {{desc|nhn|ocelotl}}
* {{desc|nch|oselotl}}
* {{desc|ncx|ocelotl}}
* {{desc|ppl|uselut}}
* {{desc|bor=1|es|ocelote}}
** {{desc|bor=1|lt|ocelotas}}
* {{desc|bor=1|fr|ocelot}}
** {{desc|bor=1|nl|ocelot}}
** {{desc|bor=1|en|ocelot}}
** {{desc|bor=1|de|Ozelot}}
** {{desc|bor=1|it|ocelot}}
** {{desc|bor=1|pl|ocelot}}
===參考資料===
* {{cite-book|author=[[w:Alonso de Molina|Alonso de Molina]] |year=1571 |title=Vocabulario en lengua castellana y mexicana y mexicana y castellana |publisher=Editorial Porrúa |pages=75r, 77v}}
* {{cite-book|author=Carochi, Horacio|year=2001|title=Grammar of the Mexican Language, with an Explanation of its Adverbs (1645)|others=ed. and trans. by James Lockhart|location=Stanford|publisher=Stanford University Press|pages=30–31}}
* {{cite-book|author=Chimalpahin Quauhtlehuanitzin, Domingo Francisco de San Antón Muñón|year=1997|title=Codex Chimalpahin|others=ed. and trans. by Arthur J. O. Anderson and Susan Schroeder|location=Norman|publisher=University of Oklahoma Press|pages=70–71}}
[[Category:待分類的中納瓦特爾語詞]]
[[Category:中納瓦特爾語]]
[[Category:待分類的古典納瓦特爾語詞]]
[[Category:古典納瓦特爾語]]
acqlm0oyblqi4rjxr8m0hkowetxp99t
breme
0
1419941
9757999
9354869
2026-05-12T12:12:13Z
TongcyDai
53191
9757999
wikitext
text/x-wiki
{{also|Breme|brème|brême|Brême}}
==英語==
===其他寫法===
* {{l|en|brim}}
===詞源===
{{PIE root|en|bʰrem}}
源自{{inh|en|enm|brem}}, {{l|enm|breme}} ← {{inh|en|ang|brēme||知名的,榮耀的}} ← {{inh|en|gem-pro|*brōmiz||知名的}}。與{{cog|la|fremō||嚅囁;吼}}, {{cog|grc|βρέμω||吼}}, {{cog|pl|brzmieć||被聽說}}同源。
===發音===
* {{IPA|en|/bɹiːm/}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-breme.wav|音頻 (RP)}}
* {{homophones|en|bream}}
===形容詞===
{{en-adj|?}}
# {{舊}} [[激烈]]的,[[猛烈]]的
#* '''14世紀末''', Geoffrey Chaucer, ''The Knight's Tale'':
#*: He was war of Arcite and Palamon / Þat fouȝten '''breme''' as it were bores two.
#* '''1579''', Edmund Spenser, ''The Shepheardes Calender'':
#*: Let me, ah! lette me in your folds ye lock, / Ere the '''breme''' winter breede you greater griefe.
#* '''1748''', James Thomson, ''The Castle of Indolence'':
#*: The same to him glad Summer or the Winter '''breme'''.
#* {{rfdatek|en|Mallory}}, "Le Morte d'Arthur":
#*: "So upon the morn there came Sir Gawaine as brim (breme) as any boar, with a great spear in his hand."
# {{舊}} [[知名]]的
===異序詞===
* {{anagrams|en|a=beemr|EBMer|Ember|berme|ember}}
==意大利語==
===詞源===
源自{{bor|it|fro|bresme}}。參見{{cog|fr|brème}}。
===名詞===
{{it-noun|m}}
# [[鯛魚]] (''[[Abramis]]'')
===參考資料===
* {{R:OED}}
{{C|it|魚}}
==古英語==
===其他寫法===
* {{alter|ang|brœ̄me||諾森伯蘭}}
===詞源===
{{PIE root|ang|bʰrem}}
源自{{inh|ang|gem-pro|*brōmiz}}。
===發音===
* {{ang-IPA|brēme}}
===形容詞===
{{ang-adj|head=brēme}}
# {{詩}} [[知名]]的,[[榮耀]]的
====變格====
{{ang-adecl|brēme}}
====派生語彙====
* {{desc|enm|brem}}, {{l|enm|breme}}
** {{desc|en|breme}}
** {{desc|sco|breme}}
==塞爾維亞-克羅地亞語==
===其他形式===
* {{qualifier|Ikavian}}: {{l|sh|brime}}
===詞源===
来自{{inh|sh|sla-pro|*bermę}}。
===發音===
* {{IPA|sh|/brême/}}
* {{hyphenation|sh|bre|me}}
===名詞===
{{sh-noun|brȅme|n}}
# 负担
====變格====
{{sh-decl-noun|breme|bremèna
|bremena|bremena
|bremenu|bremenima
|breme|bremena
|breme|bremena
|bremenu|bremenima
|bremenom|bremenima
}}
====派生詞語====
* {{l|sh|bremènit}}
==斯洛文尼亞語==
===詞源===
来自{{inh|sl|sla-pro|*bermę}}。
===名詞===
{{sl-noun|breme|n}}
# [[負擔]]
etl5zcv01uslu74i9fdf3rnexf7lt0x
mochi
0
1687444
9758002
9574839
2026-05-12T12:12:27Z
TongcyDai
53191
9758002
wikitext
text/x-wiki
{{also|Mochi}}
==英語==
===詞源===
源自{{bor|en|ja|餅|tr=mochi}}。
===名詞===
{{en-noun|~|s|*}}
# 日式[[麻糬]]
#* '''2013''', William Shurtleff, Akiko Aoyagi, ''History of Tofu and Tofu Products (965 CE to 2013)'', Soyinfo Center ({{ISBN|9781928914556}}), page 1146:
#*: Many of Japan's most popular confections are dusted with a light coating of sweetened kinako. These confections usually consist of a grain such as '''mochi''' (pounded glutinous rice), or steamed, pounded millet filled with {{...}}
===延伸閱讀===
* {{pedia|mochi (food)|lang=en}}
===回文構詞===
* {{anagrams|en|a=chimo|chimo|ohmic}}
== 古典納瓦特爾語 ==
===名詞===
{{nci-noun}}
# [[全部]]
==義大利語==
===發音===
* {{it-IPA|mòchi}}
* {{hyph|it|mò|chi}}
===詞源1===
{{m|it|moco}}的複數形。
====名詞====
{{it-noun|m-p}}
# 山地山黧豆(''[[Vicia ervilia]]'')
#: {{syn|it|girlo|q1=托斯卡納}}
# {{synonym of|it|cicerchia|t=家山黧豆}}
#: {{syn|it|girlo|q1=托斯卡納}}
===詞源2===
{{nonlemma}}
====名詞====
{{head|it|名詞變格形|g=m-p}}
# {{plural of|it|moco}}
===來源===
* {{R:it:Trec}}
===回文構詞===
* {{anagrams|it|a=chimo|chimo}}
{{C|it|豆科}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|もち}}
# {{ja-romanization of|モチ}}
5mctiawctxd0h37563q9uvcjhiql9ti
Category:建築學
14
1732404
9758524
7033144
2026-05-13T07:12:32Z
TongcyDai
53191
// Edit via Wikiplus
9758524
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
トルクメニスタン
0
1764310
9758607
7071031
2026-05-13T08:29:32Z
Sayonzei
40728
9758607
wikitext
text/x-wiki
==日語==
{{swp|ja:}}
===發音===
{{ja-pron|acc=5|acc_ref=SMK5}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|r/中亞|t=土庫曼斯坦|t2=土庫曼}}
===參考資料===
<references />
0ur1wm5yeruvpunxjs0mnu6bb4gbk5j
断崖
0
1834879
9758108
8341278
2026-05-12T18:44:24Z
Jiba1219
110530
/* 日語 */
9758108
wikitext
text/x-wiki
{{also|斷崖}}
==漢語==
{{zh-see|斷崖}}
==日語==
{{ja-kanjitab|だん|がい|yomi=goon,kanon}}
===發音===
{{ja-pron|だんがい|acc=0|acc_ref=DJR,NHK,SMK5}}
===名詞===
{{ja-noun|だんがい}}
# [[斷崖]]
===參考資料===
<references/>
sk46dpia1b7djmetahpjsuzweguj894
macedone
0
1984309
9757972
7660053
2026-05-12T12:04:40Z
TongcyDai
53191
9757972
wikitext
text/x-wiki
==意大利语==
===发音===
{{it-pr|macèdone}}
===形容词===
{{it-adj|f=#}}
# [[馬其頓]]的
===名词===
{{it-noun|mf}}
# [[馬其頓]]人
===名词===
{{it-noun|m|-}}
# [[馬其頓語]]
====相关词汇====
* {{l|it|Macedonia}}
{{C|it|語言名稱|國籍}}
==拉丁语==
===形容词===
{{la-adj-form|mācedone}}
# {{inflection of|la|mācedonus||voc|m|s}}
menku8ccky8c9d1f3vv21mji4johqdj
9757974
9757972
2026-05-12T12:04:47Z
TongcyDai
53191
9757974
wikitext
text/x-wiki
==意大利语==
===发音===
{{it-pr|macèdone}}
===形容词===
{{it-adj|f=#}}
# [[馬其頓]]的
===名词===
{{it-noun|mf}}
# [[馬其頓人]]
===名词===
{{it-noun|m|-}}
# [[馬其頓語]]
====相关词汇====
* {{l|it|Macedonia}}
{{C|it|語言名稱|國籍}}
==拉丁语==
===形容词===
{{la-adj-form|mācedone}}
# {{inflection of|la|mācedonus||voc|m|s}}
l1iieqayzsuldzointwtj7v1oix15mc
User:Sayonzei/Kotori
2
2129326
9758077
9757223
2026-05-12T12:20:44Z
Sayonzei
40728
9758077
wikitext
text/x-wiki
精製鳥飼料:[[User:KotoriBot]]
==列表==
===法語===
*一個-er結尾的第一類法語動詞(連同本體)理論上可產出'''40'''個新詞條。<br>
:{{col3|fr|quémander}}<!--明日:
;需自行創建
:{{col3|fr|retransmigrer|redésentrelacer|retransfigurer|réobséder|désobséder|désamocher|réamocher|rebuissonner|débuissonner|recolmater|décolmater|désaffréter|redélester|réindividuer|recharrier|recémenter|décémenter|réabsolutiser|désabsolutiser|désacadémiser|désaccastiller|réaccompagner|désaccompagner|réagrémenter|désagrémenter|désalambiquer|désanalphabétiser|désanathématiser|réapostropher|réajourner|désajourner|redétremper|redogmatiser|dédogmatiser|réextirper|réintituler|resolutionner|resouscrire|resulfater|désulfater|réagenouiller|désagenouiller|débouillir|désaccomplir|réaccomplir|réaccoutrer}}-->
===加泰===
*一個-ar結尾的普通加泰羅尼亞語動詞(連同本體)理論上可產出'''44'''個新詞條。<br>
:{{col3|ca|}}
===葡加利===
*一個-ar結尾的普通葡萄牙語動詞(連同本體)理論上可產出'''53'''個新詞條;但需注意,過去分詞可能不在accel範圍內。<br>
:{{col3|pt|}}<!--明日:-->
===西===
*一個-ar結尾的普通西班牙語動詞(連同本體、不含合詞)理論上可產出'''58'''個新詞條。<br>
:{{col3|es|}}<!--明日:
;需自行創建
:{{col3|es|bestializar|zollipar|zampuzar}}-->
===德語===
:{{col3|de|}}
===拉丁語===
:{{col3|la|}}<!--明日:-->
:{{col3|la|}}<!--明日:-->
===意大利語===
:{{col3|it|}}<!--明日:-->
===俄語===
:{{col3|ru|}}
:{{col3|ru|}}
dhcbcnam8o8lwn0tp19pglcp6ef01i2
9758171
9758077
2026-05-13T04:59:02Z
Sayonzei
40728
9758171
wikitext
text/x-wiki
精製鳥飼料:[[User:KotoriBot]]
==列表==
===法語===
*一個-er結尾的第一類法語動詞(連同本體)理論上可產出'''40'''個新詞條。<br>
:{{col3|fr|quémander}}<!--明日:
;需自行創建
:{{col3|fr|retransmigrer|redésentrelacer|retransfigurer|réobséder|désobséder|désamocher|réamocher|rebuissonner|débuissonner|recolmater|décolmater|désaffréter|redélester|réindividuer|recharrier|recémenter|décémenter|réabsolutiser|désabsolutiser|désacadémiser|désaccastiller|réaccompagner|désaccompagner|réagrémenter|désagrémenter|désalambiquer|désanalphabétiser|désanathématiser|réapostropher|réajourner|désajourner|redétremper|redogmatiser|dédogmatiser|réextirper|réintituler|resolutionner|resouscrire|resulfater|désulfater|réagenouiller|désagenouiller|débouillir|désaccomplir|réaccomplir|réaccoutrer}}-->
===加泰===
*一個-ar結尾的普通加泰羅尼亞語動詞(連同本體)理論上可產出'''44'''個新詞條。<br>
:{{col3|ca|}}
===葡加利===
*一個-ar結尾的普通葡萄牙語動詞(連同本體)理論上可產出'''53'''個新詞條;但需注意,過去分詞可能不在accel範圍內。<br>
:{{col3|pt|ensanduichar|sanduichar|engaiolar|engabelar|engambelar|galfinhar}}<!--明日:-->
===西===
*一個-ar結尾的普通西班牙語動詞(連同本體、不含合詞)理論上可產出'''58'''個新詞條。<br>
:{{col3|es|}}<!--明日:
;需自行創建
:{{col3|es|bestializar|zollipar|zampuzar}}-->
===德語===
:{{col3|de|}}
===拉丁語===
:{{col3|la|}}<!--明日:-->
:{{col3|la|}}<!--明日:-->
===意大利語===
:{{col3|it|}}<!--明日:-->
===俄語===
:{{col3|ru|}}
:{{col3|ru|}}
ndisnmndvyw525p6bhphp6dazzezlet
hahua
0
2948531
9758624
9033497
2026-05-13T08:35:30Z
幻光尘
67775
9758624
wikitext
text/x-wiki
==五屯話==
===詞源===
{{bor+|wuh|cmn|漢話}}.
===發音===
* {{IPA|wuh|[hahʷa]}}
===專有名詞===
{{head|wuh|專有名詞}}
# [[漢語]],[[漢話]]
#: {{syn|wuh|jjhayek}}
#: {{ux|wuh|zaige '''hahua''' mu zaige do-li.|t=至於(我們五屯話中的)'''漢語'''元素,那是很多的。|footer=(引自 Sandman, p. 268)}}
===參考資料===
* {{R:wuh:Janhunen}}
* {{R:wuh:Sandman}}
{{C|wuh|漢語相關|語言名稱}}
ep4gcn5tbae4t099wu2ziol55fcxqjk
9758626
9758624
2026-05-13T08:35:46Z
幻光尘
67775
9758626
wikitext
text/x-wiki
==五屯話==
===詞源===
{{bor+|wuh|cmn|漢話}}。
===發音===
* {{IPA|wuh|[hahʷa]}}
===專有名詞===
{{head|wuh|專有名詞}}
# [[漢語]],[[漢話]]
#: {{syn|wuh|jjhayek}}
#: {{ux|wuh|zaige '''hahua''' mu zaige do-li.|t=至於(我們五屯話中的)'''漢語'''元素,那是很多的。|footer=(引自 Sandman, p. 268)}}
===參考資料===
* {{R:wuh:Janhunen}}
* {{R:wuh:Sandman}}
{{C|wuh|漢語相關|語言名稱}}
4ymsi7oxo6qz89rbefrq8jkxi726bs6
Module:Place/sandbox
828
3034683
9758128
9153034
2026-05-12T23:19:25Z
TongcyDai
53191
9758128
Scribunto
text/plain
local export = {}
local force_cat = false -- set to true for testing
local m_placetypes = require("Module:place/placetypes")
local m_links = require("Module:links")
local memoize = require("Module:memoize")
local m_strutils = require("Module:string utilities")
local m_table = require("Module:table")
-- Chinese localization data (zh_name, zh_suffix, qualifiers, extra-info labels, etc.)
local m_zh_data = require("Module:place/data/sandbox")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
local form_of_module = "Module:form of"
local languages_module = "Module:languages"
local parse_interface_module = "Module:parse interface"
local parse_utilities_module = "Module:parse utilities"
local parameter_utilities_module = "Module:parameter utilities"
local utilities_module = "Module:utilities"
local enlang = require(languages_module).getByCode("en")
local rmatch = m_strutils.match
local rfind = m_strutils.find
local ulen = m_strutils.len
local split = m_strutils.split
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local pluralize = require(en_utilities_module).pluralize
local extend = m_table.extend
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local internal_error = m_placetypes.internal_error
local process_error = m_placetypes.process_error
local placetype_data = m_placetypes.placetype_data
-- Shorthand for the ZH localization string table.
local zh_strings = m_zh_data.zh_strings
--[==[
ZH fork of [[Module:place]] (enwikt). Architecture and data structures are identical to the English version;
only the display-formatting functions are changed to produce Chinese-language definitions.
Key structural differences from enwikt:
* Old-style holonyms are reversed (big→small containment order) and joined with 、/和 rather than "in X, Y".
* Sentence pattern: 位於[holonyms]的[placetype] (or [holonyms]的[placetype] for "of"-type placetypes).
* No articles (a/an/the) in generated text.
* Pref/suf holonym affixes append the Chinese zh_suffix instead of English "placetype of X".
* Translations are joined with "," (full-width comma); parenthetical glosses use ().
* Extra-info labels (capital, largest city, etc.) come from Module:place/data zh_extra_info_labels.
* sentence_style is always true for ZH (extra info uses "。" separator, not ";").
]==]
--[==[ var:
List specifying the allowed form-of directives, used for former names, official names, abbreviations, etc. of places.
The key is the form-of directive and the value is an object with the following properties:
* `text`: The actual text displayed before the terms. If the value is `+`, the key is used as the text. If the value is
a function, it is passed a single argument, the overall place spec (see comment at top of file) and should return
the text to be displayed.
* `type_prefix`: The prefix used to generate the placetype for looking up the appropriate category or categories in the
placetype data structure. Can be omitted if there are no categories associated with the directive.
* `conjunction`: The conjunction used to join multiple terms, defaulting to `and`.
* `cat`: Additional category or categories to add the term to, whenever this particular directive is used.
* `default_foreign`: If specified, the default language of terms given along with this directive is the language in
{{para|1}}; otherwise it is English.
]==]
export.all_form_of_directives = {
["former name of"] = {text = "+", type_prefix = "FORMER_NAME_OF"},
["fmr of"] = {alias_of = "former name of"},
["ancient name of"] = {text = "+", type_prefix = "FORMER_NAME_OF"},
["official name of"] = {text = "+", type_prefix = "OFFICIAL_NAME_OF"},
["former official name of"] = {text = "+", type_prefix = "FORMER_OFFICIAL_NAME_OF"},
["long form of"] = {text = "+", type_prefix = "LONG_FORM_OF"},
["former long form of"] = {text = "+", type_prefix = "FORMER_LONG_FORM_OF"},
["nickname for"] = {text = "+", type_prefix = "NICKNAME_FOR"},
["official nickname for"] = {text = "+", type_prefix = "OFFICIAL_NICKNAME_FOR"},
["former nickname for"] = {text = "+", type_prefix = "FORMER_NICKNAME_FOR"},
["derogatory name for"] = {text = "[[Appendix:Glossary#derogatory|derogatory]] name for", type_prefix = "DEROGATORY_NAME_FOR"},
["synonym of"] = {text = "+"},
["syn of"] = {alias_of = "synonym of"},
["abbreviation of"] = {text = "[[Appendix:Glossary#abbreviation|abbreviation]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:abbreviations",
default_foreign = true},
["abbr of"] = {alias_of = "abbreviation of"},
["abbrev of"] = {alias_of = "abbreviation of"},
["initialism of"] = {text = "[[Appendix:Glossary#initialism|initialism]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:initialisms",
default_foreign = true},
["init of"] = {alias_of = "initialism of"},
["acronym of"] = {text = "[[Appendix:Glossary#acronym|acronym]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:acronyms",
default_foreign = true},
["syllabic abbreviation of"] = {text = "[[Appendix:Glossary#syllabic abbreviation|syllabic abbreviation]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:syllabic abbreviations",
default_foreign = true},
["sylabbr of"] = {alias_of = "syllabic abbreviation of"},
["sylabbrev of"] = {alias_of = "syllabic abbreviation of"},
["ellipsis of"] = {text = "[[Appendix:Glossary#ellipsis|ellipsis]] of", type_prefix = "ELLIPSIS_OF", cat = "cln:ellipses",
default_foreign = true},
["ellip of"] = {alias_of = "ellipsis of"},
["clipping of"] = {text = "[[Appendix:Glossary#clipping|clipping]] of", type_prefix = "CLIPPING_OF", cat = "cln:clippings",
default_foreign = true},
["clip of"] = {alias_of = "clipping of"},
["alternative form of"] = {text = "+", default_foreign = true},
["alt form"] = {alias_of = "alternative form of"},
["alternative spelling of"] = {text = "+", default_foreign = true},
["alt spell"] = {alias_of = "alternative spelling of"},
["alt sp"] = {alias_of = "alternative spelling of"},
["dated form of"] = {text = "[[Appendix:Glossary#dated|dated]] form of", type_prefix = "DATED_FORM_OF", cat = "cln:dated forms",
default_foreign = true},
["dated form"] = {alias_of = "dated form of"},
["dated spelling of"] = {text = "[[Appendix:Glossary#dated|dated]] spelling of", type_prefix = "DATED_FORM_OF", cat = "cln:dated forms",
default_foreign = true},
["dated spell"] = {alias_of = "dated spelling of"},
["dated sp"] = {alias_of = "dated spelling of"},
["archaic form of"] = {text = "[[Appendix:Glossary#archaic|archaic]] form of", type_prefix = "ARCHAIC_FORM_OF", cat = "cln:archaic forms",
default_foreign = true},
["arch form"] = {alias_of = "archaic form of"},
["archaic spelling of"] = {text = "[[Appendix:Glossary#archaic|archaic]] spelling of", type_prefix = "ARCHAIC_FORM_OF", cat = "cln:archaic forms",
default_foreign = true},
["arch spell"] = {alias_of = "archaic spelling of"},
["arch sp"] = {alias_of = "archaic spelling of"},
["obsolete form of"] = {text = "[[Appendix:Glossary#obsolete|obsolete]] form of", type_prefix = "OBSOLETE_FORM_OF", cat = "cln:obsolete forms",
default_foreign = true},
["obs form"] = {alias_of = "obsolete form of"},
["obsolete spelling of"] = {text = "[[Appendix:Glossary#obsolete|obsolete]] spelling of", type_prefix = "OBSOLETE_FORM_OF", cat = "cln:obsolete forms",
default_foreign = true},
["obs spell"] = {alias_of = "obsolete spelling of"},
["obs sp"] = {alias_of = "obsolete spelling of"},
}
local function get_seat_text(overall_place_spec)
local placetype = overall_place_spec.descs[1].placetypes[1]
if placetype == "county" or placetype == "counties" then
return "county seat"
elseif placetype == "parish" or placetype == "parishes" then
return "parish seat"
elseif placetype == "borough" or placetype == "boroughs" then
return "borough seat"
else
return "seat"
end
end
--[==[ var:
List specifying the allowed arguments containing extra information that is sometimes added to a definition, such as the
capital, largest city, modern name, official name, etc., along with associated properties; displayed in the order given.
See enwikt [[Module:place]] for full documentation of each field.
]==]
export.extra_info_args = {
{arg = "modern", text = "+", conjunction = "or", display_even_when_dropped = true},
{arg = "now", text = "now,", conjunction = "or", display_even_when_dropped = true},
{arg = "full", text = "in full,", conjunction = "or", display_even_when_dropped = true},
{arg = "short", text = "short form", conjunction = "or"},
{arg = "abbr", text = "abbreviation", conjunction = "or"},
{arg = "former", text = "formerly,"},
{arg = "official", text = "official name", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "capital", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "largest city", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "caplc", text = "capital and largest city", match_sentence_style = true, auto_plural = false,
with_colon = true},
{arg = "seat", text = get_seat_text, match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "shire town", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "headquarters", text = "+", match_sentence_style = true, auto_plural = false, with_colon = true},
{arg = "center", text = "administrative center", match_sentence_style = true, auto_plural = false, with_colon = true},
{arg = "centre", text = "administrative centre", match_sentence_style = true, auto_plural = false, with_colon = true},
}
export.extra_info_arg_map = {}
for _, spec in ipairs(export.extra_info_args) do
export.extra_info_arg_map[spec.arg] = spec
end
----------- Wikicode utility functions
-- Return a wikilink link {{l|language|text}}
local function link(text, langcode, id)
if not langcode then
return text
end
return m_links.full_link(
{term = text, lang = require(languages_module).getByCode(langcode, true, "allow etym"), id = id},
nil, "allow self link"
)
end
---------- Basic utility functions
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
local function ucfirst_all(text)
if text:find(" ") then
local parts = split(text, " ", true)
for i, part in ipairs(parts) do
parts[i] = m_strutils.ucfirst(part)
end
return concat(parts, " ")
else
return m_strutils.ucfirst(text)
end
end
local function lc(text)
return mw.getContentLanguage():lc(text)
end
---------- Argument parsing functions and utilities
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",") then
return require(parse_interface_module).split_on_comma(val)
else
return {val}
end
end
-- Split an argument on slash, but not slash occurring inside of HTML tags like </span> or <br />.
local function split_on_slash(arg)
if arg:find("<") then
local m_parse_utilities = require(parse_utilities_module)
-- We implement this by parsing balanced segment runs involving <...>, and splitting on slash in the remainder.
-- The result is a list of lists, so we have to rejoin the inner lists by concatenating.
local segments = m_parse_utilities.parse_balanced_segment_run(arg, "<", ">")
local slash_separated_groups = m_parse_utilities.split_alternating_runs(segments, "/")
for i, group in ipairs(slash_separated_groups) do
slash_separated_groups[i] = concat(group)
end
return slash_separated_groups
else
return split(arg, "/", true)
end
end
-- Implement "implications", i.e. where the presence of a given holonym causes additional holonym(s) to be added.
-- Implications apply only to categorization.
local function handle_category_implications(place_descriptions, implication_data)
for i, desc in ipairs(place_descriptions) do
if desc.holonyms then
local new_holonyms = {}
for _, holonym in ipairs(desc.holonyms) do
insert(new_holonyms, holonym)
local imp_data = m_placetypes.get_equiv_placetype_prop(holonym.placetype, function(pt)
local implication = implication_data[pt] and implication_data[pt][holonym.unlinked_placename]
if implication then
return implication
end
end)
if imp_data then
for _, holonym_to_add in ipairs(imp_data) do
local split_holonym = split_on_slash(holonym_to_add)
if #split_holonym ~= 2 then
internal_error("Invalid holonym in implications: %s", holonym_to_add)
end
local holonym_placetype, holonym_placename = unpack(split_holonym, 1, 2)
local new_holonym = {
placetype = holonym_placetype, unlinked_placename = holonym_placename
}
insert(new_holonyms, new_holonym)
m_placetypes.key_holonym_into_place_desc(desc, new_holonym)
end
end
end
desc.holonyms = new_holonyms
end
end
end
-- Split a holonym (e.g. "continent/Europe" or "country/en:Italy" or "in southern" or "r:suf/O'Higgins" or
-- "c/Austria,Germany,Czech Republic") into its components. Return a list of holonym objects (see top of file). Note
-- that if there isn't a slash in the holonym (e.g. "in southern"), the `placetype` field of the holonym will be nil.
-- Placetype aliases (e.g. "r" for "region") and placename aliases (e.g. "US" or "USA" for "United States") will be
-- expanded.
local function split_holonym(raw)
local no_display, combined_holonym = raw:match("^(!)(.*)$")
no_display = not not no_display
combined_holonym = combined_holonym or raw
local suppress_comma, combined_holonym_without_comma = combined_holonym:match("^(%*)(.*)$")
suppress_comma = not not suppress_comma
combined_holonym = combined_holonym_without_comma or combined_holonym
local holonym_parts = split_on_slash(combined_holonym)
if #holonym_parts == 1 then
-- `unlinked_placename` should not be used.
return {{display_placename = combined_holonym, no_display = no_display, suppress_comma = suppress_comma}}
end
-- Rejoin further slashes in case of slash in holonym placename, e.g. Admaston/Bromley.
local placetype = holonym_parts[1]
local placename = concat(holonym_parts, "/", 2)
-- Check for modifiers after the holonym placetype.
local split_holonym_placetype = split(placetype, ":", true)
placetype = split_holonym_placetype[1]
local affix_type
local saw_also
local saw_the
for i = 2, #split_holonym_placetype do
local modifier = split_holonym_placetype[i]
if modifier == "also" then
if saw_also then
error(("Modifier ':also' occurs twice in holonym '%s'"):format(combined_holonym))
end
saw_also = true
elseif modifier == "the" then
if saw_the then
error(("Modifier ':the' occurs twice in holonym '%s'"):format(combined_holonym))
end
saw_the = true
elseif modifier == "pref" or modifier == "Pref" or modifier == "suf" or modifier == "Suf" or
modifier == "noaff" then
if affix_type then
error(("Affix-type modifier ':%s' occurs twice in holonym '%s'"):format(modifier, combined_holonym))
end
affix_type = modifier
else
error(("Unrecognized holonym placetype modifier '%s', should be one of " ..
"'pref', 'Pref', 'suf', 'Suf', 'noaff', 'also' or 'the'"):format(modifier))
end
end
placetype = m_placetypes.resolve_placetype_aliases(placetype)
local holonyms = split_on_comma(placename)
local pluralize_affix = #holonyms > 1
local affix_holonym_index = (affix_type == "pref" or affix_type == "Pref") and 1 or affix_type == "noaff" and 0 or
#holonyms
for i, placename in ipairs(holonyms) do
-- Check for langcode before the holonym placename, but don't get tripped up by Wikipedia links, which begin
-- "[[w:...]]" or "[[wikipedia:]]".
local langcode, placename_without_langcode = rmatch(placename, "^([^%[%]]-):(.*)$")
if langcode then
placename = placename_without_langcode
end
placename = m_placetypes.resolve_placename_display_aliases(placetype, placename)
holonyms[i] = {
placetype = placetype,
display_placename = placename,
unlinked_placename = m_placetypes.remove_links_and_html(placename),
langcode = langcode,
affix_type = i == affix_holonym_index and affix_type or nil,
pluralize_affix = i == affix_holonym_index and pluralize_affix,
suppress_affix = i ~= affix_holonym_index,
no_display = no_display,
suppress_comma = suppress_comma,
continue_cat_loop = saw_also,
force_the = i == 1 and saw_the,
}
end
return holonyms
end
local get_param_mods = memoize(function()
local m_param_utils = require(parameter_utilities_module)
return m_param_utils.construct_param_mods {
{group = {"link", "q", "l", "ref"}},
{param = "eq"},
{param = "conj", set = {["and"] = true, ["or"] = true, ["and/or"] = true}, overall = true},
}
end)
local function parse_term_with_inline_modifiers(term, paramname, default_lang)
local function generate_obj(raw_term, parse_err)
local obj = require(parameter_utilities_module).generate_obj_maybe_parsing_lang_prefix {
term = raw_term,
parse_err = parse_err,
parse_lang_prefix = true,
}
obj.lang = obj.lang or default_lang
return obj
end
return require(parse_interface_module).parse_inline_modifiers(term, {
paramname = paramname,
param_mods = get_param_mods(),
generate_obj = generate_obj,
splitchar = ",",
outer_container = {},
})
end
local function parse_form_of_directive(arg, lang, form_of_overridden_args)
local form_of_directive, raw_terms = arg:match("^@([a-z -]+):(.*)$")
if not form_of_directive then
error("Misformatted @-directive: " .. dump(arg))
end
if not export.all_form_of_directives[form_of_directive] then
local known_directives = {}
for k, _ in pairs(export.all_form_of_directives) do
insert(known_directives, '"' .. k .. '"')
end
table.sort(known_directives)
error(("Unrecognized form-of directive %s in @-directive %s; recognized directives are %s"):format(
dump(form_of_directive), dump(arg), concat(known_directives, ", ")))
end
local spec = export.all_form_of_directives[form_of_directive]
local canonical_directive = form_of_directive
if spec.alias_of then
canonical_directive = spec.alias_of
spec = export.all_form_of_directives[canonical_directive]
if not spec then
internal_error("Form-of directive alias %s points to %s, which is not a directive",
"@" .. form_of_directive, canonical_directive)
elseif spec.alias_of then
internal_error("Form-of directive alias %s points to %s, which is also an alias",
"@" .. form_of_directive, canonical_directive)
end
end
local default_foreign = spec.default_foreign
local directive_param = "@" .. form_of_directive
if form_of_overridden_args and form_of_overridden_args[canonical_directive] then
raw_terms = form_of_overridden_args[canonical_directive].new_value
local new_directive = form_of_overridden_args[canonical_directive].new_directive
local new_spec = export.all_form_of_directives[new_directive]
if not new_spec then
error(("Internal error: [[Module:transclude]] passed in unrecognized replacement directive '@%s'"):
format(new_directive))
end
if new_spec.alias_of then
error(("Internal error: [[Module:transclude]] passed in replacement directive alias '@%s', " ..
"should be canonical"):format(new_directive))
end
if new_directive ~= canonical_directive then
directive_param = directive_param .. (" (replaced with @%s)"):format(new_directive)
canonical_directive = new_directive
spec = new_spec
end
default_foreign = true
end
local terms = parse_term_with_inline_modifiers(raw_terms, directive_param,
default_foreign and lang or enlang)
return {
directive = canonical_directive,
terms = terms.terms,
conj = terms.conj,
spec = spec,
}
end
-- Parse an argument containing extra information that is sometimes added to a definition, such as the capital, largest
-- city, modern name, official name, etc. `args` is the value from the parsed argument structure and can be either nil,
-- a string or a list. `spec` is the extra info spec corresponding to the type of extra info. Each value in `args` can
-- be a comma-separated list of terms with inline modifiers attached.
local function parse_extra_info_arg(args, spec, default_lang)
if not args then
return nil
end
if type(args) ~= "table" then
args = {args}
end
if not args[1] then
return nil
end
local terms = nil
local conj
for i, arg in ipairs(args) do
local this_terms = parse_term_with_inline_modifiers(arg, spec.arg .. (i == 1 and "" or i), default_lang)
local thisconj = this_terms.conj
if not conj then
conj = thisconj
elseif thisconj and conj ~= thisconj then
error(("Two different conjunctions '%s' and '%s' specified for |%s=; you only need to specify the " ..
"conjunction once"):format(conj, thisconj))
end
if not terms then
terms = this_terms.terms
else
m_table.extend(terms, this_terms.terms)
end
end
return {
spec = spec,
terms = terms,
conj = conj,
}
end
--[==[
Parse a "new-style" place description, with placetypes and holonyms surrounded by `<<...>>` amid otherwise raw text.
Return value is a place description object as documented at the top of the file. Exported for use by
[[Module:demonyms]].
]==]
function export.parse_new_style_place_desc(text, lang, form_of_directives, form_of_overridden_args)
local placetypes = {}
local segments = split(text, "<<(.-)>>")
local retval = {holonyms = {}, order = {}}
local form_of_directives_already_present = form_of_directives and not not form_of_directives[1]
for i, segment in ipairs(segments) do
if i % 2 == 1 then
insert(retval.order, {type = "raw", value = segment})
elseif segment:find("@") then
if not form_of_directives then
error(("Form-of directive '%s' not allowed in this context"):format(segment))
elseif form_of_directives_already_present then
error(("Saw form-of directive '%s' in new-style place desc followed by direct (separate-parameter) form-of directives; not allowed"):format(
segment))
elseif placetypes[1] or retval.holonyms[1] then
error(("Form-of directive '%s' must come first, before placetypes and holonyms"):format(segment))
else
local form_of_directive = parse_form_of_directive(segment, lang, form_of_overridden_args)
if not retval.order[1] or retval.order[1].type ~= "raw" or retval.order[2] then
internal_error("`retval.order` should have a single raw element: %s", retval.order)
end
form_of_directive.pretext = retval.order[1].value
retval.order[1] = nil
insert(form_of_directives, form_of_directive)
end
elseif segment:find("/") then
local holonyms = split_holonym(segment)
for j, holonym in ipairs(holonyms) do
if j > 1 then
if not holonym.no_display then
if j == #holonyms then
insert(retval.order, {type = "raw", value = " and "})
else
insert(retval.order, {type = "raw", value = ", "})
end
end
holonym.needs_article = true
end
insert(retval.holonyms, holonym)
if not holonym.no_display then
insert(retval.order, {type = "holonym", value = #retval.holonyms})
end
m_placetypes.key_holonym_into_place_desc(retval, holonym)
end
else
local treat_as, display = segment:match("^(..-):(.+)$")
if treat_as then
segment = treat_as
else
display = segment
end
-- see if the placetype segment is just qualifiers
local only_qualifiers = true
local split_segments = split(segment, " ", true)
for _, split_segment in ipairs(split_segments) do
if m_placetypes.placetype_qualifiers[split_segment] == nil then
only_qualifiers = false
break
end
end
insert(placetypes, {placetype = segment, only_qualifiers = only_qualifiers})
if only_qualifiers then
insert(retval.order, {type = "qualifier", value = display})
else
insert(retval.order, {type = "placetype", value = display})
end
end
end
if not form_of_directives_already_present and form_of_directives and form_of_directives[1] then
form_of_directives[#form_of_directives].posttext = ""
end
local final_placetypes = {}
for i, placetype in ipairs(placetypes) do
if i > 1 and placetypes[i - 1].only_qualifiers then
final_placetypes[#final_placetypes] = final_placetypes[#final_placetypes] .. " " .. placetypes[i].placetype
else
insert(final_placetypes, placetypes[i].placetype)
end
end
retval.placetypes = final_placetypes
return retval
end
--[==[
Parse one or more "new-style" place descriptions, with placetypes and holonyms surrounded by `<<...>>` amid otherwise
raw text. Multiple descriptions are separated by two semicolons in a row. Return value is a list of place description
objects as documented at the top of the file.
]==]
local function parse_conjoined_new_style_place_desc(text, lang, form_of_directives, form_of_overridden_args)
local separate_specs = split(text, ";(;[^ ]*)")
local descs = {}
for i = 1, #separate_specs do
if i % 2 == 1 then
insert(descs, export.parse_new_style_place_desc(separate_specs[i], lang, form_of_directives,
form_of_overridden_args))
form_of_directives = nil
else
descs[#descs].separator = separate_specs[i]
end
end
return descs
end
--[=[
Process numeric and "extra info" arguments into an overall place spec, as described at the top of the file.
]=]
local function parse_overall_place_spec(data)
local args, from_tcl, extra_info_overridden_set, form_of_overridden_args =
data.args, data.from_tcl, data.extra_info_overridden_set, data.form_of_overridden_args
local descs = {}
local this_desc
-- Index of separate (semicolon-separated) place descriptions within `descs`.
local desc_index = 1
-- Index of separate holonyms within a place description. 0 means we've seen no holonyms and have yet to process
-- the placetypes that precede the holonyms. 1 means we've seen no holonyms but have already processed the
-- placetypes.
local holonym_index = 0
local in_place_desc = false
local form_of_directives = {}
-- ZH: use Chinese semicolon and space characters for multi-description joiners.
local function set_desc_joiner(desc, separator)
if separator == ";" then
this_desc.joiner = zh_strings.semicolon -- ";" instead of "; "
this_desc.include_following_article = true
elseif separator == ";;" then
this_desc.joiner = " "
else
local joiner = separator:sub(2)
if rfind(joiner, "^%a") then
this_desc.joiner = " " .. joiner .. " "
else
this_desc.joiner = joiner .. " "
end
end
end
for _, arg in ipairs(args[2]) do
if arg:find("^@") then
if not (desc_index == 1 and holonym_index == 0) then
error("@-directives cannot follow place descriptions")
end
local form_of_directive = parse_form_of_directive(arg, args[1], form_of_overridden_args)
if form_of_directives[1] then
form_of_directive.pretext = ", "
else
form_of_directive.pretext = ""
end
insert(form_of_directives, form_of_directive)
elseif arg == ";" or arg:find("^;[^ ]") then
if not this_desc then
error("Saw semicolon joiner without preceding place description")
end
set_desc_joiner(this_desc, arg)
desc_index = desc_index + 1
holonym_index = 0
in_place_desc = false
else
if arg:find("<<") then
if in_place_desc then
error("New-style place description must come first or following a separator (semicolon or similar), not directly following another description")
end
in_place_desc = true
local this_descs = parse_conjoined_new_style_place_desc(arg, args[1], form_of_directives,
form_of_overridden_args)
for j, desc in ipairs(this_descs) do
this_desc = desc
if holonym_index > 0 then
desc_index = desc_index + 1
holonym_index = 0
end
if j < #this_descs then
set_desc_joiner(this_desc, this_desc.separator)
end
descs[desc_index] = this_desc
last_was_new_style = true
holonym_index = #this_desc.holonyms + 1
end
else
-- Old-style arguments can directly follow a new-style argument; they become additional holonyms
-- tacked onto the end of the holonym list, and are displayed old-style except that there is no
-- prefix before the first one following the new-style argument.
in_place_desc = true
if holonym_index == 0 then
local entry_placetypes = split_on_slash(arg)
this_desc = {placetypes = entry_placetypes, holonyms = {}}
descs[desc_index] = this_desc
holonym_index = holonym_index + 1
else
local holonyms = split_holonym(arg)
for j, holonym in ipairs(holonyms) do
if j > 1 then
-- All but the first in a multi-holonym need an article. Not for the first one because e.g.
-- {{place|en|city|s/Arizona|c/United States}} should not display as "a city in Arizona, the
-- United States". The overall first holonym in the place description gets an article if
-- needed regardless of our setting here.
holonym.needs_article = true
-- Insert "and" before the last holonym.
if j == #holonyms then
this_desc.holonyms[holonym_index] = {
-- Use the no_display value from the first holonym; it should be the same for all
-- holonyms. `unlinked_placename` should not be used.
display_placename = "and", no_display = holonyms[1].no_display
}
holonym_index = holonym_index + 1
end
end
this_desc.holonyms[holonym_index] = holonym
m_placetypes.key_holonym_into_place_desc(this_desc, this_desc.holonyms[holonym_index])
holonym_index = holonym_index + 1
end
end
end
end
end
if form_of_directives[1] and not form_of_directives[#form_of_directives].posttext then
form_of_directives[#form_of_directives].posttext =
(args.def and args.def ~= "-" or not args.def and descs[1]) and ": " or ""
end
-- Tracking code (unchanged from enwikt).
for _, desc in ipairs(descs) do
for _, entry_placetype in ipairs(desc.placetypes) do
local splits = m_placetypes.split_qualifiers_from_placetype(entry_placetype, "no canon qualifiers")
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, bare_placetype = unpack(split, 1, 3)
track("entry-placetype/" .. bare_placetype)
if this_qualifier then
track("entry-qualifier/" .. this_qualifier)
end
end
end
for _, holonym in ipairs(desc.holonyms) do
if holonym.placetype then
track("holonym-placetype/" .. holonym.placetype)
end
end
end
local extra_info = {}
for _, extra_info_spec in ipairs(export.extra_info_args) do
local extra_info_terms = parse_extra_info_arg(args[extra_info_spec.arg], extra_info_spec,
from_tcl and extra_info_overridden_set and extra_info_overridden_set[extra_info_spec.arg] and args[1] or
enlang)
if extra_info_terms then
insert(extra_info, extra_info_terms)
end
end
return {
lang = args[1],
args = args,
directives = form_of_directives,
descs = descs,
extra_info = extra_info,
}
end
-------- Definition-generating functions
-- Return a string with the wikilinks to the ZH translations of the word.
-- ZH: joins multiple translations with "," (full-width comma) instead of ", ".
local function get_translations(transl, ids)
local ret = {}
for i, t in ipairs(transl) do
local arg_transls = split_on_comma(t)
local arg_ids = ids[i]
if arg_ids then
arg_ids = split_on_comma(arg_ids)
if #arg_transls ~= #arg_ids then
error(("Saw %s translation%s in t%s=%s but %s ID%s in tid%s=%s"):format(
#arg_transls, #arg_transls > 1 and "s" or "", i == 1 and "" or i, t, #arg_ids,
#arg_ids > 1 and "'s" or "", i == 1 and "" or i, ids[i]))
end
end
for j, arg_transl in ipairs(arg_transls) do
insert(ret, link(arg_transl, "en", arg_ids and arg_ids[j] or nil))
end
end
return concat(ret, zh_strings.trans_sep) -- "," instead of ", "
end
-- Chinese has no articles; these stubs keep the call-sites intact.
local function get_placename_article(decorated_placename, placetypes, placename, suppress_holonym_use_the_check)
return nil
end
local function get_holonym_article(decorated_placename, place_desc, holonym_index)
return nil
end
-- Convert a holonym into display format. For ZH:
-- * No article prepended (Chinese has no articles).
-- * Both prefix and suffix affix types append the zh_suffix (e.g. "州", "省") directly to the linked name,
-- instead of the English "placetype of placename" / "placename placetype" construction.
-- * Display handlers are applied unchanged (they may add text based on the holonym's surrounding context).
local function format_holonym(place_desc, holonym_index, needs_article)
local holonym = place_desc.holonyms[holonym_index]
if holonym.no_display then
return ""
end
-- needs_article and force_the are not used in Chinese.
local output = holonym.display_placename
local placetype = holonym.placetype
local affix_type_pt_data, affix_type, affix_is_prefix, affix, prefix, suffix, no_affix_strings
local pt_equiv_for_affix_type, already_seen_affix, need_affix
local affix_pt_data, pt_equiv_for_affix
-- Implement display handlers (unchanged from enwikt).
local display_handler = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt) return placetype_data[pt] and placetype_data[pt].display_handler end)
if display_handler then
output = display_handler(placetype, output)
end
if not holonym.suppress_affix then
-- Affix detection logic is unchanged from enwikt; only the rendering differs below.
affix_type_pt_data, pt_equiv_for_affix_type = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt)
local cdpt = placetype_data[pt]
return cdpt and cdpt.affix_type and cdpt or nil
end
)
affix_pt_data, pt_equiv_for_affix = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt)
local cdpt = placetype_data[pt]
return cdpt and (cdpt.affix_type or cdpt.affix or cdpt.prefix or cdpt.suffix) and cdpt or nil
end
)
if affix_type_pt_data then
affix_type = affix_type_pt_data.affix_type
need_affix = true
end
if affix_pt_data then
prefix = affix_pt_data.prefix or affix_pt_data.affix
suffix = affix_pt_data.suffix or affix_pt_data.affix
need_affix = true
end
no_affix_strings = affix_pt_data and affix_pt_data.no_affix_strings or
affix_type_pt_data and affix_type_pt_data.no_affix_strings
if holonym.affix_type and placetype then
affix_type = holonym.affix_type
prefix = prefix or placetype
suffix = suffix or placetype
need_affix = true
end
if need_affix then
affix_is_prefix = affix_type == "pref" or affix_type == "Pref"
if affix_is_prefix then
affix = prefix
else
affix = suffix
end
if not affix then
if not pt_equiv_for_affix_type then
internal_error("Something wrong, `pt_equiv_for_affix_type` not set processing holonym: %s",
holonym)
end
affix = pt_equiv_for_affix_type.placetype
if not affix then
internal_error("Something wrong, no affix could be located in `pt_equiv_for_affix_type` for " ..
"holonym %s: %s", holonym, pt_equiv_for_affix_type)
end
end
no_affix_strings = no_affix_strings or lc(affix)
-- ZH: skip pluralize_affix (Chinese doesn't pluralize)
end
end
-- ZH: resolve zh_suffix for the affix placetype before linking.
local zh_sfx_to_append = nil
if need_affix then
local _, zh_sfx = m_zh_data.get_zh_placetype_props(affix, m_placetypes)
if zh_sfx then
local zh_sfx_str = m_zh_data.format_zh_name(zh_sfx)
-- Check if zh_suffix already present in the unlinked output.
local unlinked = m_placetypes.remove_links_and_html(output)
if not unlinked:find(zh_sfx_str, 1, true) then
zh_sfx_to_append = zh_sfx_str
end
end
end
output = link(output, holonym.langcode or placetype and "en" or nil)
-- ZH: for both pref and suf, append zh_suffix directly after the linked name.
-- (EN prefix construction "placetype of placename" is not used in Chinese.)
if zh_sfx_to_append then
output = output .. zh_sfx_to_append
end
-- No article for Chinese.
return output
end
-- Format holonyms for a ZH old-style place description.
-- Collects all holonyms, filters "and"/"or" connectors, reverses for big→small containment order,
-- groups consecutive same-type holonyms (peer locations), then joins with ZH enumeration (、/和).
-- Returns the concatenated holonym string, e.g. "美國賓夕法尼亞州", "波蘭、白俄羅斯和烏克蘭".
local function format_holonyms_zh(place_desc)
local holonyms = place_desc.holonyms
if not holonyms or #holonyms == 0 then
return ""
end
-- Collect non-"and"/"or" holonym items with their original indices.
local items = {}
for i, h in ipairs(holonyms) do
if not h.no_display then
local dname = h.display_placename
if dname ~= "and" and dname ~= "or" then
insert(items, {holonym_index = i, placetype = h.placetype})
end
end
end
-- Reverse for big→small order.
local reversed = {}
for i = #items, 1, -1 do
insert(reversed, items[i])
end
-- Group consecutive items with the same placetype (peers like multiple countries).
-- Raw-text holonyms (no placetype) break any current structural group.
local groups = {}
local i = 1
while i <= #reversed do
local item = reversed[i]
if not item.placetype then
-- Raw text (e.g. "南部", "東北部") forms its own singleton group.
local h = holonyms[item.holonym_index]
insert(groups, {type = "raw", text = h.display_placename})
i = i + 1
else
-- Structural holonym: collect consecutive ones of the same placetype.
local group = {type = "structural", items = {item}}
local pt = item.placetype
i = i + 1
while i <= #reversed do
local next_item = reversed[i]
if next_item.placetype == pt then
insert(group.items, next_item)
i = i + 1
else
break
end
end
insert(groups, group)
end
end
-- Format each group and assemble.
local parts = {}
for _, group in ipairs(groups) do
if group.type == "raw" then
insert(parts, group.text)
else
local formatted = {}
for _, item in ipairs(group.items) do
insert(formatted, format_holonym(place_desc, item.holonym_index, false))
end
if #formatted == 1 then
insert(parts, formatted[1])
elseif #formatted == 2 then
insert(parts, formatted[1] .. zh_strings.and_conj .. formatted[2])
else
local last = table.remove(formatted)
insert(parts, concat(formatted, zh_strings.enum_sep) .. zh_strings.and_conj .. last)
end
end
end
return concat(parts)
end
-- Get the Chinese display name for a single (possibly qualified) placetype.
-- Strips qualifiers, looks up zh_name via m_zh_data, and prepends translated qualifier text.
-- `first_holonym_placetype` enables context-sensitive names (e.g. capital city → 首都/省會/首府).
local function get_zh_placetype_name(placetype, first_holonym_placetype)
local resolved_pt = m_placetypes.resolve_placetype_aliases(placetype)
local zh_name, _, zh_by_holonym = m_zh_data.get_zh_placetype_props(resolved_pt, m_placetypes)
if zh_name then
local resolved = m_zh_data.resolve_zh_name(zh_name, zh_by_holonym, first_holonym_placetype)
return m_zh_data.format_zh_name(resolved)
end
-- Fallback to English name; add tracking for missing zh_data entries.
track("missing-zh-placetype/" .. tostring(placetype))
return placetype
end
-- Format a single entry placetype (possibly with qualifiers) for ZH display.
-- Strips qualifiers from the placetype, translates each qualifier via zh_qualifiers,
-- and prepends them to the Chinese placetype name.
local function format_one_zh_placetype(pt, first_holonym_placetype)
-- Try progressive qualifier splits; use the first that has a zh_name entry.
local splits = m_placetypes.split_qualifiers_from_placetype(pt)
local qualifier_prefix = ""
for _, sp in ipairs(splits) do
local prev_qualifier, this_qualifier, bare_pt = unpack(sp, 1, 3)
-- Accumulate qualifier strings.
local q_str = ""
if prev_qualifier then
q_str = (m_zh_data.zh_qualifiers[prev_qualifier] or prev_qualifier) ..
(m_zh_data.zh_qualifiers[this_qualifier] or (this_qualifier or ""))
elseif this_qualifier then
q_str = m_zh_data.zh_qualifiers[this_qualifier] or this_qualifier
end
local zh_n = get_zh_placetype_name(bare_pt, first_holonym_placetype)
if zh_n ~= bare_pt then
-- Found a known ZH entry; use it.
return q_str .. zh_n
end
qualifier_prefix = q_str
end
-- Fallback: just translate the full (possibly unrecognized) placetype.
return qualifier_prefix .. get_zh_placetype_name(pt, first_holonym_placetype)
end
-- Build the ZH entry placetype description from the `placetypes` list.
-- Handles "and"/"or" splitting (e.g. "城市/and/市鎮" → "城市和市鎮"),
-- multiple placetypes without and/or (joined with "、...和"),
-- and context-sensitive names via first_holonym_placetype.
local function get_zh_entry_placetype_desc(placetypes, first_holonym_placetype)
local is_ignorable = m_placetypes.placetype_is_ignorable
-- Find last and/or position.
local and_or_pos
for i, pt in ipairs(placetypes) do
if pt == "and" or pt == "or" then
and_or_pos = i
end
end
if and_or_pos then
-- Split into group before and group after the conjunction.
local group1, group2 = {}, {}
for i = 1, and_or_pos - 1 do
if not is_ignorable(placetypes[i]) then
insert(group1, format_one_zh_placetype(placetypes[i], first_holonym_placetype))
end
end
for i = and_or_pos + 1, #placetypes do
if not is_ignorable(placetypes[i]) then
insert(group2, format_one_zh_placetype(placetypes[i], first_holonym_placetype))
end
end
local conj_str = placetypes[and_or_pos] == "or" and "或" or zh_strings.and_conj
local all = {}
for _, v in ipairs(group1) do insert(all, v) end
for _, v in ipairs(group2) do insert(all, v) end
if #all == 0 then return "" end
if #all == 1 then return all[1] end
local last = table.remove(all)
return concat(all, zh_strings.enum_sep) .. conj_str .. last
else
-- No explicit and/or: collect all non-ignorable placetypes.
local formatted = {}
for _, pt in ipairs(placetypes) do
if not is_ignorable(pt) then
insert(formatted, format_one_zh_placetype(pt, first_holonym_placetype))
end
end
if #formatted == 0 then return "" end
if #formatted == 1 then return formatted[1] end
local last = table.remove(formatted)
return concat(formatted, zh_strings.enum_sep) .. zh_strings.and_conj .. last
end
end
-- Return the ZH description of a placetype for use in new-style <<placetype>> segments.
local function get_placetype_description(placetype)
return format_one_zh_placetype(placetype, nil)
end
-- Return the ZH description of a qualifier for use in new-style <<qualifier>> segments.
local function get_qualifier_description(qualifier)
-- Trim to just the qualifier word (split_qualifiers_from_placetype requires a trailing non-qualifier word).
local splits = m_placetypes.split_qualifiers_from_placetype(qualifier .. " foo")
local sp = splits[#splits]
local prev_qualifier, this_qualifier = unpack(sp, 1, 2)
if this_qualifier then
local q = m_zh_data.zh_qualifiers[this_qualifier] or this_qualifier
if prev_qualifier then
return (m_zh_data.zh_qualifiers[prev_qualifier] or prev_qualifier) .. q
end
return q
end
return qualifier
end
-- Format a set of form-of directive terms (unchanged from enwikt, only conjunction uses zh_strings).
local function format_form_of_directive(overall_place_spec, directive_terms, ucfirst, from_tcl)
local formatted_terms = {}
local placetypes
if not overall_place_spec.descs[2] then
placetypes = overall_place_spec.descs[1].placetypes
else
placetypes = {}
for _, desc in ipairs(overall_place_spec.descs) do
m_table.extend(placetypes, desc.placetypes)
end
end
for _, termobj in ipairs(directive_terms.terms) do
local placename_article
if not termobj.alt and termobj.term and not termobj.term:find("%[%[") then
placename_article = get_placename_article(termobj.term, placetypes)
end
local linked_term = m_links.full_link(termobj, "term", nil, "show qualifiers")
linked_term = "<span class='form-of-definition-link'>" .. linked_term .. "</span>"
if termobj.eq then
linked_term = linked_term .. " (= " .. m_links.full_link {term = termobj.eq, lang = enlang} .. ")"
end
if placename_article then
linked_term = placename_article .. " " .. linked_term
end
insert(formatted_terms, linked_term)
end
local spec = directive_terms.spec
local text = spec.text
if type(text) == "function" then
text = text(overall_place_spec)
end
if text == "+" then
text = directive_terms.directive
end
if ucfirst then
text = m_strutils.ucfirst(text)
end
if not from_tcl then
local tracking_prefix = "form-of/" .. directive_terms.directive
track(tracking_prefix)
local langcode = overall_place_spec.lang:getCode()
local full_langcode = overall_place_spec.lang:getFullCode()
track(tracking_prefix .. "/" .. langcode)
if full_langcode ~= langcode then
track(tracking_prefix .. "/" .. full_langcode)
end
if full_langcode ~= "en" then
track(tracking_prefix .. "/non-english")
end
end
return (require(form_of_module).format_form_of {
text = text,
lemmas = m_table.serialCommaJoin(formatted_terms, {conj = directive_terms.conj or spec.conjunction or zh_strings.and_conj}),
lemma_classes = false,
})
end
-- Format extra-info terms (capital, largest city, modern name, etc.) for ZH.
-- * Labels come from m_zh_data.zh_extra_info_labels (or zh_capital_label_by_holonym_type for capital).
-- * Separator: "。" + label in sentence style; ";" + label otherwise.
-- * Multiple terms joined with 、/和 instead of serial comma.
-- * auto_plural is skipped (Chinese doesn't pluralize).
local function format_extra_info(overall_place_spec, extra_info_terms, sentence_style)
local formatted_terms = {}
for _, termobj in ipairs(extra_info_terms.terms) do
insert(formatted_terms, m_links.full_link(termobj, nil, nil, "show qualifiers"))
end
local spec = extra_info_terms.spec
-- Resolve ZH label: look up by spec.arg, then spec.text as fallback.
local zh_label = m_zh_data.zh_extra_info_labels[spec.arg]
if not zh_label then
-- Try spec.text as the lookup key (e.g. "capital and largest city").
local spec_text = spec.text
if type(spec_text) == "function" then
spec_text = spec_text(overall_place_spec)
end
zh_label = m_zh_data.zh_extra_info_labels[spec_text] or spec_text or spec.arg
end
-- Context-sensitive "capital" label based on first holonym type (首都/省會/首府/縣治…).
if spec.arg == "capital" then
if overall_place_spec.descs and overall_place_spec.descs[1] and overall_place_spec.descs[1].holonyms then
for _, h in ipairs(overall_place_spec.descs[1].holonyms) do
if h.placetype then
local ctx_label = m_zh_data.zh_capital_label_by_holonym_type[h.placetype]
if ctx_label then
zh_label = ctx_label
end
break
end
end
end
end
local text = zh_label
if spec.with_colon then
text = text .. ":" -- full-width colon
end
if sentence_style and spec.match_sentence_style then
text = "。" .. text
else
text = zh_strings.semicolon .. text
end
-- Join terms with ZH enumeration.
local conj = extra_info_terms.conj or zh_strings.and_conj
local joined
if #formatted_terms == 0 then
joined = ""
elseif #formatted_terms == 1 then
joined = formatted_terms[1]
elseif #formatted_terms == 2 then
joined = formatted_terms[1] .. conj .. formatted_terms[2]
else
local last = table.remove(formatted_terms)
joined = concat(formatted_terms, zh_strings.enum_sep) .. conj .. last
end
return text .. joined
end
-- Format an old-style place description for ZH display.
-- Chinese pattern: [位於|""][holonym_string][的][zh_placetype_name]
-- * Holonyms are reversed (big→small), grouped, and joined with 、/和.
-- * "位於" is prepended for "in"-type placetypes; omitted for "of"-type (e.g. capitals).
-- * args.a (article override) is used as a prefix to the placetype name.
local function format_old_style_place_desc_for_display(args, place_desc, desc_index, with_article, ucfirst_flag)
local placetypes = place_desc.placetypes
-- Determine the entry placetype (last non-ignorable, non-conjunction item) for preposition lookup.
local entry_placetype_for_prep = nil
for i = #placetypes, 1, -1 do
local pt = placetypes[i]
if not m_placetypes.placetype_is_ignorable(pt) and pt ~= "and" and pt ~= "or" then
entry_placetype_for_prep = pt
break
end
end
-- Determine first structured holonym placetype for context-sensitive zh_name lookups.
local first_holonym_placetype = nil
if place_desc.holonyms then
for _, h in ipairs(place_desc.holonyms) do
if h.placetype then
first_holonym_placetype = h.placetype
break
end
end
end
-- Build the Chinese placetype description (possibly with qualifiers and multiple types).
local zh_pt_name = get_zh_entry_placetype_desc(placetypes, first_holonym_placetype)
-- Handle args.a (article override): used as a direct prefix in Chinese, e.g. a=盎格魯撒克遜 → "盎格魯撒克遜王國".
if with_article and desc_index == 1 and args.a then
zh_pt_name = args.a .. zh_pt_name
end
-- Build holonym string (reversed, grouped, ZH-joined).
local holonym_str = ""
if place_desc.holonyms and #place_desc.holonyms > 0 then
holonym_str = format_holonyms_zh(place_desc)
end
-- Determine preposition style ("in" → 位於…的; "of" → …的 with no 位於).
local use_wei_yu = true
if entry_placetype_for_prep then
local prep = m_placetypes.get_placetype_entry_preposition(entry_placetype_for_prep)
if prep == "of" then
use_wei_yu = false
end
end
-- Assemble final string.
if holonym_str ~= "" then
if use_wei_yu then
return zh_strings.in_preposition .. holonym_str .. zh_strings.de_particle .. zh_pt_name
else
return holonym_str .. zh_strings.de_particle .. zh_pt_name
end
else
return zh_pt_name
end
end
--[==[
Get the full gloss (Chinese description) of a new-style place description. New-style place descriptions are
specified with a single string containing raw text interspersed with placetypes and holonyms surrounded by `<<...>>`.
Exported for use by [[Module:demonyms]].
]==]
function export.format_new_style_place_desc_for_display(args, place_desc, with_article)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
-- args.a not used in Chinese (no article system).
local max_holonym = 0
for _, order in ipairs(place_desc.order) do
local segment_type, segment = order.type, order.value
if segment_type == "raw" then
ins(segment)
elseif segment_type == "placetype" then
ins(get_placetype_description(segment))
elseif segment_type == "qualifier" then
ins(get_qualifier_description(segment))
elseif segment_type == "holonym" then
ins(format_holonym(place_desc, segment, false))
if segment > max_holonym then
max_holonym = segment
end
else
internal_error("Unrecognized segment type %s", segment_type)
end
end
if place_desc.holonyms and max_holonym < #place_desc.holonyms then
local holonym_no_prefix = true
for holonym_index = max_holonym + 1, #place_desc.holonyms do
-- Append remaining holonyms with a space prefix (no "in"/"of" for new-style).
ins(" " .. format_holonym(place_desc, holonym_index, false))
holonym_no_prefix = false
end
end
return concat(parts)
end
-- Return a string with the gloss (the description of the place itself, as opposed to translations).
-- `sentence_style` controls whether extra-info uses "。" (sentence) or ";" (semicolon) separation.
local function get_display_form(data)
local overall_place_spec, ucfirst, sentence_style, drop_extra_info, extra_info_overridden_set, from_tcl =
data.overall_place_spec, data.ucfirst, data.sentence_style, data.drop_extra_info,
data.extra_info_overridden_set, data.from_tcl
local args = overall_place_spec.args
local parts = {}
local function ins(txt)
table.insert(parts, txt)
end
if overall_place_spec.directives and overall_place_spec.directives[1] then
for i, directive_terms in ipairs(overall_place_spec.directives) do
ins(directive_terms.pretext)
if directive_terms.pretext ~= "" then
ucfirst = false
end
if not args.def or args.def == "-" then
ins(format_form_of_directive(overall_place_spec, directive_terms, ucfirst, from_tcl))
ucfirst = false
if i == #overall_place_spec.directives and directive_terms.posttext then
ins(directive_terms.posttext)
end
end
end
end
if args.def == "-" then
return concat(parts)
end
if args.def then
if args.def:find("<<") then
local def_desc = export.parse_new_style_place_desc(args.def, args[1])
ins(export.format_new_style_place_desc_for_display({}, def_desc, false))
else
ins(args.def)
end
else
local include_article = true
for n, desc in ipairs(overall_place_spec.descs) do
if desc.order then
ins(export.format_new_style_place_desc_for_display(args, desc, n == 1))
else
ins(format_old_style_place_desc_for_display(args, desc, n, include_article, ucfirst))
end
if desc.joiner then
ins(desc.joiner)
end
include_article = desc.include_following_article
ucfirst = false
end
end
local addl = args.addl
if addl then
if addl:find("^[;:]") then
ins(addl)
elseif addl:find("^_") then
ins(" " .. addl:sub(2))
else
ins("," .. addl)
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
if not drop_extra_info or extra_info_terms.spec.display_even_when_dropped or
extra_info_overridden_set and extra_info_overridden_set[extra_info_terms.spec.arg] then
ins(format_extra_info(overall_place_spec, extra_info_terms, sentence_style))
end
end
return concat(parts)
end
-- Return the definition line.
-- ZH: sentence_style is always true; ucfirst is always false (no case in Chinese);
-- parentheses around glosses are full-width ().
local function get_def(data)
local overall_place_spec, from_tcl, drop_extra_info, extra_info_overridden_set, translation_follows =
data.overall_place_spec, data.from_tcl, data.drop_extra_info, data.extra_info_overridden_set,
data.translation_follows
local args = overall_place_spec.args
local sentence_style = true -- always sentence style in Chinese
local ucfirst = false -- Chinese has no case
if #args.t > 0 then
local gloss = get_display_form {
overall_place_spec = overall_place_spec,
ucfirst = false,
sentence_style = false,
drop_extra_info = drop_extra_info,
extra_info_overridden_set = extra_info_overridden_set,
from_tcl = from_tcl,
}
if from_tcl and not args.tcl_nolc then
gloss = m_strutils.lcfirst(gloss)
end
if translation_follows then
return (gloss == "" and "" or gloss .. ":") .. get_translations(args.t, args.tid)
else
return get_translations(args.t, args.tid) ..
(gloss == "" and "" or zh_strings.paren_open .. gloss .. zh_strings.paren_close)
end
else
return get_display_form {
overall_place_spec = overall_place_spec,
ucfirst = ucfirst,
sentence_style = sentence_style,
drop_extra_info = drop_extra_info,
extra_info_overridden_set = extra_info_overridden_set,
from_tcl = from_tcl,
}
end
end
---------- Functions for the category wikicode
-- The code in this section finds the categories to which a given place belongs. See enwikt [[Module:place]]
-- for detailed documentation of the algorithm.
--[=[
Find the appropriate category specs for a given place description and placetype.
See enwikt [[Module:place]] for detailed documentation.
]=]
local function find_placetype_cat_specs(data)
local entry_placetype, place_desc, first_holonym_index, overriding_holonym, from_demonym =
data.entry_placetype, data.place_desc, data.first_holonym_index, data.overriding_holonym, data.from_demonym
local form_of_directive = data.form_of_directive
local function fetch_cat_specs(holonym_to_match, index, no_fallback)
local holonym_placetype = holonym_to_match.placetype
if not holonym_placetype then
return nil
end
local holonym_placename = holonym_to_match.unlinked_placename
if not holonym_placename then
internal_error("Missing unlinked_placename in holonym (index %s): %s", index, holonym_to_match)
end
local cat_specs, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
return m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt) return m_placetypes.political_division_cat_handler {
entry_placetype = equiv_entry_pt,
holonym_placetype = equiv_holonym_pt,
holonym_placename = holonym_placename,
holonym_index = index,
place_desc = place_desc,
from_demonym = from_demonym,
} end)
end,
{no_fallback = no_fallback, form_of_directive = form_of_directive}
)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
local cat_handler, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
local entry_placetype_data = m_placetypes.placetype_data[equiv_entry_pt]
if entry_placetype_data and entry_placetype_data.cat_handler then
return entry_placetype_data.cat_handler
end
end,
{no_fallback = no_fallback, form_of_directive = form_of_directive}
)
if cat_handler then
local cat_specs = m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt) return cat_handler {
entry_placetype = equiv_entry_placetype_and_qualifier.placetype,
holonym_placetype = equiv_holonym_pt,
holonym_placename = holonym_placename,
holonym_index = index,
place_desc = place_desc,
from_demonym = from_demonym,
} end)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
end
if not no_fallback then
local cat_specs, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
local entry_placetype_data = m_placetypes.placetype_data[equiv_entry_pt]
if entry_placetype_data then
return m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt)
return entry_placetype_data[equiv_holonym_pt .. "/*"]
end)
end
end,
{form_of_directive = form_of_directive}
)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
end
return nil
end
if overriding_holonym then
local cat_specs, fetched_entry_placetype = fetch_cat_specs(overriding_holonym, nil)
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = overriding_holonym,
}
end
else
-- First pass: no fallback (exact entry placetype match only).
for i, holonym in ipairs(place_desc.holonyms) do
if first_holonym_index and i < first_holonym_index then
-- continue
else
local cat_specs, fetched_entry_placetype = fetch_cat_specs(holonym, i, "no_fallback")
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = holonym,
triggering_holonym_index = i,
}
end
end
end
-- Second pass: with fallback.
for i, holonym in ipairs(place_desc.holonyms) do
if first_holonym_index and i < first_holonym_index then
-- continue
else
local cat_specs, fetched_entry_placetype = fetch_cat_specs(holonym, i)
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = holonym,
triggering_holonym_index = i,
}
end
end
end
end
return nil
end
-- Turn a list of category specs (see comment at section top) into the corresponding categories
-- (minus the language code prefix).
local function cat_specs_to_categories(place_desc, cat_data)
local all_cats = {}
local cat_specs, entry_placetype, triggering_holonym, triggering_holonym_index =
cat_data.cat_specs, cat_data.entry_placetype, cat_data.triggering_holonym, cat_data.triggering_holonym_index
if triggering_holonym then
for _, cat_spec in ipairs(cat_specs) do
local cat
if cat_spec == true then
cat = m_placetypes.pluralize_placetype(entry_placetype, "ucfirst") .. " " ..
m_placetypes.get_placetype_entry_preposition(entry_placetype) .. " +++"
else
cat = cat_spec
end
if cat:find("%+%+%+") then
local group, key, spec, container_trail = m_placetypes.find_matching_holonym_location {
holonym_placetype = triggering_holonym.placetype,
holonym_placename = triggering_holonym.unlinked_placename,
holonym_index = triggering_holonym_index,
place_desc = place_desc,
}
if group then
cat = cat:gsub("%+%+%+", m_strutils.replacement_escape(m_placetypes.get_prefixed_key(key, spec)))
insert(all_cats, cat)
else
mw.log(("Unable to insert category for cat spec '%s' because holonym '%s/%s' did not match a " ..
"known location"):format(cat, triggering_holonym.placetype, triggering_holonym.unlinked_placename))
track("cant-match-holonym-for-category-spec")
end
else
insert(all_cats, cat)
end
end
else
for _, cat_spec in ipairs(cat_specs) do
local cat
if cat_spec == true then
cat = m_placetypes.pluralize_placetype(entry_placetype, "ucfirst")
else
cat = cat_spec
if cat:find("%+%+%+") then
internal_error("Category %s contains +++ but there is no holonym to substitute", cat)
end
end
insert(all_cats, cat)
end
end
return all_cats
end
-- Return the categories (without initial lang code) that should be added to the entry, given the place description
-- and a particular entry placetype.
local function get_placetype_cats(place_desc, entry_placetype, from_demonym, form_of_directive)
local cats = {}
local first_holonym_index = 1
while first_holonym_index <= #place_desc.holonyms do
local cat_data = find_placetype_cat_specs {
entry_placetype = entry_placetype,
place_desc = place_desc,
first_holonym_index = first_holonym_index,
from_demonym = from_demonym,
form_of_directive = form_of_directive,
}
if not cat_data then
break
end
local triggering_holonym = cat_data.triggering_holonym
if not triggering_holonym then
internal_error("find_placetype_cat_specs should have returned a triggering holonym: %s", cat_data)
end
extend(cats, cat_specs_to_categories(place_desc, cat_data))
first_holonym_index = cat_data.triggering_holonym_index
local equiv_triggering_placetypes = m_placetypes.get_placetype_equivs(triggering_holonym.placetype,
{no_fallback = true})
for _, equiv in ipairs(equiv_triggering_placetypes) do
local other_holonyms_of_same_type = place_desc.holonyms_by_placetype[equiv.placetype]
if other_holonyms_of_same_type then
for _, other_placename_of_same_type in ipairs(other_holonyms_of_same_type) do
if other_placename_of_same_type ~= triggering_holonym.unlinked_placename then
local overriding_holonym = {
placetype = triggering_holonym.placetype,
unlinked_placename = other_placename_of_same_type,
}
local other_cat_data = find_placetype_cat_specs {
entry_placetype = entry_placetype,
place_desc = place_desc,
overriding_holonym = overriding_holonym,
from_demonym = from_demonym,
form_of_directive = form_of_directive,
}
if other_cat_data then
extend(cats, cat_specs_to_categories(place_desc, other_cat_data))
end
end
end
end
end
first_holonym_index = first_holonym_index + 1
while first_holonym_index <= #place_desc.holonyms do
if place_desc.holonyms[first_holonym_index].continue_cat_loop then
break
end
first_holonym_index = first_holonym_index + 1
end
end
if cats[1] then
return cats
end
local entry_pt_default, equiv_entry_placetype_and_qualifier =
m_placetypes.get_equiv_placetype_prop(entry_placetype, function(pt)
return m_placetypes.placetype_data[pt] and m_placetypes.placetype_data[pt].default
end,
{form_of_directive = form_of_directive})
if entry_pt_default then
return cat_specs_to_categories(place_desc, {
cat_specs = entry_pt_default,
entry_placetype = equiv_entry_placetype_and_qualifier.placetype,
})
end
return {}
end
--[==[
Iterate through each type of place and return a list of the categories that need to be added to the entry.
See enwikt [[Module:place]] for detailed documentation.
]==]
function export.get_cats(args, overall_place_spec, from_demonym)
local cats = {}
local place_descriptions = overall_place_spec.descs
handle_category_implications(place_descriptions, m_placetypes.cat_implications)
m_placetypes.augment_holonyms_with_container(place_descriptions)
if overall_place_spec.directives then
for _, directive_terms in ipairs(overall_place_spec.directives) do
local spec_cats = directive_terms.spec.cat
if spec_cats then
if type(spec_cats) == "string" then
spec_cats = {spec_cats}
end
for _, spec_cat in ipairs(spec_cats) do
insert(cats, spec_cat)
end
end
if directive_terms.spec.type_prefix then
for _, place_desc in ipairs(place_descriptions) do
for _, placetype in ipairs(place_desc.placetypes) do
if not m_placetypes.placetype_is_ignorable(placetype) then
extend(cats, get_placetype_cats(place_desc, placetype, from_demonym,
directive_terms.spec.type_prefix))
end
end
end
end
end
end
if not from_demonym then
local bare_categories = m_placetypes.get_bare_categories(args, overall_place_spec)
extend(cats, bare_categories)
end
for _, place_desc in ipairs(place_descriptions) do
if not from_demonym then
for _, placetype in ipairs(place_desc.placetypes) do
if not m_placetypes.placetype_is_ignorable(placetype) then
extend(cats, get_placetype_cats(place_desc, placetype))
end
end
end
extend(cats, get_placetype_cats(place_desc, "*", from_demonym))
end
if args.cat then
for _, cat in ipairs(args.cat) do
local split_cats = split_on_comma(cat)
extend(cats, split_cats)
end
end
return cats
end
-- Return the category wikicode for a list of categories.
-- ZH: uses `lang:getFullName() .. " " .. cat` format for regular categories (same as cln: format in enwikt),
-- matching zhwikt's convention of "漢語 XX" category names instead of "zh:XX".
local function format_cats(lang, cats, sort_key)
local full_cats = {}
local langname = lang:getFullName()
for _, cat in ipairs(cats) do
local cln_cat = cat:match("^cln:(.*)$")
if cln_cat then
insert(full_cats, langname .. " " .. cln_cat)
else
-- ZH: use langname prefix instead of langcode:cat
insert(full_cats, langname .. " " .. cat)
end
end
return require(utilities_module).format_categories(full_cats, lang, sort_key, nil,
force_cat or m_placetypes.get_force_cat())
end
----------- Main entry point
--[==[
Implementation of {{tl|place}}. Meant to be callable from another module.
See enwikt [[Module:place]] for full documentation of the `data` argument fields.
]==]
function export.format(data)
local template_args = data.template_args
local list_param = {list = true}
local boolean_param = {type = "boolean"}
local params = {
[1] = {required = true, type = "language", default = "und"},
[2] = {required = true, list = true},
["t"] = list_param,
["tid"] = {list = true, allow_holes = true},
["cat"] = list_param,
["nocat"] = boolean_param,
["nocap"] = boolean_param,
["sort"] = true,
["pagename"] = true, -- for testing or documentation purposes
["a"] = true,
["addl"] = true,
["def"] = true,
-- params that are only used when transcluding using {{tcl}}/{{transclude}}, to transmit information to {{tcl}}.
["tcl"] = true,
["tcl_t"] = list_param,
["tcl_tid"] = list_param,
["tcl_nolb"] = true,
["tcl_nolc"] = boolean_param,
["tcl_noextratext"] = boolean_param,
}
-- add "extra info" parameters
for _, extra_arg_spec in ipairs(export.extra_info_args) do
params[extra_arg_spec.arg] = list_param
end
if template_args.def == "" then
error("Cannot currently pass def= as an empty parameter; use def=- if you want to suppress the definition display")
end
local args = require("Module:parameters").process(template_args, params)
if args.a then
track("a")
end
data.args = args
local overall_place_spec = parse_overall_place_spec(data)
data.overall_place_spec = overall_place_spec
return get_def(data) .. (
args.nocat and "" or format_cats(args[1], export.get_cats(args, overall_place_spec), args.sort))
end
--[==[
Actual entry point of {{tl|place}}.
]==]
function export.show(frame)
return export.format {
template_args = frame:getParent().args,
}
end
return export
bm0ittydn4vhceu54if779x4m0gyuas
9758131
9758128
2026-05-12T23:58:03Z
TongcyDai
53191
9758131
Scribunto
text/plain
local export = {}
local force_cat = false -- set to true for testing
local m_placetypes = require("Module:place/placetypes")
local m_links = require("Module:links")
local memoize = require("Module:memoize")
local m_strutils = require("Module:string utilities")
local m_table = require("Module:table")
-- Chinese localization data (zh_name, zh_suffix, qualifiers, extra-info labels, etc.)
local m_zh_data = require("Module:place/data/sandbox")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
local form_of_module = "Module:form of"
local languages_module = "Module:languages"
local parse_interface_module = "Module:parse interface"
local parse_utilities_module = "Module:parse utilities"
local parameter_utilities_module = "Module:parameter utilities"
local utilities_module = "Module:utilities"
local enlang = require(languages_module).getByCode("en")
local rmatch = m_strutils.match
local rfind = m_strutils.find
local ulen = m_strutils.len
local split = m_strutils.split
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local pluralize = require(en_utilities_module).pluralize
local extend = m_table.extend
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local internal_error = m_placetypes.internal_error
local process_error = m_placetypes.process_error
local placetype_data = m_placetypes.placetype_data
-- Shorthand for the ZH localization string table.
local zh_strings = m_zh_data.zh_strings
--[==[
ZH fork of [[Module:place]] (enwikt). Architecture and data structures are identical to the English version;
only the display-formatting functions are changed to produce Chinese-language definitions.
Key structural differences from enwikt:
* Old-style holonyms are reversed (big→small containment order) and joined with 、/和 rather than "in X, Y".
* Sentence pattern: 位於[holonyms]的[placetype] (or [holonyms]的[placetype] for "of"-type placetypes).
* No articles (a/an/the) in generated text.
* Pref/suf holonym affixes append the Chinese zh_suffix instead of English "placetype of X".
* Translations are joined with "," (full-width comma); parenthetical glosses use ().
* Extra-info labels (capital, largest city, etc.) come from Module:place/data zh_extra_info_labels.
* sentence_style is always true for ZH (extra info uses "。" separator, not ";").
]==]
--[==[ var:
List specifying the allowed form-of directives, used for former names, official names, abbreviations, etc. of places.
The key is the form-of directive and the value is an object with the following properties:
* `text`: The actual text displayed before the terms. If the value is `+`, the key is used as the text. If the value is
a function, it is passed a single argument, the overall place spec (see comment at top of file) and should return
the text to be displayed.
* `type_prefix`: The prefix used to generate the placetype for looking up the appropriate category or categories in the
placetype data structure. Can be omitted if there are no categories associated with the directive.
* `conjunction`: The conjunction used to join multiple terms, defaulting to `and`.
* `cat`: Additional category or categories to add the term to, whenever this particular directive is used.
* `default_foreign`: If specified, the default language of terms given along with this directive is the language in
{{para|1}}; otherwise it is English.
]==]
export.all_form_of_directives = {
["former name of"] = {text = "+", type_prefix = "FORMER_NAME_OF"},
["fmr of"] = {alias_of = "former name of"},
["ancient name of"] = {text = "+", type_prefix = "FORMER_NAME_OF"},
["official name of"] = {text = "+", type_prefix = "OFFICIAL_NAME_OF"},
["former official name of"] = {text = "+", type_prefix = "FORMER_OFFICIAL_NAME_OF"},
["long form of"] = {text = "+", type_prefix = "LONG_FORM_OF"},
["former long form of"] = {text = "+", type_prefix = "FORMER_LONG_FORM_OF"},
["nickname for"] = {text = "+", type_prefix = "NICKNAME_FOR"},
["official nickname for"] = {text = "+", type_prefix = "OFFICIAL_NICKNAME_FOR"},
["former nickname for"] = {text = "+", type_prefix = "FORMER_NICKNAME_FOR"},
["derogatory name for"] = {text = "[[Appendix:Glossary#derogatory|derogatory]] name for", type_prefix = "DEROGATORY_NAME_FOR"},
["synonym of"] = {text = "+"},
["syn of"] = {alias_of = "synonym of"},
["abbreviation of"] = {text = "[[Appendix:Glossary#abbreviation|abbreviation]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:abbreviations",
default_foreign = true},
["abbr of"] = {alias_of = "abbreviation of"},
["abbrev of"] = {alias_of = "abbreviation of"},
["initialism of"] = {text = "[[Appendix:Glossary#initialism|initialism]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:initialisms",
default_foreign = true},
["init of"] = {alias_of = "initialism of"},
["acronym of"] = {text = "[[Appendix:Glossary#acronym|acronym]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:acronyms",
default_foreign = true},
["syllabic abbreviation of"] = {text = "[[Appendix:Glossary#syllabic abbreviation|syllabic abbreviation]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:syllabic abbreviations",
default_foreign = true},
["sylabbr of"] = {alias_of = "syllabic abbreviation of"},
["sylabbrev of"] = {alias_of = "syllabic abbreviation of"},
["ellipsis of"] = {text = "[[Appendix:Glossary#ellipsis|ellipsis]] of", type_prefix = "ELLIPSIS_OF", cat = "cln:ellipses",
default_foreign = true},
["ellip of"] = {alias_of = "ellipsis of"},
["clipping of"] = {text = "[[Appendix:Glossary#clipping|clipping]] of", type_prefix = "CLIPPING_OF", cat = "cln:clippings",
default_foreign = true},
["clip of"] = {alias_of = "clipping of"},
["alternative form of"] = {text = "+", default_foreign = true},
["alt form"] = {alias_of = "alternative form of"},
["alternative spelling of"] = {text = "+", default_foreign = true},
["alt spell"] = {alias_of = "alternative spelling of"},
["alt sp"] = {alias_of = "alternative spelling of"},
["dated form of"] = {text = "[[Appendix:Glossary#dated|dated]] form of", type_prefix = "DATED_FORM_OF", cat = "cln:dated forms",
default_foreign = true},
["dated form"] = {alias_of = "dated form of"},
["dated spelling of"] = {text = "[[Appendix:Glossary#dated|dated]] spelling of", type_prefix = "DATED_FORM_OF", cat = "cln:dated forms",
default_foreign = true},
["dated spell"] = {alias_of = "dated spelling of"},
["dated sp"] = {alias_of = "dated spelling of"},
["archaic form of"] = {text = "[[Appendix:Glossary#archaic|archaic]] form of", type_prefix = "ARCHAIC_FORM_OF", cat = "cln:archaic forms",
default_foreign = true},
["arch form"] = {alias_of = "archaic form of"},
["archaic spelling of"] = {text = "[[Appendix:Glossary#archaic|archaic]] spelling of", type_prefix = "ARCHAIC_FORM_OF", cat = "cln:archaic forms",
default_foreign = true},
["arch spell"] = {alias_of = "archaic spelling of"},
["arch sp"] = {alias_of = "archaic spelling of"},
["obsolete form of"] = {text = "[[Appendix:Glossary#obsolete|obsolete]] form of", type_prefix = "OBSOLETE_FORM_OF", cat = "cln:obsolete forms",
default_foreign = true},
["obs form"] = {alias_of = "obsolete form of"},
["obsolete spelling of"] = {text = "[[Appendix:Glossary#obsolete|obsolete]] spelling of", type_prefix = "OBSOLETE_FORM_OF", cat = "cln:obsolete forms",
default_foreign = true},
["obs spell"] = {alias_of = "obsolete spelling of"},
["obs sp"] = {alias_of = "obsolete spelling of"},
}
local function get_seat_text(overall_place_spec)
local placetype = overall_place_spec.descs[1].placetypes[1]
if placetype == "county" or placetype == "counties" then
return "county seat"
elseif placetype == "parish" or placetype == "parishes" then
return "parish seat"
elseif placetype == "borough" or placetype == "boroughs" then
return "borough seat"
else
return "seat"
end
end
--[==[ var:
List specifying the allowed arguments containing extra information that is sometimes added to a definition, such as the
capital, largest city, modern name, official name, etc., along with associated properties; displayed in the order given.
See enwikt [[Module:place]] for full documentation of each field.
]==]
export.extra_info_args = {
{arg = "modern", text = "+", conjunction = "or", display_even_when_dropped = true},
{arg = "now", text = "now,", conjunction = "or", display_even_when_dropped = true},
{arg = "full", text = "in full,", conjunction = "or", display_even_when_dropped = true},
{arg = "short", text = "short form", conjunction = "or"},
{arg = "abbr", text = "abbreviation", conjunction = "or"},
{arg = "former", text = "formerly,"},
{arg = "official", text = "official name", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "capital", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "largest city", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "caplc", text = "capital and largest city", match_sentence_style = true, auto_plural = false,
with_colon = true},
{arg = "seat", text = get_seat_text, match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "shire town", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "headquarters", text = "+", match_sentence_style = true, auto_plural = false, with_colon = true},
{arg = "center", text = "administrative center", match_sentence_style = true, auto_plural = false, with_colon = true},
{arg = "centre", text = "administrative centre", match_sentence_style = true, auto_plural = false, with_colon = true},
}
export.extra_info_arg_map = {}
for _, spec in ipairs(export.extra_info_args) do
export.extra_info_arg_map[spec.arg] = spec
end
----------- Wikicode utility functions
-- Return a wikilink link {{l|language|text}}
local function link(text, langcode, id)
if not langcode then
return text
end
return m_links.full_link(
{term = text, lang = require(languages_module).getByCode(langcode, true, "allow etym"), id = id},
nil, "allow self link"
)
end
---------- Basic utility functions
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
local function ucfirst_all(text)
if text:find(" ") then
local parts = split(text, " ", true)
for i, part in ipairs(parts) do
parts[i] = m_strutils.ucfirst(part)
end
return concat(parts, " ")
else
return m_strutils.ucfirst(text)
end
end
local function lc(text)
return mw.getContentLanguage():lc(text)
end
---------- Argument parsing functions and utilities
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",") then
return require(parse_interface_module).split_on_comma(val)
else
return {val}
end
end
-- Split an argument on slash, but not slash occurring inside of HTML tags like </span> or <br />.
local function split_on_slash(arg)
if arg:find("<") then
local m_parse_utilities = require(parse_utilities_module)
-- We implement this by parsing balanced segment runs involving <...>, and splitting on slash in the remainder.
-- The result is a list of lists, so we have to rejoin the inner lists by concatenating.
local segments = m_parse_utilities.parse_balanced_segment_run(arg, "<", ">")
local slash_separated_groups = m_parse_utilities.split_alternating_runs(segments, "/")
for i, group in ipairs(slash_separated_groups) do
slash_separated_groups[i] = concat(group)
end
return slash_separated_groups
else
return split(arg, "/", true)
end
end
-- Implement "implications", i.e. where the presence of a given holonym causes additional holonym(s) to be added.
-- Implications apply only to categorization.
local function handle_category_implications(place_descriptions, implication_data)
for i, desc in ipairs(place_descriptions) do
if desc.holonyms then
local new_holonyms = {}
for _, holonym in ipairs(desc.holonyms) do
insert(new_holonyms, holonym)
local imp_data = m_placetypes.get_equiv_placetype_prop(holonym.placetype, function(pt)
local implication = implication_data[pt] and implication_data[pt][holonym.unlinked_placename]
if implication then
return implication
end
end)
if imp_data then
for _, holonym_to_add in ipairs(imp_data) do
local split_holonym = split_on_slash(holonym_to_add)
if #split_holonym ~= 2 then
internal_error("Invalid holonym in implications: %s", holonym_to_add)
end
local holonym_placetype, holonym_placename = unpack(split_holonym, 1, 2)
local new_holonym = {
placetype = holonym_placetype, unlinked_placename = holonym_placename
}
insert(new_holonyms, new_holonym)
m_placetypes.key_holonym_into_place_desc(desc, new_holonym)
end
end
end
desc.holonyms = new_holonyms
end
end
end
-- Split a holonym (e.g. "continent/Europe" or "country/en:Italy" or "in southern" or "r:suf/O'Higgins" or
-- "c/Austria,Germany,Czech Republic") into its components. Return a list of holonym objects (see top of file). Note
-- that if there isn't a slash in the holonym (e.g. "in southern"), the `placetype` field of the holonym will be nil.
-- Placetype aliases (e.g. "r" for "region") and placename aliases (e.g. "US" or "USA" for "United States") will be
-- expanded.
local function split_holonym(raw)
local no_display, combined_holonym = raw:match("^(!)(.*)$")
no_display = not not no_display
combined_holonym = combined_holonym or raw
local suppress_comma, combined_holonym_without_comma = combined_holonym:match("^(%*)(.*)$")
suppress_comma = not not suppress_comma
combined_holonym = combined_holonym_without_comma or combined_holonym
local holonym_parts = split_on_slash(combined_holonym)
if #holonym_parts == 1 then
-- `unlinked_placename` should not be used.
return {{display_placename = combined_holonym, no_display = no_display, suppress_comma = suppress_comma}}
end
-- Rejoin further slashes in case of slash in holonym placename, e.g. Admaston/Bromley.
local placetype = holonym_parts[1]
local placename = concat(holonym_parts, "/", 2)
-- Check for modifiers after the holonym placetype.
local split_holonym_placetype = split(placetype, ":", true)
placetype = split_holonym_placetype[1]
local affix_type
local saw_also
local saw_the
for i = 2, #split_holonym_placetype do
local modifier = split_holonym_placetype[i]
if modifier == "also" then
if saw_also then
error(("Modifier ':also' occurs twice in holonym '%s'"):format(combined_holonym))
end
saw_also = true
elseif modifier == "the" then
if saw_the then
error(("Modifier ':the' occurs twice in holonym '%s'"):format(combined_holonym))
end
saw_the = true
elseif modifier == "pref" or modifier == "Pref" or modifier == "suf" or modifier == "Suf" or
modifier == "noaff" then
if affix_type then
error(("Affix-type modifier ':%s' occurs twice in holonym '%s'"):format(modifier, combined_holonym))
end
affix_type = modifier
else
error(("Unrecognized holonym placetype modifier '%s', should be one of " ..
"'pref', 'Pref', 'suf', 'Suf', 'noaff', 'also' or 'the'"):format(modifier))
end
end
placetype = m_placetypes.resolve_placetype_aliases(placetype)
local holonyms = split_on_comma(placename)
local pluralize_affix = #holonyms > 1
local affix_holonym_index = (affix_type == "pref" or affix_type == "Pref") and 1 or affix_type == "noaff" and 0 or
#holonyms
for i, placename in ipairs(holonyms) do
-- Check for langcode before the holonym placename, but don't get tripped up by Wikipedia links, which begin
-- "[[w:...]]" or "[[wikipedia:]]".
local langcode, placename_without_langcode = rmatch(placename, "^([^%[%]]-):(.*)$")
if langcode then
placename = placename_without_langcode
end
placename = m_placetypes.resolve_placename_display_aliases(placetype, placename)
holonyms[i] = {
placetype = placetype,
display_placename = placename,
unlinked_placename = m_placetypes.remove_links_and_html(placename),
langcode = langcode,
affix_type = i == affix_holonym_index and affix_type or nil,
pluralize_affix = i == affix_holonym_index and pluralize_affix,
suppress_affix = i ~= affix_holonym_index,
no_display = no_display,
suppress_comma = suppress_comma,
continue_cat_loop = saw_also,
force_the = i == 1 and saw_the,
}
end
return holonyms
end
local get_param_mods = memoize(function()
local m_param_utils = require(parameter_utilities_module)
return m_param_utils.construct_param_mods {
{group = {"link", "q", "l", "ref"}},
{param = "eq"},
{param = "conj", set = {["and"] = true, ["or"] = true, ["and/or"] = true}, overall = true},
}
end)
local function parse_term_with_inline_modifiers(term, paramname, default_lang)
local function generate_obj(raw_term, parse_err)
local obj = require(parameter_utilities_module).generate_obj_maybe_parsing_lang_prefix {
term = raw_term,
parse_err = parse_err,
parse_lang_prefix = true,
}
obj.lang = obj.lang or default_lang
return obj
end
return require(parse_interface_module).parse_inline_modifiers(term, {
paramname = paramname,
param_mods = get_param_mods(),
generate_obj = generate_obj,
splitchar = ",",
outer_container = {},
})
end
local function parse_form_of_directive(arg, lang, form_of_overridden_args)
local form_of_directive, raw_terms = arg:match("^@([a-z -]+):(.*)$")
if not form_of_directive then
error("Misformatted @-directive: " .. dump(arg))
end
if not export.all_form_of_directives[form_of_directive] then
local known_directives = {}
for k, _ in pairs(export.all_form_of_directives) do
insert(known_directives, '"' .. k .. '"')
end
table.sort(known_directives)
error(("Unrecognized form-of directive %s in @-directive %s; recognized directives are %s"):format(
dump(form_of_directive), dump(arg), concat(known_directives, ", ")))
end
local spec = export.all_form_of_directives[form_of_directive]
local canonical_directive = form_of_directive
if spec.alias_of then
canonical_directive = spec.alias_of
spec = export.all_form_of_directives[canonical_directive]
if not spec then
internal_error("Form-of directive alias %s points to %s, which is not a directive",
"@" .. form_of_directive, canonical_directive)
elseif spec.alias_of then
internal_error("Form-of directive alias %s points to %s, which is also an alias",
"@" .. form_of_directive, canonical_directive)
end
end
local default_foreign = spec.default_foreign
local directive_param = "@" .. form_of_directive
if form_of_overridden_args and form_of_overridden_args[canonical_directive] then
raw_terms = form_of_overridden_args[canonical_directive].new_value
local new_directive = form_of_overridden_args[canonical_directive].new_directive
local new_spec = export.all_form_of_directives[new_directive]
if not new_spec then
error(("Internal error: [[Module:transclude]] passed in unrecognized replacement directive '@%s'"):
format(new_directive))
end
if new_spec.alias_of then
error(("Internal error: [[Module:transclude]] passed in replacement directive alias '@%s', " ..
"should be canonical"):format(new_directive))
end
if new_directive ~= canonical_directive then
directive_param = directive_param .. (" (replaced with @%s)"):format(new_directive)
canonical_directive = new_directive
spec = new_spec
end
default_foreign = true
end
local terms = parse_term_with_inline_modifiers(raw_terms, directive_param,
default_foreign and lang or enlang)
return {
directive = canonical_directive,
terms = terms.terms,
conj = terms.conj,
spec = spec,
}
end
-- Parse an argument containing extra information that is sometimes added to a definition, such as the capital, largest
-- city, modern name, official name, etc. `args` is the value from the parsed argument structure and can be either nil,
-- a string or a list. `spec` is the extra info spec corresponding to the type of extra info. Each value in `args` can
-- be a comma-separated list of terms with inline modifiers attached.
local function parse_extra_info_arg(args, spec, default_lang)
if not args then
return nil
end
if type(args) ~= "table" then
args = {args}
end
if not args[1] then
return nil
end
local terms = nil
local conj
for i, arg in ipairs(args) do
local this_terms = parse_term_with_inline_modifiers(arg, spec.arg .. (i == 1 and "" or i), default_lang)
local thisconj = this_terms.conj
if not conj then
conj = thisconj
elseif thisconj and conj ~= thisconj then
error(("Two different conjunctions '%s' and '%s' specified for |%s=; you only need to specify the " ..
"conjunction once"):format(conj, thisconj))
end
if not terms then
terms = this_terms.terms
else
m_table.extend(terms, this_terms.terms)
end
end
return {
spec = spec,
terms = terms,
conj = conj,
}
end
--[==[
Parse a "new-style" place description, with placetypes and holonyms surrounded by `<<...>>` amid otherwise raw text.
Return value is a place description object as documented at the top of the file. Exported for use by
[[Module:demonyms]].
]==]
function export.parse_new_style_place_desc(text, lang, form_of_directives, form_of_overridden_args)
local placetypes = {}
local segments = split(text, "<<(.-)>>")
local retval = {holonyms = {}, order = {}}
local form_of_directives_already_present = form_of_directives and not not form_of_directives[1]
for i, segment in ipairs(segments) do
if i % 2 == 1 then
insert(retval.order, {type = "raw", value = segment})
elseif segment:find("@") then
if not form_of_directives then
error(("Form-of directive '%s' not allowed in this context"):format(segment))
elseif form_of_directives_already_present then
error(("Saw form-of directive '%s' in new-style place desc followed by direct (separate-parameter) form-of directives; not allowed"):format(
segment))
elseif placetypes[1] or retval.holonyms[1] then
error(("Form-of directive '%s' must come first, before placetypes and holonyms"):format(segment))
else
local form_of_directive = parse_form_of_directive(segment, lang, form_of_overridden_args)
if not retval.order[1] or retval.order[1].type ~= "raw" or retval.order[2] then
internal_error("`retval.order` should have a single raw element: %s", retval.order)
end
form_of_directive.pretext = retval.order[1].value
retval.order[1] = nil
insert(form_of_directives, form_of_directive)
end
elseif segment:find("/") then
local holonyms = split_holonym(segment)
for j, holonym in ipairs(holonyms) do
if j > 1 then
if not holonym.no_display then
if j == #holonyms then
insert(retval.order, {type = "raw", value = zh_strings.and_conj})
else
insert(retval.order, {type = "raw", value = zh_strings.enum_sep})
end
end
holonym.needs_article = true
end
insert(retval.holonyms, holonym)
if not holonym.no_display then
insert(retval.order, {type = "holonym", value = #retval.holonyms})
end
m_placetypes.key_holonym_into_place_desc(retval, holonym)
end
else
local treat_as, display = segment:match("^(..-):(.+)$")
if treat_as then
segment = treat_as
else
display = segment
end
-- see if the placetype segment is just qualifiers
local only_qualifiers = true
local split_segments = split(segment, " ", true)
for _, split_segment in ipairs(split_segments) do
if m_placetypes.placetype_qualifiers[split_segment] == nil then
only_qualifiers = false
break
end
end
insert(placetypes, {placetype = segment, only_qualifiers = only_qualifiers})
if only_qualifiers then
insert(retval.order, {type = "qualifier", value = display})
else
insert(retval.order, {type = "placetype", value = display})
end
end
end
if not form_of_directives_already_present and form_of_directives and form_of_directives[1] then
form_of_directives[#form_of_directives].posttext = ""
end
local final_placetypes = {}
for i, placetype in ipairs(placetypes) do
if i > 1 and placetypes[i - 1].only_qualifiers then
final_placetypes[#final_placetypes] = final_placetypes[#final_placetypes] .. " " .. placetypes[i].placetype
else
insert(final_placetypes, placetypes[i].placetype)
end
end
retval.placetypes = final_placetypes
return retval
end
--[==[
Parse one or more "new-style" place descriptions, with placetypes and holonyms surrounded by `<<...>>` amid otherwise
raw text. Multiple descriptions are separated by two semicolons in a row. Return value is a list of place description
objects as documented at the top of the file.
]==]
local function parse_conjoined_new_style_place_desc(text, lang, form_of_directives, form_of_overridden_args)
local separate_specs = split(text, ";(;[^ ]*)")
local descs = {}
for i = 1, #separate_specs do
if i % 2 == 1 then
insert(descs, export.parse_new_style_place_desc(separate_specs[i], lang, form_of_directives,
form_of_overridden_args))
form_of_directives = nil
else
descs[#descs].separator = separate_specs[i]
end
end
return descs
end
--[=[
Process numeric and "extra info" arguments into an overall place spec, as described at the top of the file.
]=]
local function parse_overall_place_spec(data)
local args, from_tcl, extra_info_overridden_set, form_of_overridden_args =
data.args, data.from_tcl, data.extra_info_overridden_set, data.form_of_overridden_args
local descs = {}
local this_desc
-- Index of separate (semicolon-separated) place descriptions within `descs`.
local desc_index = 1
-- Index of separate holonyms within a place description. 0 means we've seen no holonyms and have yet to process
-- the placetypes that precede the holonyms. 1 means we've seen no holonyms but have already processed the
-- placetypes.
local holonym_index = 0
local in_place_desc = false
local form_of_directives = {}
-- ZH: use Chinese semicolon and space characters for multi-description joiners.
local function set_desc_joiner(desc, separator)
if separator == ";" then
this_desc.joiner = zh_strings.semicolon -- ";" instead of "; "
this_desc.include_following_article = true
elseif separator == ";;" then
this_desc.joiner = " "
else
local joiner = separator:sub(2)
if rfind(joiner, "^%a") then
this_desc.joiner = " " .. joiner .. " "
else
this_desc.joiner = joiner .. " "
end
end
end
for _, arg in ipairs(args[2]) do
if arg:find("^@") then
if not (desc_index == 1 and holonym_index == 0) then
error("@-directives cannot follow place descriptions")
end
local form_of_directive = parse_form_of_directive(arg, args[1], form_of_overridden_args)
if form_of_directives[1] then
form_of_directive.pretext = ", "
else
form_of_directive.pretext = ""
end
insert(form_of_directives, form_of_directive)
elseif arg == ";" or arg:find("^;[^ ]") then
if not this_desc then
error("Saw semicolon joiner without preceding place description")
end
set_desc_joiner(this_desc, arg)
desc_index = desc_index + 1
holonym_index = 0
in_place_desc = false
else
if arg:find("<<") then
if in_place_desc then
error("New-style place description must come first or following a separator (semicolon or similar), not directly following another description")
end
in_place_desc = true
local this_descs = parse_conjoined_new_style_place_desc(arg, args[1], form_of_directives,
form_of_overridden_args)
for j, desc in ipairs(this_descs) do
this_desc = desc
if holonym_index > 0 then
desc_index = desc_index + 1
holonym_index = 0
end
if j < #this_descs then
set_desc_joiner(this_desc, this_desc.separator)
end
descs[desc_index] = this_desc
last_was_new_style = true
holonym_index = #this_desc.holonyms + 1
end
else
-- Old-style arguments can directly follow a new-style argument; they become additional holonyms
-- tacked onto the end of the holonym list, and are displayed old-style except that there is no
-- prefix before the first one following the new-style argument.
in_place_desc = true
if holonym_index == 0 then
local entry_placetypes = split_on_slash(arg)
this_desc = {placetypes = entry_placetypes, holonyms = {}}
descs[desc_index] = this_desc
holonym_index = holonym_index + 1
else
local holonyms = split_holonym(arg)
for j, holonym in ipairs(holonyms) do
if j > 1 then
-- All but the first in a multi-holonym need an article. Not for the first one because e.g.
-- {{place|en|city|s/Arizona|c/United States}} should not display as "a city in Arizona, the
-- United States". The overall first holonym in the place description gets an article if
-- needed regardless of our setting here.
holonym.needs_article = true
-- Insert "and" before the last holonym.
if j == #holonyms then
this_desc.holonyms[holonym_index] = {
-- Use the no_display value from the first holonym; it should be the same for all
-- holonyms. `unlinked_placename` should not be used.
display_placename = "and", no_display = holonyms[1].no_display
}
holonym_index = holonym_index + 1
end
end
this_desc.holonyms[holonym_index] = holonym
m_placetypes.key_holonym_into_place_desc(this_desc, this_desc.holonyms[holonym_index])
holonym_index = holonym_index + 1
end
end
end
end
end
if form_of_directives[1] and not form_of_directives[#form_of_directives].posttext then
form_of_directives[#form_of_directives].posttext =
(args.def and args.def ~= "-" or not args.def and descs[1]) and ": " or ""
end
-- Tracking code (unchanged from enwikt).
for _, desc in ipairs(descs) do
for _, entry_placetype in ipairs(desc.placetypes) do
local splits = m_placetypes.split_qualifiers_from_placetype(entry_placetype, "no canon qualifiers")
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, bare_placetype = unpack(split, 1, 3)
track("entry-placetype/" .. bare_placetype)
if this_qualifier then
track("entry-qualifier/" .. this_qualifier)
end
end
end
for _, holonym in ipairs(desc.holonyms) do
if holonym.placetype then
track("holonym-placetype/" .. holonym.placetype)
end
end
end
local extra_info = {}
for _, extra_info_spec in ipairs(export.extra_info_args) do
local extra_info_terms = parse_extra_info_arg(args[extra_info_spec.arg], extra_info_spec,
from_tcl and extra_info_overridden_set and extra_info_overridden_set[extra_info_spec.arg] and args[1] or
enlang)
if extra_info_terms then
insert(extra_info, extra_info_terms)
end
end
return {
lang = args[1],
args = args,
directives = form_of_directives,
descs = descs,
extra_info = extra_info,
}
end
-------- Definition-generating functions
-- Return a string with the wikilinks to the ZH translations of the word.
-- ZH: joins multiple translations with "," (full-width comma) instead of ", ".
local function get_translations(transl, ids)
local ret = {}
for i, t in ipairs(transl) do
local arg_transls = split_on_comma(t)
local arg_ids = ids[i]
if arg_ids then
arg_ids = split_on_comma(arg_ids)
if #arg_transls ~= #arg_ids then
error(("Saw %s translation%s in t%s=%s but %s ID%s in tid%s=%s"):format(
#arg_transls, #arg_transls > 1 and "s" or "", i == 1 and "" or i, t, #arg_ids,
#arg_ids > 1 and "'s" or "", i == 1 and "" or i, ids[i]))
end
end
for j, arg_transl in ipairs(arg_transls) do
insert(ret, link(arg_transl, "en", arg_ids and arg_ids[j] or nil))
end
end
return concat(ret, zh_strings.trans_sep) -- "," instead of ", "
end
-- Chinese has no articles; these stubs keep the call-sites intact.
local function get_placename_article(decorated_placename, placetypes, placename, suppress_holonym_use_the_check)
return nil
end
local function get_holonym_article(decorated_placename, place_desc, holonym_index)
return nil
end
-- Convert a holonym into display format. For ZH:
-- * No article prepended (Chinese has no articles).
-- * Both prefix and suffix affix types append the zh_suffix (e.g. "州", "省") directly to the linked name,
-- instead of the English "placetype of placename" / "placename placetype" construction.
-- * Display handlers are applied unchanged (they may add text based on the holonym's surrounding context).
local function format_holonym(place_desc, holonym_index, needs_article)
local holonym = place_desc.holonyms[holonym_index]
if holonym.no_display then
return ""
end
-- needs_article and force_the are not used in Chinese.
local output = holonym.display_placename
local placetype = holonym.placetype
local affix_type_pt_data, affix_type, affix_is_prefix, affix, prefix, suffix, no_affix_strings
local pt_equiv_for_affix_type, already_seen_affix, need_affix
local affix_pt_data, pt_equiv_for_affix
-- Implement display handlers (unchanged from enwikt).
local display_handler = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt) return placetype_data[pt] and placetype_data[pt].display_handler end)
if display_handler then
output = display_handler(placetype, output)
end
if not holonym.suppress_affix then
-- Affix detection logic is unchanged from enwikt; only the rendering differs below.
affix_type_pt_data, pt_equiv_for_affix_type = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt)
local cdpt = placetype_data[pt]
return cdpt and cdpt.affix_type and cdpt or nil
end
)
affix_pt_data, pt_equiv_for_affix = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt)
local cdpt = placetype_data[pt]
return cdpt and (cdpt.affix_type or cdpt.affix or cdpt.prefix or cdpt.suffix) and cdpt or nil
end
)
if affix_type_pt_data then
affix_type = affix_type_pt_data.affix_type
need_affix = true
end
if affix_pt_data then
prefix = affix_pt_data.prefix or affix_pt_data.affix
suffix = affix_pt_data.suffix or affix_pt_data.affix
need_affix = true
end
no_affix_strings = affix_pt_data and affix_pt_data.no_affix_strings or
affix_type_pt_data and affix_type_pt_data.no_affix_strings
if holonym.affix_type and placetype then
affix_type = holonym.affix_type
prefix = prefix or placetype
suffix = suffix or placetype
need_affix = true
end
if need_affix then
affix_is_prefix = affix_type == "pref" or affix_type == "Pref"
if affix_is_prefix then
affix = prefix
else
affix = suffix
end
if not affix then
if not pt_equiv_for_affix_type then
internal_error("Something wrong, `pt_equiv_for_affix_type` not set processing holonym: %s",
holonym)
end
affix = pt_equiv_for_affix_type.placetype
if not affix then
internal_error("Something wrong, no affix could be located in `pt_equiv_for_affix_type` for " ..
"holonym %s: %s", holonym, pt_equiv_for_affix_type)
end
end
no_affix_strings = no_affix_strings or lc(affix)
-- ZH: skip pluralize_affix (Chinese doesn't pluralize)
end
end
-- ZH: resolve zh_suffix for the affix placetype before linking.
local zh_sfx_to_append = nil
if need_affix then
local _, zh_sfx = m_zh_data.get_zh_placetype_props(affix, m_placetypes)
if zh_sfx then
local zh_sfx_str = m_zh_data.format_zh_name(zh_sfx)
-- Check if zh_suffix already present in the unlinked output.
local unlinked = m_placetypes.remove_links_and_html(output)
if not unlinked:find(zh_sfx_str, 1, true) then
zh_sfx_to_append = zh_sfx_str
end
end
end
output = link(output, holonym.langcode or placetype and "en" or nil)
-- ZH: for both pref and suf, append zh_suffix directly after the linked name.
-- (EN prefix construction "placetype of placename" is not used in Chinese.)
if zh_sfx_to_append then
output = output .. zh_sfx_to_append
end
-- No article for Chinese.
return output
end
-- Format holonyms for a ZH old-style place description.
-- Collects all holonyms, filters "and"/"or" connectors, reverses for big→small containment order,
-- groups consecutive same-type holonyms (peer locations), then joins with ZH enumeration (、/和).
-- Returns the concatenated holonym string, e.g. "美國賓夕法尼亞州", "波蘭、白俄羅斯和烏克蘭".
local function format_holonyms_zh(place_desc)
local holonyms = place_desc.holonyms
if not holonyms or #holonyms == 0 then
return ""
end
-- Collect non-"and"/"or"/"的" holonym items with their original indices.
-- A raw "的" holonym (from |的| in the template, like enwikt's |of|) signals possessive preposition;
-- filter it from display since format_old_style_place_desc_for_display already appends de_particle.
local items = {}
local has_de_joiner = false
for i, h in ipairs(holonyms) do
if not h.no_display then
local dname = h.display_placename
if dname ~= "and" and dname ~= "or" then
if not h.placetype and dname == zh_strings.de_particle then
has_de_joiner = true
else
insert(items, {holonym_index = i, placetype = h.placetype})
end
end
end
end
-- Reverse for big→small order.
local reversed = {}
for i = #items, 1, -1 do
insert(reversed, items[i])
end
-- Group consecutive items with the same placetype (peers like multiple countries).
-- Raw-text holonyms (no placetype) break any current structural group.
local groups = {}
local i = 1
while i <= #reversed do
local item = reversed[i]
if not item.placetype then
-- Raw text (e.g. "南部", "東北部") forms its own singleton group.
local h = holonyms[item.holonym_index]
insert(groups, {type = "raw", text = h.display_placename})
i = i + 1
else
-- Structural holonym: collect consecutive ones of the same placetype.
local group = {type = "structural", items = {item}}
local pt = item.placetype
i = i + 1
while i <= #reversed do
local next_item = reversed[i]
if next_item.placetype == pt then
insert(group.items, next_item)
i = i + 1
else
break
end
end
insert(groups, group)
end
end
-- Format each group and assemble.
local parts = {}
for _, group in ipairs(groups) do
if group.type == "raw" then
insert(parts, group.text)
else
local formatted = {}
for _, item in ipairs(group.items) do
insert(formatted, format_holonym(place_desc, item.holonym_index, false))
end
if #formatted == 1 then
insert(parts, formatted[1])
elseif #formatted == 2 then
insert(parts, formatted[1] .. zh_strings.and_conj .. formatted[2])
else
local last = table.remove(formatted)
insert(parts, concat(formatted, zh_strings.enum_sep) .. zh_strings.and_conj .. last)
end
end
end
return concat(parts), has_de_joiner
end
-- Get the Chinese display name for a single (possibly qualified) placetype.
-- Strips qualifiers, looks up zh_name via m_zh_data, and prepends translated qualifier text.
-- `first_holonym_placetype` enables context-sensitive names (e.g. capital city → 首都/省會/首府).
local function get_zh_placetype_name(placetype, first_holonym_placetype)
local resolved_pt = m_placetypes.resolve_placetype_aliases(placetype)
local zh_name, _, zh_by_holonym = m_zh_data.get_zh_placetype_props(resolved_pt, m_placetypes)
if zh_name then
local resolved = m_zh_data.resolve_zh_name(zh_name, zh_by_holonym, first_holonym_placetype)
return m_zh_data.format_zh_name(resolved)
end
-- Fallback to English name; add tracking for missing zh_data entries.
track("missing-zh-placetype/" .. tostring(placetype))
return placetype
end
-- Format a single entry placetype (possibly with qualifiers) for ZH display.
-- Strips qualifiers from the placetype, translates each qualifier via zh_qualifiers,
-- and prepends them to the Chinese placetype name.
local function format_one_zh_placetype(pt, first_holonym_placetype)
-- Try progressive qualifier splits; use the first that has a zh_name entry.
local splits = m_placetypes.split_qualifiers_from_placetype(pt)
local qualifier_prefix = ""
for _, sp in ipairs(splits) do
local prev_qualifier, this_qualifier, bare_pt = unpack(sp, 1, 3)
-- Accumulate qualifier strings.
local q_str = ""
if prev_qualifier then
q_str = (m_zh_data.zh_qualifiers[prev_qualifier] or prev_qualifier) ..
(m_zh_data.zh_qualifiers[this_qualifier] or (this_qualifier or ""))
elseif this_qualifier then
q_str = m_zh_data.zh_qualifiers[this_qualifier] or this_qualifier
end
local zh_n = get_zh_placetype_name(bare_pt, first_holonym_placetype)
if zh_n ~= bare_pt then
-- Found a known ZH entry; use it.
return q_str .. zh_n
end
qualifier_prefix = q_str
end
-- Fallback: just translate the full (possibly unrecognized) placetype.
return qualifier_prefix .. get_zh_placetype_name(pt, first_holonym_placetype)
end
-- Build the ZH entry placetype description from the `placetypes` list.
-- Handles "and"/"or" splitting (e.g. "城市/and/市鎮" → "城市和市鎮"),
-- multiple placetypes without and/or (joined with "、...和"),
-- and context-sensitive names via first_holonym_placetype.
local function get_zh_entry_placetype_desc(placetypes, first_holonym_placetype)
local is_ignorable = m_placetypes.placetype_is_ignorable
-- Find last and/or position.
local and_or_pos
for i, pt in ipairs(placetypes) do
if pt == "and" or pt == "or" then
and_or_pos = i
end
end
if and_or_pos then
-- Split into group before and group after the conjunction.
local group1, group2 = {}, {}
for i = 1, and_or_pos - 1 do
if not is_ignorable(placetypes[i]) then
insert(group1, format_one_zh_placetype(placetypes[i], first_holonym_placetype))
end
end
for i = and_or_pos + 1, #placetypes do
if not is_ignorable(placetypes[i]) then
insert(group2, format_one_zh_placetype(placetypes[i], first_holonym_placetype))
end
end
local conj_str = placetypes[and_or_pos] == "or" and "或" or zh_strings.and_conj
local all = {}
for _, v in ipairs(group1) do insert(all, v) end
for _, v in ipairs(group2) do insert(all, v) end
if #all == 0 then return "" end
if #all == 1 then return all[1] end
local last = table.remove(all)
return concat(all, zh_strings.enum_sep) .. conj_str .. last
else
-- No explicit and/or: collect all non-ignorable placetypes.
local formatted = {}
for _, pt in ipairs(placetypes) do
if not is_ignorable(pt) then
insert(formatted, format_one_zh_placetype(pt, first_holonym_placetype))
end
end
if #formatted == 0 then return "" end
if #formatted == 1 then return formatted[1] end
local last = table.remove(formatted)
return concat(formatted, zh_strings.enum_sep) .. zh_strings.and_conj .. last
end
end
-- Return the ZH description of a placetype for use in new-style <<placetype>> segments.
local function get_placetype_description(placetype)
return format_one_zh_placetype(placetype, nil)
end
-- Return the ZH description of a qualifier for use in new-style <<qualifier>> segments.
local function get_qualifier_description(qualifier)
-- Trim to just the qualifier word (split_qualifiers_from_placetype requires a trailing non-qualifier word).
local splits = m_placetypes.split_qualifiers_from_placetype(qualifier .. " foo")
local sp = splits[#splits]
local prev_qualifier, this_qualifier = unpack(sp, 1, 2)
if this_qualifier then
local q = m_zh_data.zh_qualifiers[this_qualifier] or this_qualifier
if prev_qualifier then
return (m_zh_data.zh_qualifiers[prev_qualifier] or prev_qualifier) .. q
end
return q
end
return qualifier
end
-- Format a set of form-of directive terms (unchanged from enwikt, only conjunction uses zh_strings).
local function format_form_of_directive(overall_place_spec, directive_terms, ucfirst, from_tcl)
local formatted_terms = {}
local placetypes
if not overall_place_spec.descs[2] then
placetypes = overall_place_spec.descs[1].placetypes
else
placetypes = {}
for _, desc in ipairs(overall_place_spec.descs) do
m_table.extend(placetypes, desc.placetypes)
end
end
for _, termobj in ipairs(directive_terms.terms) do
local placename_article
if not termobj.alt and termobj.term and not termobj.term:find("%[%[") then
placename_article = get_placename_article(termobj.term, placetypes)
end
local linked_term = m_links.full_link(termobj, "term", nil, "show qualifiers")
linked_term = "<span class='form-of-definition-link'>" .. linked_term .. "</span>"
if termobj.eq then
linked_term = linked_term .. " (= " .. m_links.full_link {term = termobj.eq, lang = enlang} .. ")"
end
if placename_article then
linked_term = placename_article .. " " .. linked_term
end
insert(formatted_terms, linked_term)
end
local spec = directive_terms.spec
local text = spec.text
if type(text) == "function" then
text = text(overall_place_spec)
end
if text == "+" then
text = directive_terms.directive
end
if ucfirst then
text = m_strutils.ucfirst(text)
end
if not from_tcl then
local tracking_prefix = "form-of/" .. directive_terms.directive
track(tracking_prefix)
local langcode = overall_place_spec.lang:getCode()
local full_langcode = overall_place_spec.lang:getFullCode()
track(tracking_prefix .. "/" .. langcode)
if full_langcode ~= langcode then
track(tracking_prefix .. "/" .. full_langcode)
end
if full_langcode ~= "en" then
track(tracking_prefix .. "/non-english")
end
end
return (require(form_of_module).format_form_of {
text = text,
lemmas = m_table.serialCommaJoin(formatted_terms, {conj = directive_terms.conj or spec.conjunction or zh_strings.and_conj}),
lemma_classes = false,
})
end
-- Format extra-info terms (capital, largest city, modern name, etc.) for ZH.
-- * Labels come from m_zh_data.zh_extra_info_labels (or zh_capital_label_by_holonym_type for capital).
-- * Separator: "。" + label in sentence style; ";" + label otherwise.
-- * Multiple terms joined with 、/和 instead of serial comma.
-- * auto_plural is skipped (Chinese doesn't pluralize).
local function format_extra_info(overall_place_spec, extra_info_terms, sentence_style)
local formatted_terms = {}
for _, termobj in ipairs(extra_info_terms.terms) do
insert(formatted_terms, m_links.full_link(termobj, nil, nil, "show qualifiers"))
end
local spec = extra_info_terms.spec
-- Resolve ZH label: look up by spec.arg, then spec.text as fallback.
local zh_label = m_zh_data.zh_extra_info_labels[spec.arg]
if not zh_label then
-- Try spec.text as the lookup key (e.g. "capital and largest city").
local spec_text = spec.text
if type(spec_text) == "function" then
spec_text = spec_text(overall_place_spec)
end
zh_label = m_zh_data.zh_extra_info_labels[spec_text] or spec_text or spec.arg
end
-- Context-sensitive "capital" label based on first holonym type (首都/省會/首府/縣治…).
if spec.arg == "capital" then
if overall_place_spec.descs and overall_place_spec.descs[1] and overall_place_spec.descs[1].holonyms then
for _, h in ipairs(overall_place_spec.descs[1].holonyms) do
if h.placetype then
local ctx_label = m_zh_data.zh_capital_label_by_holonym_type[h.placetype]
if ctx_label then
zh_label = ctx_label
end
break
end
end
end
end
local text = zh_label
if spec.with_colon then
text = text .. ":" -- full-width colon
end
if sentence_style and spec.match_sentence_style then
text = "。" .. text
else
text = zh_strings.semicolon .. text
end
-- Join terms with ZH enumeration.
local conj = extra_info_terms.conj or zh_strings.and_conj
local joined
if #formatted_terms == 0 then
joined = ""
elseif #formatted_terms == 1 then
joined = formatted_terms[1]
elseif #formatted_terms == 2 then
joined = formatted_terms[1] .. conj .. formatted_terms[2]
else
local last = table.remove(formatted_terms)
joined = concat(formatted_terms, zh_strings.enum_sep) .. conj .. last
end
return text .. joined
end
-- Format an old-style place description for ZH display.
-- Chinese pattern: [位於|""][holonym_string][的][zh_placetype_name]
-- * Holonyms are reversed (big→small), grouped, and joined with 、/和.
-- * "位於" is prepended for "in"-type placetypes; omitted for "of"-type (e.g. capitals).
-- * args.a (article override) is used as a prefix to the placetype name.
local function format_old_style_place_desc_for_display(args, place_desc, desc_index, with_article, ucfirst_flag)
local placetypes = place_desc.placetypes
-- Determine the entry placetype (last non-ignorable, non-conjunction item) for preposition lookup.
local entry_placetype_for_prep = nil
for i = #placetypes, 1, -1 do
local pt = placetypes[i]
if not m_placetypes.placetype_is_ignorable(pt) and pt ~= "and" and pt ~= "or" then
entry_placetype_for_prep = pt
break
end
end
-- Determine first structured holonym placetype for context-sensitive zh_name lookups.
local first_holonym_placetype = nil
if place_desc.holonyms then
for _, h in ipairs(place_desc.holonyms) do
if h.placetype then
first_holonym_placetype = h.placetype
break
end
end
end
-- Build the Chinese placetype description (possibly with qualifiers and multiple types).
local zh_pt_name = get_zh_entry_placetype_desc(placetypes, first_holonym_placetype)
-- Handle args.a (article override): used as a direct prefix in Chinese, e.g. a=盎格魯撒克遜 → "盎格魯撒克遜王國".
if with_article and desc_index == 1 and args.a then
zh_pt_name = args.a .. zh_pt_name
end
-- Build holonym string (reversed, grouped, ZH-joined).
-- has_de_joiner is true when a bare |的| token was in the holonym list (like enwikt's |of|).
local holonym_str, has_de_joiner = "", false
if place_desc.holonyms and #place_desc.holonyms > 0 then
holonym_str, has_de_joiner = format_holonyms_zh(place_desc)
end
-- Determine preposition style ("in" → 位於…的; "of" → …的 with no 位於).
-- An explicit |的| joiner in the template overrides to possessive (no 位於).
local use_wei_yu = true
if has_de_joiner then
use_wei_yu = false
elseif entry_placetype_for_prep then
local prep = m_placetypes.get_placetype_entry_preposition(entry_placetype_for_prep)
if prep == "of" then
use_wei_yu = false
end
end
-- Assemble final string.
if holonym_str ~= "" then
if use_wei_yu then
return zh_strings.in_preposition .. holonym_str .. zh_strings.de_particle .. zh_pt_name
else
return holonym_str .. zh_strings.de_particle .. zh_pt_name
end
else
return zh_pt_name
end
end
--[==[
Get the full gloss (Chinese description) of a new-style place description. New-style place descriptions are
specified with a single string containing raw text interspersed with placetypes and holonyms surrounded by `<<...>>`.
Exported for use by [[Module:demonyms]].
]==]
function export.format_new_style_place_desc_for_display(args, place_desc, with_article)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
-- args.a not used in Chinese (no article system).
local max_holonym = 0
for _, order in ipairs(place_desc.order) do
local segment_type, segment = order.type, order.value
if segment_type == "raw" then
ins(segment)
elseif segment_type == "placetype" then
ins(get_placetype_description(segment))
elseif segment_type == "qualifier" then
ins(get_qualifier_description(segment))
elseif segment_type == "holonym" then
ins(format_holonym(place_desc, segment, false))
if segment > max_holonym then
max_holonym = segment
end
else
internal_error("Unrecognized segment type %s", segment_type)
end
end
if place_desc.holonyms and max_holonym < #place_desc.holonyms then
local holonym_no_prefix = true
for holonym_index = max_holonym + 1, #place_desc.holonyms do
-- Append remaining holonyms with a space prefix (no "in"/"of" for new-style).
ins(" " .. format_holonym(place_desc, holonym_index, false))
holonym_no_prefix = false
end
end
return concat(parts)
end
-- Return a string with the gloss (the description of the place itself, as opposed to translations).
-- `sentence_style` controls whether extra-info uses "。" (sentence) or ";" (semicolon) separation.
local function get_display_form(data)
local overall_place_spec, ucfirst, sentence_style, drop_extra_info, extra_info_overridden_set, from_tcl =
data.overall_place_spec, data.ucfirst, data.sentence_style, data.drop_extra_info,
data.extra_info_overridden_set, data.from_tcl
local args = overall_place_spec.args
local parts = {}
local function ins(txt)
table.insert(parts, txt)
end
if overall_place_spec.directives and overall_place_spec.directives[1] then
for i, directive_terms in ipairs(overall_place_spec.directives) do
ins(directive_terms.pretext)
if directive_terms.pretext ~= "" then
ucfirst = false
end
if not args.def or args.def == "-" then
ins(format_form_of_directive(overall_place_spec, directive_terms, ucfirst, from_tcl))
ucfirst = false
if i == #overall_place_spec.directives and directive_terms.posttext then
ins(directive_terms.posttext)
end
end
end
end
if args.def == "-" then
return concat(parts)
end
if args.def then
if args.def:find("<<") then
local def_desc = export.parse_new_style_place_desc(args.def, args[1])
ins(export.format_new_style_place_desc_for_display({}, def_desc, false))
else
ins(args.def)
end
else
local include_article = true
for n, desc in ipairs(overall_place_spec.descs) do
if desc.order then
ins(export.format_new_style_place_desc_for_display(args, desc, n == 1))
else
ins(format_old_style_place_desc_for_display(args, desc, n, include_article, ucfirst))
end
if desc.joiner then
ins(desc.joiner)
end
include_article = desc.include_following_article
ucfirst = false
end
end
local addl = args.addl
if addl then
if addl:find("^[;:]") then
ins(addl)
elseif addl:find("^_") then
ins(" " .. addl:sub(2))
else
ins("," .. addl)
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
if not drop_extra_info or extra_info_terms.spec.display_even_when_dropped or
extra_info_overridden_set and extra_info_overridden_set[extra_info_terms.spec.arg] then
ins(format_extra_info(overall_place_spec, extra_info_terms, sentence_style))
end
end
return concat(parts)
end
-- Return the definition line.
-- ZH: sentence_style is always true; ucfirst is always false (no case in Chinese);
-- parentheses around glosses are full-width ().
local function get_def(data)
local overall_place_spec, from_tcl, drop_extra_info, extra_info_overridden_set, translation_follows =
data.overall_place_spec, data.from_tcl, data.drop_extra_info, data.extra_info_overridden_set,
data.translation_follows
local args = overall_place_spec.args
local sentence_style = true -- always sentence style in Chinese
local ucfirst = false -- Chinese has no case
if #args.t > 0 then
local gloss = get_display_form {
overall_place_spec = overall_place_spec,
ucfirst = false,
sentence_style = false,
drop_extra_info = drop_extra_info,
extra_info_overridden_set = extra_info_overridden_set,
from_tcl = from_tcl,
}
if from_tcl and not args.tcl_nolc then
gloss = m_strutils.lcfirst(gloss)
end
if translation_follows then
return (gloss == "" and "" or gloss .. ":") .. get_translations(args.t, args.tid)
else
return get_translations(args.t, args.tid) ..
(gloss == "" and "" or zh_strings.paren_open .. gloss .. zh_strings.paren_close)
end
else
return get_display_form {
overall_place_spec = overall_place_spec,
ucfirst = ucfirst,
sentence_style = sentence_style,
drop_extra_info = drop_extra_info,
extra_info_overridden_set = extra_info_overridden_set,
from_tcl = from_tcl,
}
end
end
---------- Functions for the category wikicode
-- The code in this section finds the categories to which a given place belongs. See enwikt [[Module:place]]
-- for detailed documentation of the algorithm.
--[=[
Find the appropriate category specs for a given place description and placetype.
See enwikt [[Module:place]] for detailed documentation.
]=]
local function find_placetype_cat_specs(data)
local entry_placetype, place_desc, first_holonym_index, overriding_holonym, from_demonym =
data.entry_placetype, data.place_desc, data.first_holonym_index, data.overriding_holonym, data.from_demonym
local form_of_directive = data.form_of_directive
local function fetch_cat_specs(holonym_to_match, index, no_fallback)
local holonym_placetype = holonym_to_match.placetype
if not holonym_placetype then
return nil
end
local holonym_placename = holonym_to_match.unlinked_placename
if not holonym_placename then
internal_error("Missing unlinked_placename in holonym (index %s): %s", index, holonym_to_match)
end
local cat_specs, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
return m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt) return m_placetypes.political_division_cat_handler {
entry_placetype = equiv_entry_pt,
holonym_placetype = equiv_holonym_pt,
holonym_placename = holonym_placename,
holonym_index = index,
place_desc = place_desc,
from_demonym = from_demonym,
} end)
end,
{no_fallback = no_fallback, form_of_directive = form_of_directive}
)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
local cat_handler, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
local entry_placetype_data = m_placetypes.placetype_data[equiv_entry_pt]
if entry_placetype_data and entry_placetype_data.cat_handler then
return entry_placetype_data.cat_handler
end
end,
{no_fallback = no_fallback, form_of_directive = form_of_directive}
)
if cat_handler then
local cat_specs = m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt) return cat_handler {
entry_placetype = equiv_entry_placetype_and_qualifier.placetype,
holonym_placetype = equiv_holonym_pt,
holonym_placename = holonym_placename,
holonym_index = index,
place_desc = place_desc,
from_demonym = from_demonym,
} end)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
end
if not no_fallback then
local cat_specs, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
local entry_placetype_data = m_placetypes.placetype_data[equiv_entry_pt]
if entry_placetype_data then
return m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt)
return entry_placetype_data[equiv_holonym_pt .. "/*"]
end)
end
end,
{form_of_directive = form_of_directive}
)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
end
return nil
end
if overriding_holonym then
local cat_specs, fetched_entry_placetype = fetch_cat_specs(overriding_holonym, nil)
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = overriding_holonym,
}
end
else
-- First pass: no fallback (exact entry placetype match only).
for i, holonym in ipairs(place_desc.holonyms) do
if first_holonym_index and i < first_holonym_index then
-- continue
else
local cat_specs, fetched_entry_placetype = fetch_cat_specs(holonym, i, "no_fallback")
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = holonym,
triggering_holonym_index = i,
}
end
end
end
-- Second pass: with fallback.
for i, holonym in ipairs(place_desc.holonyms) do
if first_holonym_index and i < first_holonym_index then
-- continue
else
local cat_specs, fetched_entry_placetype = fetch_cat_specs(holonym, i)
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = holonym,
triggering_holonym_index = i,
}
end
end
end
end
return nil
end
-- Turn a list of category specs (see comment at section top) into the corresponding categories
-- (minus the language code prefix).
local function cat_specs_to_categories(place_desc, cat_data)
local all_cats = {}
local cat_specs, entry_placetype, triggering_holonym, triggering_holonym_index =
cat_data.cat_specs, cat_data.entry_placetype, cat_data.triggering_holonym, cat_data.triggering_holonym_index
if triggering_holonym then
for _, cat_spec in ipairs(cat_specs) do
local cat
if cat_spec == true then
-- ZH: "法國的城市" (location_key + 的 + zh_placetype_name); +++ replaced below
cat = "+++" .. zh_strings.de_particle .. get_zh_placetype_name(entry_placetype)
else
cat = cat_spec
end
if cat:find("%+%+%+") then
local group, key, spec, container_trail = m_placetypes.find_matching_holonym_location {
holonym_placetype = triggering_holonym.placetype,
holonym_placename = triggering_holonym.unlinked_placename,
holonym_index = triggering_holonym_index,
place_desc = place_desc,
}
if group then
cat = cat:gsub("%+%+%+", m_strutils.replacement_escape(m_placetypes.get_prefixed_key(key, spec)))
insert(all_cats, cat)
else
mw.log(("Unable to insert category for cat spec '%s' because holonym '%s/%s' did not match a " ..
"known location"):format(cat, triggering_holonym.placetype, triggering_holonym.unlinked_placename))
track("cant-match-holonym-for-category-spec")
end
else
insert(all_cats, cat)
end
end
else
for _, cat_spec in ipairs(cat_specs) do
local cat
if cat_spec == true then
-- ZH: bare placetype category (e.g. "城市")
cat = get_zh_placetype_name(entry_placetype)
else
cat = cat_spec
if cat:find("%+%+%+") then
internal_error("Category %s contains +++ but there is no holonym to substitute", cat)
end
end
insert(all_cats, cat)
end
end
return all_cats
end
-- Return the categories (without initial lang code) that should be added to the entry, given the place description
-- and a particular entry placetype.
local function get_placetype_cats(place_desc, entry_placetype, from_demonym, form_of_directive)
local cats = {}
local first_holonym_index = 1
while first_holonym_index <= #place_desc.holonyms do
local cat_data = find_placetype_cat_specs {
entry_placetype = entry_placetype,
place_desc = place_desc,
first_holonym_index = first_holonym_index,
from_demonym = from_demonym,
form_of_directive = form_of_directive,
}
if not cat_data then
break
end
local triggering_holonym = cat_data.triggering_holonym
if not triggering_holonym then
internal_error("find_placetype_cat_specs should have returned a triggering holonym: %s", cat_data)
end
extend(cats, cat_specs_to_categories(place_desc, cat_data))
first_holonym_index = cat_data.triggering_holonym_index
local equiv_triggering_placetypes = m_placetypes.get_placetype_equivs(triggering_holonym.placetype,
{no_fallback = true})
for _, equiv in ipairs(equiv_triggering_placetypes) do
local other_holonyms_of_same_type = place_desc.holonyms_by_placetype[equiv.placetype]
if other_holonyms_of_same_type then
for _, other_placename_of_same_type in ipairs(other_holonyms_of_same_type) do
if other_placename_of_same_type ~= triggering_holonym.unlinked_placename then
local overriding_holonym = {
placetype = triggering_holonym.placetype,
unlinked_placename = other_placename_of_same_type,
}
local other_cat_data = find_placetype_cat_specs {
entry_placetype = entry_placetype,
place_desc = place_desc,
overriding_holonym = overriding_holonym,
from_demonym = from_demonym,
form_of_directive = form_of_directive,
}
if other_cat_data then
extend(cats, cat_specs_to_categories(place_desc, other_cat_data))
end
end
end
end
end
first_holonym_index = first_holonym_index + 1
while first_holonym_index <= #place_desc.holonyms do
if place_desc.holonyms[first_holonym_index].continue_cat_loop then
break
end
first_holonym_index = first_holonym_index + 1
end
end
if cats[1] then
return cats
end
local entry_pt_default, equiv_entry_placetype_and_qualifier =
m_placetypes.get_equiv_placetype_prop(entry_placetype, function(pt)
return m_placetypes.placetype_data[pt] and m_placetypes.placetype_data[pt].default
end,
{form_of_directive = form_of_directive})
if entry_pt_default then
return cat_specs_to_categories(place_desc, {
cat_specs = entry_pt_default,
entry_placetype = equiv_entry_placetype_and_qualifier.placetype,
})
end
return {}
end
--[==[
Iterate through each type of place and return a list of the categories that need to be added to the entry.
See enwikt [[Module:place]] for detailed documentation.
]==]
function export.get_cats(args, overall_place_spec, from_demonym)
local cats = {}
local place_descriptions = overall_place_spec.descs
handle_category_implications(place_descriptions, m_placetypes.cat_implications)
m_placetypes.augment_holonyms_with_container(place_descriptions)
if overall_place_spec.directives then
for _, directive_terms in ipairs(overall_place_spec.directives) do
local spec_cats = directive_terms.spec.cat
if spec_cats then
if type(spec_cats) == "string" then
spec_cats = {spec_cats}
end
for _, spec_cat in ipairs(spec_cats) do
insert(cats, spec_cat)
end
end
if directive_terms.spec.type_prefix then
for _, place_desc in ipairs(place_descriptions) do
for _, placetype in ipairs(place_desc.placetypes) do
if not m_placetypes.placetype_is_ignorable(placetype) then
extend(cats, get_placetype_cats(place_desc, placetype, from_demonym,
directive_terms.spec.type_prefix))
end
end
end
end
end
end
if not from_demonym then
local bare_categories = m_placetypes.get_bare_categories(args, overall_place_spec)
extend(cats, bare_categories)
end
for _, place_desc in ipairs(place_descriptions) do
if not from_demonym then
for _, placetype in ipairs(place_desc.placetypes) do
if not m_placetypes.placetype_is_ignorable(placetype) then
extend(cats, get_placetype_cats(place_desc, placetype))
end
end
end
extend(cats, get_placetype_cats(place_desc, "*", from_demonym))
end
if args.cat then
for _, cat in ipairs(args.cat) do
local split_cats = split_on_comma(cat)
extend(cats, split_cats)
end
end
return cats
end
-- Return the category wikicode for a list of categories.
-- ZH: uses `lang:getFullName() .. " " .. cat` format for regular categories (same as cln: format in enwikt),
-- matching zhwikt's convention of "漢語 XX" category names instead of "zh:XX".
local function format_cats(lang, cats, sort_key)
local full_cats = {}
local langname = lang:getFullName()
for _, cat in ipairs(cats) do
local cln_cat = cat:match("^cln:(.*)$")
if cln_cat then
insert(full_cats, langname .. " " .. cln_cat)
else
-- ZH: use langname prefix instead of langcode:cat
insert(full_cats, langname .. " " .. cat)
end
end
return require(utilities_module).format_categories(full_cats, lang, sort_key, nil,
force_cat or m_placetypes.get_force_cat())
end
----------- Main entry point
--[==[
Implementation of {{tl|place}}. Meant to be callable from another module.
See enwikt [[Module:place]] for full documentation of the `data` argument fields.
]==]
function export.format(data)
local template_args = data.template_args
local list_param = {list = true}
local boolean_param = {type = "boolean"}
local params = {
[1] = {required = true, type = "language", default = "und"},
[2] = {required = true, list = true},
["t"] = list_param,
["tid"] = {list = true, allow_holes = true},
["cat"] = list_param,
["nocat"] = boolean_param,
["nocap"] = boolean_param,
["sort"] = true,
["pagename"] = true, -- for testing or documentation purposes
["a"] = true,
["addl"] = true,
["def"] = true,
-- params that are only used when transcluding using {{tcl}}/{{transclude}}, to transmit information to {{tcl}}.
["tcl"] = true,
["tcl_t"] = list_param,
["tcl_tid"] = list_param,
["tcl_nolb"] = true,
["tcl_nolc"] = boolean_param,
["tcl_noextratext"] = boolean_param,
}
-- add "extra info" parameters
for _, extra_arg_spec in ipairs(export.extra_info_args) do
params[extra_arg_spec.arg] = list_param
end
if template_args.def == "" then
error("Cannot currently pass def= as an empty parameter; use def=- if you want to suppress the definition display")
end
local args = require("Module:parameters").process(template_args, params)
if args.a then
track("a")
end
data.args = args
local overall_place_spec = parse_overall_place_spec(data)
data.overall_place_spec = overall_place_spec
return get_def(data) .. (
args.nocat and "" or format_cats(args[1], export.get_cats(args, overall_place_spec), args.sort))
end
--[==[
Actual entry point of {{tl|place}}.
]==]
function export.show(frame)
return export.format {
template_args = frame:getParent().args,
}
end
return export
grt6sdrbl2tpy6nee1u6avgg6replgb
9758135
9758131
2026-05-13T00:22:40Z
TongcyDai
53191
9758135
Scribunto
text/plain
local export = {}
local force_cat = false -- set to true for testing
local m_placetypes = require("Module:place/placetypes")
local m_links = require("Module:links")
local memoize = require("Module:memoize")
local m_strutils = require("Module:string utilities")
local m_table = require("Module:table")
-- Chinese localization data (zh_name, zh_suffix, qualifiers, extra-info labels, etc.)
local m_zh_data = require("Module:place/data/sandbox")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
local form_of_module = "Module:form of"
local languages_module = "Module:languages"
local parse_interface_module = "Module:parse interface"
local parse_utilities_module = "Module:parse utilities"
local parameter_utilities_module = "Module:parameter utilities"
local utilities_module = "Module:utilities"
local enlang = require(languages_module).getByCode("en")
local rmatch = m_strutils.match
local rfind = m_strutils.find
local ulen = m_strutils.len
local split = m_strutils.split
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local pluralize = require(en_utilities_module).pluralize
local extend = m_table.extend
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local internal_error = m_placetypes.internal_error
local process_error = m_placetypes.process_error
local placetype_data = m_placetypes.placetype_data
-- Shorthand for the ZH localization string table.
local zh_strings = m_zh_data.zh_strings
--[==[
ZH fork of [[Module:place]] (enwikt). Architecture and data structures are identical to the English version;
only the display-formatting functions are changed to produce Chinese-language definitions.
Key structural differences from enwikt:
* Old-style holonyms are reversed (big→small containment order) and joined with 、/和 rather than "in X, Y".
* Sentence pattern: 位於[holonyms]的[placetype] (or [holonyms]的[placetype] for "of"-type placetypes).
* No articles (a/an/the) in generated text.
* Pref/suf holonym affixes append the Chinese zh_suffix instead of English "placetype of X".
* Translations are joined with "," (full-width comma); parenthetical glosses use ().
* Extra-info labels (capital, largest city, etc.) come from Module:place/data zh_extra_info_labels.
* sentence_style is always true for ZH (extra info uses "。" separator, not ";").
]==]
--[==[ var:
List specifying the allowed form-of directives, used for former names, official names, abbreviations, etc. of places.
The key is the form-of directive and the value is an object with the following properties:
* `text`: The actual text displayed before the terms. If the value is `+`, the key is used as the text. If the value is
a function, it is passed a single argument, the overall place spec (see comment at top of file) and should return
the text to be displayed.
* `type_prefix`: The prefix used to generate the placetype for looking up the appropriate category or categories in the
placetype data structure. Can be omitted if there are no categories associated with the directive.
* `conjunction`: The conjunction used to join multiple terms, defaulting to `and`.
* `cat`: Additional category or categories to add the term to, whenever this particular directive is used.
* `default_foreign`: If specified, the default language of terms given along with this directive is the language in
{{para|1}}; otherwise it is English.
]==]
export.all_form_of_directives = {
["former name of"] = {text = "+", type_prefix = "FORMER_NAME_OF"},
["fmr of"] = {alias_of = "former name of"},
["ancient name of"] = {text = "+", type_prefix = "FORMER_NAME_OF"},
["official name of"] = {text = "+", type_prefix = "OFFICIAL_NAME_OF"},
["former official name of"] = {text = "+", type_prefix = "FORMER_OFFICIAL_NAME_OF"},
["long form of"] = {text = "+", type_prefix = "LONG_FORM_OF"},
["former long form of"] = {text = "+", type_prefix = "FORMER_LONG_FORM_OF"},
["nickname for"] = {text = "+", type_prefix = "NICKNAME_FOR"},
["official nickname for"] = {text = "+", type_prefix = "OFFICIAL_NICKNAME_FOR"},
["former nickname for"] = {text = "+", type_prefix = "FORMER_NICKNAME_FOR"},
["derogatory name for"] = {text = "[[Appendix:Glossary#derogatory|derogatory]] name for", type_prefix = "DEROGATORY_NAME_FOR"},
["synonym of"] = {text = "+"},
["syn of"] = {alias_of = "synonym of"},
["abbreviation of"] = {text = "[[Appendix:Glossary#abbreviation|abbreviation]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:abbreviations",
default_foreign = true},
["abbr of"] = {alias_of = "abbreviation of"},
["abbrev of"] = {alias_of = "abbreviation of"},
["initialism of"] = {text = "[[Appendix:Glossary#initialism|initialism]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:initialisms",
default_foreign = true},
["init of"] = {alias_of = "initialism of"},
["acronym of"] = {text = "[[Appendix:Glossary#acronym|acronym]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:acronyms",
default_foreign = true},
["syllabic abbreviation of"] = {text = "[[Appendix:Glossary#syllabic abbreviation|syllabic abbreviation]] of", type_prefix = "ABBREVIATION_OF", cat = "cln:syllabic abbreviations",
default_foreign = true},
["sylabbr of"] = {alias_of = "syllabic abbreviation of"},
["sylabbrev of"] = {alias_of = "syllabic abbreviation of"},
["ellipsis of"] = {text = "[[Appendix:Glossary#ellipsis|ellipsis]] of", type_prefix = "ELLIPSIS_OF", cat = "cln:ellipses",
default_foreign = true},
["ellip of"] = {alias_of = "ellipsis of"},
["clipping of"] = {text = "[[Appendix:Glossary#clipping|clipping]] of", type_prefix = "CLIPPING_OF", cat = "cln:clippings",
default_foreign = true},
["clip of"] = {alias_of = "clipping of"},
["alternative form of"] = {text = "+", default_foreign = true},
["alt form"] = {alias_of = "alternative form of"},
["alternative spelling of"] = {text = "+", default_foreign = true},
["alt spell"] = {alias_of = "alternative spelling of"},
["alt sp"] = {alias_of = "alternative spelling of"},
["dated form of"] = {text = "[[Appendix:Glossary#dated|dated]] form of", type_prefix = "DATED_FORM_OF", cat = "cln:dated forms",
default_foreign = true},
["dated form"] = {alias_of = "dated form of"},
["dated spelling of"] = {text = "[[Appendix:Glossary#dated|dated]] spelling of", type_prefix = "DATED_FORM_OF", cat = "cln:dated forms",
default_foreign = true},
["dated spell"] = {alias_of = "dated spelling of"},
["dated sp"] = {alias_of = "dated spelling of"},
["archaic form of"] = {text = "[[Appendix:Glossary#archaic|archaic]] form of", type_prefix = "ARCHAIC_FORM_OF", cat = "cln:archaic forms",
default_foreign = true},
["arch form"] = {alias_of = "archaic form of"},
["archaic spelling of"] = {text = "[[Appendix:Glossary#archaic|archaic]] spelling of", type_prefix = "ARCHAIC_FORM_OF", cat = "cln:archaic forms",
default_foreign = true},
["arch spell"] = {alias_of = "archaic spelling of"},
["arch sp"] = {alias_of = "archaic spelling of"},
["obsolete form of"] = {text = "[[Appendix:Glossary#obsolete|obsolete]] form of", type_prefix = "OBSOLETE_FORM_OF", cat = "cln:obsolete forms",
default_foreign = true},
["obs form"] = {alias_of = "obsolete form of"},
["obsolete spelling of"] = {text = "[[Appendix:Glossary#obsolete|obsolete]] spelling of", type_prefix = "OBSOLETE_FORM_OF", cat = "cln:obsolete forms",
default_foreign = true},
["obs spell"] = {alias_of = "obsolete spelling of"},
["obs sp"] = {alias_of = "obsolete spelling of"},
}
local function get_seat_text(overall_place_spec)
local placetype = overall_place_spec.descs[1].placetypes[1]
if placetype == "county" or placetype == "counties" then
return "county seat"
elseif placetype == "parish" or placetype == "parishes" then
return "parish seat"
elseif placetype == "borough" or placetype == "boroughs" then
return "borough seat"
else
return "seat"
end
end
--[==[ var:
List specifying the allowed arguments containing extra information that is sometimes added to a definition, such as the
capital, largest city, modern name, official name, etc., along with associated properties; displayed in the order given.
See enwikt [[Module:place]] for full documentation of each field.
]==]
export.extra_info_args = {
{arg = "modern", text = "+", conjunction = "or", display_even_when_dropped = true},
{arg = "now", text = "now,", conjunction = "or", display_even_when_dropped = true},
{arg = "full", text = "in full,", conjunction = "or", display_even_when_dropped = true},
{arg = "short", text = "short form", conjunction = "or"},
{arg = "abbr", text = "abbreviation", conjunction = "or"},
{arg = "former", text = "formerly,"},
{arg = "official", text = "official name", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "capital", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "largest city", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "caplc", text = "capital and largest city", match_sentence_style = true, auto_plural = false,
with_colon = true},
{arg = "seat", text = get_seat_text, match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "shire town", text = "+", match_sentence_style = true, auto_plural = true, with_colon = true},
{arg = "headquarters", text = "+", match_sentence_style = true, auto_plural = false, with_colon = true},
{arg = "center", text = "administrative center", match_sentence_style = true, auto_plural = false, with_colon = true},
{arg = "centre", text = "administrative centre", match_sentence_style = true, auto_plural = false, with_colon = true},
}
export.extra_info_arg_map = {}
for _, spec in ipairs(export.extra_info_args) do
export.extra_info_arg_map[spec.arg] = spec
end
----------- Wikicode utility functions
-- Return a wikilink link {{l|language|text}}
local function link(text, langcode, id)
if not langcode then
return text
end
return m_links.full_link(
{term = text, lang = require(languages_module).getByCode(langcode, true, "allow etym"), id = id},
nil, "allow self link"
)
end
---------- Basic utility functions
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
local function ucfirst_all(text)
if text:find(" ") then
local parts = split(text, " ", true)
for i, part in ipairs(parts) do
parts[i] = m_strutils.ucfirst(part)
end
return concat(parts, " ")
else
return m_strutils.ucfirst(text)
end
end
local function lc(text)
return mw.getContentLanguage():lc(text)
end
---------- Argument parsing functions and utilities
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",") then
return require(parse_interface_module).split_on_comma(val)
else
return {val}
end
end
-- Split an argument on slash, but not slash occurring inside of HTML tags like </span> or <br />.
local function split_on_slash(arg)
if arg:find("<") then
local m_parse_utilities = require(parse_utilities_module)
-- We implement this by parsing balanced segment runs involving <...>, and splitting on slash in the remainder.
-- The result is a list of lists, so we have to rejoin the inner lists by concatenating.
local segments = m_parse_utilities.parse_balanced_segment_run(arg, "<", ">")
local slash_separated_groups = m_parse_utilities.split_alternating_runs(segments, "/")
for i, group in ipairs(slash_separated_groups) do
slash_separated_groups[i] = concat(group)
end
return slash_separated_groups
else
return split(arg, "/", true)
end
end
-- Implement "implications", i.e. where the presence of a given holonym causes additional holonym(s) to be added.
-- Implications apply only to categorization.
local function handle_category_implications(place_descriptions, implication_data)
for i, desc in ipairs(place_descriptions) do
if desc.holonyms then
local new_holonyms = {}
for _, holonym in ipairs(desc.holonyms) do
insert(new_holonyms, holonym)
local imp_data = m_placetypes.get_equiv_placetype_prop(holonym.placetype, function(pt)
local implication = implication_data[pt] and implication_data[pt][holonym.unlinked_placename]
if implication then
return implication
end
end)
if imp_data then
for _, holonym_to_add in ipairs(imp_data) do
local split_holonym = split_on_slash(holonym_to_add)
if #split_holonym ~= 2 then
internal_error("Invalid holonym in implications: %s", holonym_to_add)
end
local holonym_placetype, holonym_placename = unpack(split_holonym, 1, 2)
local new_holonym = {
placetype = holonym_placetype, unlinked_placename = holonym_placename
}
insert(new_holonyms, new_holonym)
m_placetypes.key_holonym_into_place_desc(desc, new_holonym)
end
end
end
desc.holonyms = new_holonyms
end
end
end
-- Split a holonym (e.g. "continent/Europe" or "country/en:Italy" or "in southern" or "r:suf/O'Higgins" or
-- "c/Austria,Germany,Czech Republic") into its components. Return a list of holonym objects (see top of file). Note
-- that if there isn't a slash in the holonym (e.g. "in southern"), the `placetype` field of the holonym will be nil.
-- Placetype aliases (e.g. "r" for "region") and placename aliases (e.g. "US" or "USA" for "United States") will be
-- expanded.
local function split_holonym(raw)
local no_display, combined_holonym = raw:match("^(!)(.*)$")
no_display = not not no_display
combined_holonym = combined_holonym or raw
local suppress_comma, combined_holonym_without_comma = combined_holonym:match("^(%*)(.*)$")
suppress_comma = not not suppress_comma
combined_holonym = combined_holonym_without_comma or combined_holonym
local holonym_parts = split_on_slash(combined_holonym)
if #holonym_parts == 1 then
-- `unlinked_placename` should not be used.
return {{display_placename = combined_holonym, no_display = no_display, suppress_comma = suppress_comma}}
end
-- Rejoin further slashes in case of slash in holonym placename, e.g. Admaston/Bromley.
local placetype = holonym_parts[1]
local placename = concat(holonym_parts, "/", 2)
-- Check for modifiers after the holonym placetype.
local split_holonym_placetype = split(placetype, ":", true)
placetype = split_holonym_placetype[1]
local affix_type
local saw_also
local saw_the
for i = 2, #split_holonym_placetype do
local modifier = split_holonym_placetype[i]
if modifier == "also" then
if saw_also then
error(("Modifier ':also' occurs twice in holonym '%s'"):format(combined_holonym))
end
saw_also = true
elseif modifier == "the" then
if saw_the then
error(("Modifier ':the' occurs twice in holonym '%s'"):format(combined_holonym))
end
saw_the = true
elseif modifier == "pref" or modifier == "Pref" or modifier == "suf" or modifier == "Suf" or
modifier == "noaff" then
if affix_type then
error(("Affix-type modifier ':%s' occurs twice in holonym '%s'"):format(modifier, combined_holonym))
end
affix_type = modifier
else
error(("Unrecognized holonym placetype modifier '%s', should be one of " ..
"'pref', 'Pref', 'suf', 'Suf', 'noaff', 'also' or 'the'"):format(modifier))
end
end
placetype = m_placetypes.resolve_placetype_aliases(placetype)
local holonyms = split_on_comma(placename)
local pluralize_affix = #holonyms > 1
local affix_holonym_index = (affix_type == "pref" or affix_type == "Pref") and 1 or affix_type == "noaff" and 0 or
#holonyms
for i, placename in ipairs(holonyms) do
-- Check for langcode before the holonym placename, but don't get tripped up by Wikipedia links, which begin
-- "[[w:...]]" or "[[wikipedia:]]".
local langcode, placename_without_langcode = rmatch(placename, "^([^%[%]]-):(.*)$")
if langcode then
placename = placename_without_langcode
end
placename = m_placetypes.resolve_placename_display_aliases(placetype, placename)
holonyms[i] = {
placetype = placetype,
display_placename = placename,
unlinked_placename = m_placetypes.remove_links_and_html(placename),
langcode = langcode,
affix_type = i == affix_holonym_index and affix_type or nil,
pluralize_affix = i == affix_holonym_index and pluralize_affix,
suppress_affix = i ~= affix_holonym_index,
no_display = no_display,
suppress_comma = suppress_comma,
continue_cat_loop = saw_also,
force_the = i == 1 and saw_the,
}
end
return holonyms
end
local get_param_mods = memoize(function()
local m_param_utils = require(parameter_utilities_module)
return m_param_utils.construct_param_mods {
{group = {"link", "q", "l", "ref"}},
{param = "eq"},
{param = "conj", set = {["and"] = true, ["or"] = true, ["and/or"] = true}, overall = true},
}
end)
local function parse_term_with_inline_modifiers(term, paramname, default_lang)
local function generate_obj(raw_term, parse_err)
local obj = require(parameter_utilities_module).generate_obj_maybe_parsing_lang_prefix {
term = raw_term,
parse_err = parse_err,
parse_lang_prefix = true,
}
obj.lang = obj.lang or default_lang
return obj
end
return require(parse_interface_module).parse_inline_modifiers(term, {
paramname = paramname,
param_mods = get_param_mods(),
generate_obj = generate_obj,
splitchar = ",",
outer_container = {},
})
end
local function parse_form_of_directive(arg, lang, form_of_overridden_args)
local form_of_directive, raw_terms = arg:match("^@([a-z -]+):(.*)$")
if not form_of_directive then
error("Misformatted @-directive: " .. dump(arg))
end
if not export.all_form_of_directives[form_of_directive] then
local known_directives = {}
for k, _ in pairs(export.all_form_of_directives) do
insert(known_directives, '"' .. k .. '"')
end
table.sort(known_directives)
error(("Unrecognized form-of directive %s in @-directive %s; recognized directives are %s"):format(
dump(form_of_directive), dump(arg), concat(known_directives, ", ")))
end
local spec = export.all_form_of_directives[form_of_directive]
local canonical_directive = form_of_directive
if spec.alias_of then
canonical_directive = spec.alias_of
spec = export.all_form_of_directives[canonical_directive]
if not spec then
internal_error("Form-of directive alias %s points to %s, which is not a directive",
"@" .. form_of_directive, canonical_directive)
elseif spec.alias_of then
internal_error("Form-of directive alias %s points to %s, which is also an alias",
"@" .. form_of_directive, canonical_directive)
end
end
local default_foreign = spec.default_foreign
local directive_param = "@" .. form_of_directive
if form_of_overridden_args and form_of_overridden_args[canonical_directive] then
raw_terms = form_of_overridden_args[canonical_directive].new_value
local new_directive = form_of_overridden_args[canonical_directive].new_directive
local new_spec = export.all_form_of_directives[new_directive]
if not new_spec then
error(("Internal error: [[Module:transclude]] passed in unrecognized replacement directive '@%s'"):
format(new_directive))
end
if new_spec.alias_of then
error(("Internal error: [[Module:transclude]] passed in replacement directive alias '@%s', " ..
"should be canonical"):format(new_directive))
end
if new_directive ~= canonical_directive then
directive_param = directive_param .. (" (replaced with @%s)"):format(new_directive)
canonical_directive = new_directive
spec = new_spec
end
default_foreign = true
end
local terms = parse_term_with_inline_modifiers(raw_terms, directive_param,
default_foreign and lang or enlang)
return {
directive = canonical_directive,
terms = terms.terms,
conj = terms.conj,
spec = spec,
}
end
-- Parse an argument containing extra information that is sometimes added to a definition, such as the capital, largest
-- city, modern name, official name, etc. `args` is the value from the parsed argument structure and can be either nil,
-- a string or a list. `spec` is the extra info spec corresponding to the type of extra info. Each value in `args` can
-- be a comma-separated list of terms with inline modifiers attached.
local function parse_extra_info_arg(args, spec, default_lang)
if not args then
return nil
end
if type(args) ~= "table" then
args = {args}
end
if not args[1] then
return nil
end
local terms = nil
local conj
for i, arg in ipairs(args) do
local this_terms = parse_term_with_inline_modifiers(arg, spec.arg .. (i == 1 and "" or i), default_lang)
local thisconj = this_terms.conj
if not conj then
conj = thisconj
elseif thisconj and conj ~= thisconj then
error(("Two different conjunctions '%s' and '%s' specified for |%s=; you only need to specify the " ..
"conjunction once"):format(conj, thisconj))
end
if not terms then
terms = this_terms.terms
else
m_table.extend(terms, this_terms.terms)
end
end
return {
spec = spec,
terms = terms,
conj = conj,
}
end
--[==[
Parse a "new-style" place description, with placetypes and holonyms surrounded by `<<...>>` amid otherwise raw text.
Return value is a place description object as documented at the top of the file. Exported for use by
[[Module:demonyms]].
]==]
function export.parse_new_style_place_desc(text, lang, form_of_directives, form_of_overridden_args)
local placetypes = {}
local segments = split(text, "<<(.-)>>")
local retval = {holonyms = {}, order = {}}
local form_of_directives_already_present = form_of_directives and not not form_of_directives[1]
for i, segment in ipairs(segments) do
if i % 2 == 1 then
insert(retval.order, {type = "raw", value = segment})
elseif segment:find("@") then
if not form_of_directives then
error(("Form-of directive '%s' not allowed in this context"):format(segment))
elseif form_of_directives_already_present then
error(("Saw form-of directive '%s' in new-style place desc followed by direct (separate-parameter) form-of directives; not allowed"):format(
segment))
elseif placetypes[1] or retval.holonyms[1] then
error(("Form-of directive '%s' must come first, before placetypes and holonyms"):format(segment))
else
local form_of_directive = parse_form_of_directive(segment, lang, form_of_overridden_args)
if not retval.order[1] or retval.order[1].type ~= "raw" or retval.order[2] then
internal_error("`retval.order` should have a single raw element: %s", retval.order)
end
form_of_directive.pretext = retval.order[1].value
retval.order[1] = nil
insert(form_of_directives, form_of_directive)
end
elseif segment:find("/") then
local holonyms = split_holonym(segment)
for j, holonym in ipairs(holonyms) do
if j > 1 then
if not holonym.no_display then
if j == #holonyms then
insert(retval.order, {type = "raw", value = zh_strings.and_conj})
else
insert(retval.order, {type = "raw", value = zh_strings.enum_sep})
end
end
holonym.needs_article = true
end
insert(retval.holonyms, holonym)
if not holonym.no_display then
insert(retval.order, {type = "holonym", value = #retval.holonyms})
end
m_placetypes.key_holonym_into_place_desc(retval, holonym)
end
else
local treat_as, display = segment:match("^(..-):(.+)$")
if treat_as then
segment = treat_as
else
display = segment
end
-- see if the placetype segment is just qualifiers
local only_qualifiers = true
local split_segments = split(segment, " ", true)
for _, split_segment in ipairs(split_segments) do
if m_placetypes.placetype_qualifiers[split_segment] == nil then
only_qualifiers = false
break
end
end
insert(placetypes, {placetype = segment, only_qualifiers = only_qualifiers})
if only_qualifiers then
insert(retval.order, {type = "qualifier", value = display})
else
insert(retval.order, {type = "placetype", value = display})
end
end
end
if not form_of_directives_already_present and form_of_directives and form_of_directives[1] then
form_of_directives[#form_of_directives].posttext = ""
end
local final_placetypes = {}
for i, placetype in ipairs(placetypes) do
if i > 1 and placetypes[i - 1].only_qualifiers then
final_placetypes[#final_placetypes] = final_placetypes[#final_placetypes] .. " " .. placetypes[i].placetype
else
insert(final_placetypes, placetypes[i].placetype)
end
end
retval.placetypes = final_placetypes
return retval
end
--[==[
Parse one or more "new-style" place descriptions, with placetypes and holonyms surrounded by `<<...>>` amid otherwise
raw text. Multiple descriptions are separated by two semicolons in a row. Return value is a list of place description
objects as documented at the top of the file.
]==]
local function parse_conjoined_new_style_place_desc(text, lang, form_of_directives, form_of_overridden_args)
local separate_specs = split(text, ";(;[^ ]*)")
local descs = {}
for i = 1, #separate_specs do
if i % 2 == 1 then
insert(descs, export.parse_new_style_place_desc(separate_specs[i], lang, form_of_directives,
form_of_overridden_args))
form_of_directives = nil
else
descs[#descs].separator = separate_specs[i]
end
end
return descs
end
--[=[
Process numeric and "extra info" arguments into an overall place spec, as described at the top of the file.
]=]
local function parse_overall_place_spec(data)
local args, from_tcl, extra_info_overridden_set, form_of_overridden_args =
data.args, data.from_tcl, data.extra_info_overridden_set, data.form_of_overridden_args
local descs = {}
local this_desc
-- Index of separate (semicolon-separated) place descriptions within `descs`.
local desc_index = 1
-- Index of separate holonyms within a place description. 0 means we've seen no holonyms and have yet to process
-- the placetypes that precede the holonyms. 1 means we've seen no holonyms but have already processed the
-- placetypes.
local holonym_index = 0
local in_place_desc = false
local form_of_directives = {}
-- ZH: use Chinese semicolon and space characters for multi-description joiners.
local function set_desc_joiner(desc, separator)
if separator == ";" then
this_desc.joiner = zh_strings.semicolon -- ";" instead of "; "
this_desc.include_following_article = true
elseif separator == ";;" then
this_desc.joiner = " "
else
local joiner = separator:sub(2)
if rfind(joiner, "^%a") then
this_desc.joiner = " " .. joiner .. " "
elseif joiner == "," then
-- ZH: ASCII comma → full-width ,(無空格)
this_desc.joiner = zh_strings.trans_sep
else
this_desc.joiner = joiner .. " "
end
end
end
for _, arg in ipairs(args[2]) do
if arg:find("^@") then
if not (desc_index == 1 and holonym_index == 0) then
error("@-directives cannot follow place descriptions")
end
local form_of_directive = parse_form_of_directive(arg, args[1], form_of_overridden_args)
if form_of_directives[1] then
form_of_directive.pretext = ", "
else
form_of_directive.pretext = ""
end
insert(form_of_directives, form_of_directive)
elseif arg == ";" or arg:find("^;[^ ]") then
if not this_desc then
error("Saw semicolon joiner without preceding place description")
end
set_desc_joiner(this_desc, arg)
desc_index = desc_index + 1
holonym_index = 0
in_place_desc = false
else
if arg:find("<<") then
if in_place_desc then
error("New-style place description must come first or following a separator (semicolon or similar), not directly following another description")
end
in_place_desc = true
local this_descs = parse_conjoined_new_style_place_desc(arg, args[1], form_of_directives,
form_of_overridden_args)
for j, desc in ipairs(this_descs) do
this_desc = desc
if holonym_index > 0 then
desc_index = desc_index + 1
holonym_index = 0
end
if j < #this_descs then
set_desc_joiner(this_desc, this_desc.separator)
end
descs[desc_index] = this_desc
last_was_new_style = true
holonym_index = #this_desc.holonyms + 1
end
else
-- Old-style arguments can directly follow a new-style argument; they become additional holonyms
-- tacked onto the end of the holonym list, and are displayed old-style except that there is no
-- prefix before the first one following the new-style argument.
in_place_desc = true
if holonym_index == 0 then
local entry_placetypes = split_on_slash(arg)
this_desc = {placetypes = entry_placetypes, holonyms = {}}
descs[desc_index] = this_desc
holonym_index = holonym_index + 1
else
local holonyms = split_holonym(arg)
for j, holonym in ipairs(holonyms) do
if j > 1 then
-- All but the first in a multi-holonym need an article. Not for the first one because e.g.
-- {{place|en|city|s/Arizona|c/United States}} should not display as "a city in Arizona, the
-- United States". The overall first holonym in the place description gets an article if
-- needed regardless of our setting here.
holonym.needs_article = true
-- Insert "and" before the last holonym.
if j == #holonyms then
this_desc.holonyms[holonym_index] = {
-- Use the no_display value from the first holonym; it should be the same for all
-- holonyms. `unlinked_placename` should not be used.
display_placename = "and", no_display = holonyms[1].no_display
}
holonym_index = holonym_index + 1
end
end
this_desc.holonyms[holonym_index] = holonym
m_placetypes.key_holonym_into_place_desc(this_desc, this_desc.holonyms[holonym_index])
holonym_index = holonym_index + 1
end
end
end
end
end
if form_of_directives[1] and not form_of_directives[#form_of_directives].posttext then
form_of_directives[#form_of_directives].posttext =
(args.def and args.def ~= "-" or not args.def and descs[1]) and ": " or ""
end
-- Tracking code (unchanged from enwikt).
for _, desc in ipairs(descs) do
for _, entry_placetype in ipairs(desc.placetypes) do
local splits = m_placetypes.split_qualifiers_from_placetype(entry_placetype, "no canon qualifiers")
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, bare_placetype = unpack(split, 1, 3)
track("entry-placetype/" .. bare_placetype)
if this_qualifier then
track("entry-qualifier/" .. this_qualifier)
end
end
end
for _, holonym in ipairs(desc.holonyms) do
if holonym.placetype then
track("holonym-placetype/" .. holonym.placetype)
end
end
end
local extra_info = {}
for _, extra_info_spec in ipairs(export.extra_info_args) do
local extra_info_terms = parse_extra_info_arg(args[extra_info_spec.arg], extra_info_spec,
from_tcl and extra_info_overridden_set and extra_info_overridden_set[extra_info_spec.arg] and args[1] or
enlang)
if extra_info_terms then
insert(extra_info, extra_info_terms)
end
end
return {
lang = args[1],
args = args,
directives = form_of_directives,
descs = descs,
extra_info = extra_info,
}
end
-------- Definition-generating functions
-- Return a string with the wikilinks to the ZH translations of the word.
-- ZH: joins multiple translations with "," (full-width comma) instead of ", ".
local function get_translations(transl, ids)
local ret = {}
for i, t in ipairs(transl) do
local arg_transls = split_on_comma(t)
local arg_ids = ids[i]
if arg_ids then
arg_ids = split_on_comma(arg_ids)
if #arg_transls ~= #arg_ids then
error(("Saw %s translation%s in t%s=%s but %s ID%s in tid%s=%s"):format(
#arg_transls, #arg_transls > 1 and "s" or "", i == 1 and "" or i, t, #arg_ids,
#arg_ids > 1 and "'s" or "", i == 1 and "" or i, ids[i]))
end
end
for j, arg_transl in ipairs(arg_transls) do
insert(ret, link(arg_transl, "en", arg_ids and arg_ids[j] or nil))
end
end
return concat(ret, zh_strings.trans_sep) -- "," instead of ", "
end
-- Chinese has no articles; these stubs keep the call-sites intact.
local function get_placename_article(decorated_placename, placetypes, placename, suppress_holonym_use_the_check)
return nil
end
local function get_holonym_article(decorated_placename, place_desc, holonym_index)
return nil
end
-- Convert a holonym into display format. For ZH:
-- * No article prepended (Chinese has no articles).
-- * Both prefix and suffix affix types append the zh_suffix (e.g. "州", "省") directly to the linked name,
-- instead of the English "placetype of placename" / "placename placetype" construction.
-- * Display handlers are applied unchanged (they may add text based on the holonym's surrounding context).
local function format_holonym(place_desc, holonym_index, needs_article)
local holonym = place_desc.holonyms[holonym_index]
if holonym.no_display then
return ""
end
-- needs_article and force_the are not used in Chinese.
local output = holonym.display_placename
local placetype = holonym.placetype
local affix_type_pt_data, affix_type, affix_is_prefix, affix, prefix, suffix, no_affix_strings
local pt_equiv_for_affix_type, already_seen_affix, need_affix
local affix_pt_data, pt_equiv_for_affix
-- Implement display handlers (unchanged from enwikt).
local display_handler = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt) return placetype_data[pt] and placetype_data[pt].display_handler end)
if display_handler then
output = display_handler(placetype, output)
end
if not holonym.suppress_affix then
-- Affix detection logic is unchanged from enwikt; only the rendering differs below.
affix_type_pt_data, pt_equiv_for_affix_type = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt)
local cdpt = placetype_data[pt]
return cdpt and cdpt.affix_type and cdpt or nil
end
)
affix_pt_data, pt_equiv_for_affix = m_placetypes.get_equiv_placetype_prop(placetype,
function(pt)
local cdpt = placetype_data[pt]
return cdpt and (cdpt.affix_type or cdpt.affix or cdpt.prefix or cdpt.suffix) and cdpt or nil
end
)
if affix_type_pt_data then
affix_type = affix_type_pt_data.affix_type
need_affix = true
end
if affix_pt_data then
prefix = affix_pt_data.prefix or affix_pt_data.affix
suffix = affix_pt_data.suffix or affix_pt_data.affix
need_affix = true
end
no_affix_strings = affix_pt_data and affix_pt_data.no_affix_strings or
affix_type_pt_data and affix_type_pt_data.no_affix_strings
if holonym.affix_type and placetype then
affix_type = holonym.affix_type
prefix = prefix or placetype
suffix = suffix or placetype
need_affix = true
end
if need_affix then
affix_is_prefix = affix_type == "pref" or affix_type == "Pref"
if affix_is_prefix then
affix = prefix
else
affix = suffix
end
if not affix then
if not pt_equiv_for_affix_type then
internal_error("Something wrong, `pt_equiv_for_affix_type` not set processing holonym: %s",
holonym)
end
affix = pt_equiv_for_affix_type.placetype
if not affix then
internal_error("Something wrong, no affix could be located in `pt_equiv_for_affix_type` for " ..
"holonym %s: %s", holonym, pt_equiv_for_affix_type)
end
end
no_affix_strings = no_affix_strings or lc(affix)
-- ZH: skip pluralize_affix (Chinese doesn't pluralize)
end
end
-- ZH: resolve zh_suffix for the affix placetype before linking.
local zh_sfx_to_append = nil
if need_affix then
local _, zh_sfx = m_zh_data.get_zh_placetype_props(affix, m_placetypes)
if zh_sfx then
local zh_sfx_str = m_zh_data.format_zh_name(zh_sfx)
-- Check if zh_suffix already present in the unlinked output.
local unlinked = m_placetypes.remove_links_and_html(output)
if not unlinked:find(zh_sfx_str, 1, true) then
zh_sfx_to_append = zh_sfx_str
end
end
end
output = link(output, holonym.langcode or placetype and "en" or nil)
-- ZH: for both pref and suf, append zh_suffix directly after the linked name.
-- (EN prefix construction "placetype of placename" is not used in Chinese.)
if zh_sfx_to_append then
output = output .. zh_sfx_to_append
end
-- No article for Chinese.
return output
end
-- Format holonyms for a ZH old-style place description.
-- Collects all holonyms, filters "and"/"or" connectors, reverses for big→small containment order,
-- groups consecutive same-type holonyms (peer locations), then joins with ZH enumeration (、/和).
-- Returns the concatenated holonym string, e.g. "美國賓夕法尼亞州", "波蘭、白俄羅斯和烏克蘭".
local function format_holonyms_zh(place_desc)
local holonyms = place_desc.holonyms
if not holonyms or #holonyms == 0 then
return ""
end
-- Collect non-"and"/"or"/"的" holonym items with their original indices.
-- A raw "的" holonym (from |的| in the template, like enwikt's |of|) signals possessive preposition;
-- filter it from display since format_old_style_place_desc_for_display already appends de_particle.
local items = {}
local has_de_joiner = false
for i, h in ipairs(holonyms) do
if not h.no_display then
local dname = h.display_placename
if dname ~= "and" and dname ~= "or" then
if not h.placetype and dname == zh_strings.de_particle then
has_de_joiner = true
else
insert(items, {holonym_index = i, placetype = h.placetype})
end
end
end
end
-- Reverse for big→small order.
local reversed = {}
for i = #items, 1, -1 do
insert(reversed, items[i])
end
-- Group consecutive items with the same placetype (peers like multiple countries).
-- Raw-text holonyms (no placetype) break any current structural group.
local groups = {}
local i = 1
while i <= #reversed do
local item = reversed[i]
if not item.placetype then
-- Raw text (e.g. "南部", "東北部") forms its own singleton group.
local h = holonyms[item.holonym_index]
insert(groups, {type = "raw", text = h.display_placename})
i = i + 1
else
-- Structural holonym: collect consecutive ones of the same placetype.
local group = {type = "structural", items = {item}}
local pt = item.placetype
i = i + 1
while i <= #reversed do
local next_item = reversed[i]
if next_item.placetype == pt then
insert(group.items, next_item)
i = i + 1
else
break
end
end
insert(groups, group)
end
end
-- Format each group and assemble.
local parts = {}
for _, group in ipairs(groups) do
if group.type == "raw" then
insert(parts, group.text)
else
local formatted = {}
for _, item in ipairs(group.items) do
insert(formatted, format_holonym(place_desc, item.holonym_index, false))
end
if #formatted == 1 then
insert(parts, formatted[1])
elseif #formatted == 2 then
insert(parts, formatted[1] .. zh_strings.and_conj .. formatted[2])
else
local last = table.remove(formatted)
insert(parts, concat(formatted, zh_strings.enum_sep) .. zh_strings.and_conj .. last)
end
end
end
return concat(parts), has_de_joiner
end
-- Get the Chinese display name for a single (possibly qualified) placetype.
-- Strips qualifiers, looks up zh_name via m_zh_data, and prepends translated qualifier text.
-- `first_holonym_placetype` enables context-sensitive names (e.g. capital city → 首都/省會/首府).
local function get_zh_placetype_name(placetype, first_holonym_placetype)
local resolved_pt = m_placetypes.resolve_placetype_aliases(placetype)
local zh_name, _, zh_by_holonym = m_zh_data.get_zh_placetype_props(resolved_pt, m_placetypes)
if zh_name then
local resolved = m_zh_data.resolve_zh_name(zh_name, zh_by_holonym, first_holonym_placetype)
return m_zh_data.format_zh_name(resolved)
end
-- Fallback to English name; add tracking for missing zh_data entries.
track("missing-zh-placetype/" .. tostring(placetype))
return placetype
end
-- Format a single entry placetype (possibly with qualifiers) for ZH display.
-- Strips qualifiers from the placetype, translates each qualifier via zh_qualifiers,
-- and prepends them to the Chinese placetype name.
local function format_one_zh_placetype(pt, first_holonym_placetype)
-- Try progressive qualifier splits; use the first that has a zh_name entry.
local splits = m_placetypes.split_qualifiers_from_placetype(pt)
local qualifier_prefix = ""
for _, sp in ipairs(splits) do
local prev_qualifier, this_qualifier, bare_pt = unpack(sp, 1, 3)
-- Accumulate qualifier strings.
local q_str = ""
if prev_qualifier then
q_str = (m_zh_data.zh_qualifiers[prev_qualifier] or prev_qualifier) ..
(m_zh_data.zh_qualifiers[this_qualifier] or (this_qualifier or ""))
elseif this_qualifier then
q_str = m_zh_data.zh_qualifiers[this_qualifier] or this_qualifier
end
local zh_n = get_zh_placetype_name(bare_pt, first_holonym_placetype)
if zh_n ~= bare_pt then
-- Found a known ZH entry; use it.
return q_str .. zh_n
end
qualifier_prefix = q_str
end
-- Fallback: just translate the full (possibly unrecognized) placetype.
return qualifier_prefix .. get_zh_placetype_name(pt, first_holonym_placetype)
end
-- Build the ZH entry placetype description from the `placetypes` list.
-- Handles "and"/"or" splitting (e.g. "城市/and/市鎮" → "城市和市鎮"),
-- multiple placetypes without and/or (joined with "、...和"),
-- and context-sensitive names via first_holonym_placetype.
local function get_zh_entry_placetype_desc(placetypes, first_holonym_placetype)
local is_ignorable = m_placetypes.placetype_is_ignorable
-- Find last and/or position.
local and_or_pos
for i, pt in ipairs(placetypes) do
if pt == "and" or pt == "or" then
and_or_pos = i
end
end
if and_or_pos then
-- Split into group before and group after the conjunction.
local group1, group2 = {}, {}
for i = 1, and_or_pos - 1 do
if not is_ignorable(placetypes[i]) then
insert(group1, format_one_zh_placetype(placetypes[i], first_holonym_placetype))
end
end
for i = and_or_pos + 1, #placetypes do
if not is_ignorable(placetypes[i]) then
insert(group2, format_one_zh_placetype(placetypes[i], first_holonym_placetype))
end
end
local conj_str = placetypes[and_or_pos] == "or" and "或" or zh_strings.and_conj
local all = {}
for _, v in ipairs(group1) do insert(all, v) end
for _, v in ipairs(group2) do insert(all, v) end
if #all == 0 then return "" end
if #all == 1 then return all[1] end
local last = table.remove(all)
return concat(all, zh_strings.enum_sep) .. conj_str .. last
else
-- No explicit and/or: collect all non-ignorable placetypes.
local formatted = {}
for _, pt in ipairs(placetypes) do
if not is_ignorable(pt) then
insert(formatted, format_one_zh_placetype(pt, first_holonym_placetype))
end
end
if #formatted == 0 then return "" end
if #formatted == 1 then return formatted[1] end
local last = table.remove(formatted)
return concat(formatted, zh_strings.enum_sep) .. zh_strings.and_conj .. last
end
end
-- Return the ZH description of a placetype for use in new-style <<placetype>> segments.
local function get_placetype_description(placetype)
return format_one_zh_placetype(placetype, nil)
end
-- Return the ZH description of a qualifier for use in new-style <<qualifier>> segments.
local function get_qualifier_description(qualifier)
-- Trim to just the qualifier word (split_qualifiers_from_placetype requires a trailing non-qualifier word).
local splits = m_placetypes.split_qualifiers_from_placetype(qualifier .. " foo")
local sp = splits[#splits]
local prev_qualifier, this_qualifier = unpack(sp, 1, 2)
if this_qualifier then
local q = m_zh_data.zh_qualifiers[this_qualifier] or this_qualifier
if prev_qualifier then
return (m_zh_data.zh_qualifiers[prev_qualifier] or prev_qualifier) .. q
end
return q
end
return qualifier
end
-- Format a set of form-of directive terms (unchanged from enwikt, only conjunction uses zh_strings).
local function format_form_of_directive(overall_place_spec, directive_terms, ucfirst, from_tcl)
local formatted_terms = {}
local placetypes
if not overall_place_spec.descs[2] then
placetypes = overall_place_spec.descs[1].placetypes
else
placetypes = {}
for _, desc in ipairs(overall_place_spec.descs) do
m_table.extend(placetypes, desc.placetypes)
end
end
for _, termobj in ipairs(directive_terms.terms) do
local placename_article
if not termobj.alt and termobj.term and not termobj.term:find("%[%[") then
placename_article = get_placename_article(termobj.term, placetypes)
end
local linked_term = m_links.full_link(termobj, "term", nil, "show qualifiers")
linked_term = "<span class='form-of-definition-link'>" .. linked_term .. "</span>"
if termobj.eq then
linked_term = linked_term .. " (= " .. m_links.full_link {term = termobj.eq, lang = enlang} .. ")"
end
if placename_article then
linked_term = placename_article .. " " .. linked_term
end
insert(formatted_terms, linked_term)
end
local spec = directive_terms.spec
local text = spec.text
if type(text) == "function" then
text = text(overall_place_spec)
end
if text == "+" then
text = directive_terms.directive
end
if ucfirst then
text = m_strutils.ucfirst(text)
end
if not from_tcl then
local tracking_prefix = "form-of/" .. directive_terms.directive
track(tracking_prefix)
local langcode = overall_place_spec.lang:getCode()
local full_langcode = overall_place_spec.lang:getFullCode()
track(tracking_prefix .. "/" .. langcode)
if full_langcode ~= langcode then
track(tracking_prefix .. "/" .. full_langcode)
end
if full_langcode ~= "en" then
track(tracking_prefix .. "/non-english")
end
end
return (require(form_of_module).format_form_of {
text = text,
lemmas = m_table.serialCommaJoin(formatted_terms, {conj = directive_terms.conj or spec.conjunction or zh_strings.and_conj}),
lemma_classes = false,
})
end
-- Format extra-info terms (capital, largest city, modern name, etc.) for ZH.
-- * Labels come from m_zh_data.zh_extra_info_labels (or zh_capital_label_by_holonym_type for capital).
-- * Separator: "。" + label in sentence style; ";" + label otherwise.
-- * Multiple terms joined with 、/和 instead of serial comma.
-- * auto_plural is skipped (Chinese doesn't pluralize).
local function format_extra_info(overall_place_spec, extra_info_terms, sentence_style)
local formatted_terms = {}
for _, termobj in ipairs(extra_info_terms.terms) do
insert(formatted_terms, m_links.full_link(termobj, nil, nil, "show qualifiers"))
end
local spec = extra_info_terms.spec
-- Resolve ZH label: look up by spec.arg, then spec.text as fallback.
local zh_label = m_zh_data.zh_extra_info_labels[spec.arg]
if not zh_label then
-- Try spec.text as the lookup key (e.g. "capital and largest city").
local spec_text = spec.text
if type(spec_text) == "function" then
spec_text = spec_text(overall_place_spec)
end
zh_label = m_zh_data.zh_extra_info_labels[spec_text] or spec_text or spec.arg
end
-- Context-sensitive "capital" label based on first holonym type (首都/省會/首府/縣治…).
if spec.arg == "capital" then
if overall_place_spec.descs and overall_place_spec.descs[1] and overall_place_spec.descs[1].holonyms then
for _, h in ipairs(overall_place_spec.descs[1].holonyms) do
if h.placetype then
local ctx_label = m_zh_data.zh_capital_label_by_holonym_type[h.placetype]
if ctx_label then
zh_label = ctx_label
end
break
end
end
end
end
local text = zh_label
if spec.with_colon then
text = text .. ":" -- full-width colon
end
if sentence_style and spec.match_sentence_style then
text = "。" .. text
else
text = zh_strings.semicolon .. text
end
-- Join terms with ZH enumeration.
local conj = extra_info_terms.conj or zh_strings.and_conj
local joined
if #formatted_terms == 0 then
joined = ""
elseif #formatted_terms == 1 then
joined = formatted_terms[1]
elseif #formatted_terms == 2 then
joined = formatted_terms[1] .. conj .. formatted_terms[2]
else
local last = table.remove(formatted_terms)
joined = concat(formatted_terms, zh_strings.enum_sep) .. conj .. last
end
return text .. joined
end
-- Format an old-style place description for ZH display.
-- Chinese pattern: [位於|""][holonym_string][的][zh_placetype_name]
-- * Holonyms are reversed (big→small), grouped, and joined with 、/和.
-- * "位於" is prepended for "in"-type placetypes; omitted for "of"-type (e.g. capitals).
-- * args.a (article override) is used as a prefix to the placetype name.
local function format_old_style_place_desc_for_display(args, place_desc, desc_index, with_article, ucfirst_flag)
local placetypes = place_desc.placetypes
-- Determine the entry placetype (last non-ignorable, non-conjunction item) for preposition lookup.
local entry_placetype_for_prep = nil
for i = #placetypes, 1, -1 do
local pt = placetypes[i]
if not m_placetypes.placetype_is_ignorable(pt) and pt ~= "and" and pt ~= "or" then
entry_placetype_for_prep = pt
break
end
end
-- Determine first structured holonym placetype for context-sensitive zh_name lookups.
local first_holonym_placetype = nil
if place_desc.holonyms then
for _, h in ipairs(place_desc.holonyms) do
if h.placetype then
first_holonym_placetype = h.placetype
break
end
end
end
-- Build the Chinese placetype description (possibly with qualifiers and multiple types).
local zh_pt_name = get_zh_entry_placetype_desc(placetypes, first_holonym_placetype)
-- Handle args.a (article override): used as a direct prefix in Chinese, e.g. a=盎格魯撒克遜 → "盎格魯撒克遜王國".
if with_article and desc_index == 1 and args.a then
zh_pt_name = args.a .. zh_pt_name
end
-- Build holonym string (reversed, grouped, ZH-joined).
-- has_de_joiner is true when a bare |的| token was in the holonym list (like enwikt's |of|).
local holonym_str, has_de_joiner = "", false
if place_desc.holonyms and #place_desc.holonyms > 0 then
holonym_str, has_de_joiner = format_holonyms_zh(place_desc)
end
-- Determine preposition style ("in" → 位於…的; "of" → …的 with no 位於).
-- An explicit |的| joiner in the template overrides to possessive (no 位於).
local use_wei_yu = true
if has_de_joiner then
use_wei_yu = false
elseif entry_placetype_for_prep then
local prep = m_placetypes.get_placetype_entry_preposition(entry_placetype_for_prep)
if prep == "of" then
use_wei_yu = false
end
end
-- Assemble final string.
if holonym_str ~= "" then
if use_wei_yu then
return zh_strings.in_preposition .. holonym_str .. zh_strings.de_particle .. zh_pt_name
else
return holonym_str .. zh_strings.de_particle .. zh_pt_name
end
else
return zh_pt_name
end
end
--[==[
Get the full gloss (Chinese description) of a new-style place description. New-style place descriptions are
specified with a single string containing raw text interspersed with placetypes and holonyms surrounded by `<<...>>`.
Exported for use by [[Module:demonyms]].
]==]
function export.format_new_style_place_desc_for_display(args, place_desc, with_article)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
-- args.a not used in Chinese (no article system).
local max_holonym = 0
for _, order in ipairs(place_desc.order) do
local segment_type, segment = order.type, order.value
if segment_type == "raw" then
ins(segment)
elseif segment_type == "placetype" then
ins(get_placetype_description(segment))
elseif segment_type == "qualifier" then
ins(get_qualifier_description(segment))
elseif segment_type == "holonym" then
ins(format_holonym(place_desc, segment, false))
if segment > max_holonym then
max_holonym = segment
end
else
internal_error("Unrecognized segment type %s", segment_type)
end
end
if place_desc.holonyms and max_holonym < #place_desc.holonyms then
local holonym_no_prefix = true
for holonym_index = max_holonym + 1, #place_desc.holonyms do
-- Append remaining holonyms with a space prefix (no "in"/"of" for new-style).
ins(" " .. format_holonym(place_desc, holonym_index, false))
holonym_no_prefix = false
end
end
return concat(parts)
end
-- Return a string with the gloss (the description of the place itself, as opposed to translations).
-- `sentence_style` controls whether extra-info uses "。" (sentence) or ";" (semicolon) separation.
local function get_display_form(data)
local overall_place_spec, ucfirst, sentence_style, drop_extra_info, extra_info_overridden_set, from_tcl =
data.overall_place_spec, data.ucfirst, data.sentence_style, data.drop_extra_info,
data.extra_info_overridden_set, data.from_tcl
local args = overall_place_spec.args
local parts = {}
local function ins(txt)
table.insert(parts, txt)
end
if overall_place_spec.directives and overall_place_spec.directives[1] then
for i, directive_terms in ipairs(overall_place_spec.directives) do
ins(directive_terms.pretext)
if directive_terms.pretext ~= "" then
ucfirst = false
end
if not args.def or args.def == "-" then
ins(format_form_of_directive(overall_place_spec, directive_terms, ucfirst, from_tcl))
ucfirst = false
if i == #overall_place_spec.directives and directive_terms.posttext then
ins(directive_terms.posttext)
end
end
end
end
if args.def == "-" then
return concat(parts)
end
if args.def then
if args.def:find("<<") then
local def_desc = export.parse_new_style_place_desc(args.def, args[1])
ins(export.format_new_style_place_desc_for_display({}, def_desc, false))
else
ins(args.def)
end
else
local include_article = true
for n, desc in ipairs(overall_place_spec.descs) do
if desc.order then
ins(export.format_new_style_place_desc_for_display(args, desc, n == 1))
else
ins(format_old_style_place_desc_for_display(args, desc, n, include_article, ucfirst))
end
if desc.joiner then
ins(desc.joiner)
end
include_article = desc.include_following_article
ucfirst = false
end
end
local addl = args.addl
if addl then
if addl:find("^[;:]") then
ins(addl)
elseif addl:find("^_") then
ins(" " .. addl:sub(2))
else
ins("," .. addl)
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
if not drop_extra_info or extra_info_terms.spec.display_even_when_dropped or
extra_info_overridden_set and extra_info_overridden_set[extra_info_terms.spec.arg] then
ins(format_extra_info(overall_place_spec, extra_info_terms, sentence_style))
end
end
return concat(parts)
end
-- Return the definition line.
-- ZH: sentence_style is always true; ucfirst is always false (no case in Chinese);
-- parentheses around glosses are full-width ().
local function get_def(data)
local overall_place_spec, from_tcl, drop_extra_info, extra_info_overridden_set, translation_follows =
data.overall_place_spec, data.from_tcl, data.drop_extra_info, data.extra_info_overridden_set,
data.translation_follows
local args = overall_place_spec.args
local sentence_style = true -- always sentence style in Chinese
local ucfirst = false -- Chinese has no case
if #args.t > 0 then
local gloss = get_display_form {
overall_place_spec = overall_place_spec,
ucfirst = false,
sentence_style = false,
drop_extra_info = drop_extra_info,
extra_info_overridden_set = extra_info_overridden_set,
from_tcl = from_tcl,
}
if from_tcl and not args.tcl_nolc then
gloss = m_strutils.lcfirst(gloss)
end
if translation_follows then
return (gloss == "" and "" or gloss .. ":") .. get_translations(args.t, args.tid)
else
return get_translations(args.t, args.tid) ..
(gloss == "" and "" or zh_strings.paren_open .. gloss .. zh_strings.paren_close)
end
else
return get_display_form {
overall_place_spec = overall_place_spec,
ucfirst = ucfirst,
sentence_style = sentence_style,
drop_extra_info = drop_extra_info,
extra_info_overridden_set = extra_info_overridden_set,
from_tcl = from_tcl,
}
end
end
---------- Functions for the category wikicode
-- The code in this section finds the categories to which a given place belongs. See enwikt [[Module:place]]
-- for detailed documentation of the algorithm.
--[=[
Find the appropriate category specs for a given place description and placetype.
See enwikt [[Module:place]] for detailed documentation.
]=]
local function find_placetype_cat_specs(data)
local entry_placetype, place_desc, first_holonym_index, overriding_holonym, from_demonym =
data.entry_placetype, data.place_desc, data.first_holonym_index, data.overriding_holonym, data.from_demonym
local form_of_directive = data.form_of_directive
local function fetch_cat_specs(holonym_to_match, index, no_fallback)
local holonym_placetype = holonym_to_match.placetype
if not holonym_placetype then
return nil
end
local holonym_placename = holonym_to_match.unlinked_placename
if not holonym_placename then
internal_error("Missing unlinked_placename in holonym (index %s): %s", index, holonym_to_match)
end
local cat_specs, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
return m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt) return m_placetypes.political_division_cat_handler {
entry_placetype = equiv_entry_pt,
holonym_placetype = equiv_holonym_pt,
holonym_placename = holonym_placename,
holonym_index = index,
place_desc = place_desc,
from_demonym = from_demonym,
} end)
end,
{no_fallback = no_fallback, form_of_directive = form_of_directive}
)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
local cat_handler, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
local entry_placetype_data = m_placetypes.placetype_data[equiv_entry_pt]
if entry_placetype_data and entry_placetype_data.cat_handler then
return entry_placetype_data.cat_handler
end
end,
{no_fallback = no_fallback, form_of_directive = form_of_directive}
)
if cat_handler then
local cat_specs = m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt) return cat_handler {
entry_placetype = equiv_entry_placetype_and_qualifier.placetype,
holonym_placetype = equiv_holonym_pt,
holonym_placename = holonym_placename,
holonym_index = index,
place_desc = place_desc,
from_demonym = from_demonym,
} end)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
end
if not no_fallback then
local cat_specs, equiv_entry_placetype_and_qualifier = m_placetypes.get_equiv_placetype_prop(entry_placetype,
function(equiv_entry_pt)
local entry_placetype_data = m_placetypes.placetype_data[equiv_entry_pt]
if entry_placetype_data then
return m_placetypes.get_equiv_placetype_prop(holonym_placetype,
function(equiv_holonym_pt)
return entry_placetype_data[equiv_holonym_pt .. "/*"]
end)
end
end,
{form_of_directive = form_of_directive}
)
if cat_specs and cat_specs[1] then
return cat_specs, equiv_entry_placetype_and_qualifier.placetype
end
end
return nil
end
if overriding_holonym then
local cat_specs, fetched_entry_placetype = fetch_cat_specs(overriding_holonym, nil)
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = overriding_holonym,
}
end
else
-- First pass: no fallback (exact entry placetype match only).
for i, holonym in ipairs(place_desc.holonyms) do
if first_holonym_index and i < first_holonym_index then
-- continue
else
local cat_specs, fetched_entry_placetype = fetch_cat_specs(holonym, i, "no_fallback")
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = holonym,
triggering_holonym_index = i,
}
end
end
end
-- Second pass: with fallback.
for i, holonym in ipairs(place_desc.holonyms) do
if first_holonym_index and i < first_holonym_index then
-- continue
else
local cat_specs, fetched_entry_placetype = fetch_cat_specs(holonym, i)
if cat_specs and cat_specs[1] then
return {
entry_placetype = fetched_entry_placetype,
cat_specs = cat_specs,
triggering_holonym = holonym,
triggering_holonym_index = i,
}
end
end
end
end
return nil
end
-- Turn a list of category specs (see comment at section top) into the corresponding categories
-- (minus the language code prefix).
local function cat_specs_to_categories(place_desc, cat_data)
local all_cats = {}
local cat_specs, entry_placetype, triggering_holonym, triggering_holonym_index =
cat_data.cat_specs, cat_data.entry_placetype, cat_data.triggering_holonym, cat_data.triggering_holonym_index
if triggering_holonym then
for _, cat_spec in ipairs(cat_specs) do
local cat
if cat_spec == true then
-- ZH: "法國的城市" (location_key + 的 + zh_placetype_name); +++ replaced below
cat = "+++" .. zh_strings.de_particle .. get_zh_placetype_name(entry_placetype)
else
cat = cat_spec
end
if cat:find("%+%+%+") then
local group, key, spec, container_trail = m_placetypes.find_matching_holonym_location {
holonym_placetype = triggering_holonym.placetype,
holonym_placename = triggering_holonym.unlinked_placename,
holonym_index = triggering_holonym_index,
place_desc = place_desc,
}
if group then
cat = cat:gsub("%+%+%+", m_strutils.replacement_escape(m_placetypes.get_prefixed_key(key, spec)))
insert(all_cats, cat)
else
mw.log(("Unable to insert category for cat spec '%s' because holonym '%s/%s' did not match a " ..
"known location"):format(cat, triggering_holonym.placetype, triggering_holonym.unlinked_placename))
track("cant-match-holonym-for-category-spec")
end
else
insert(all_cats, cat)
end
end
else
for _, cat_spec in ipairs(cat_specs) do
local cat
if cat_spec == true then
-- ZH: bare placetype category (e.g. "城市")
cat = get_zh_placetype_name(entry_placetype)
else
cat = cat_spec
if cat:find("%+%+%+") then
internal_error("Category %s contains +++ but there is no holonym to substitute", cat)
end
end
insert(all_cats, cat)
end
end
return all_cats
end
-- Return the categories (without initial lang code) that should be added to the entry, given the place description
-- and a particular entry placetype.
local function get_placetype_cats(place_desc, entry_placetype, from_demonym, form_of_directive)
local cats = {}
local first_holonym_index = 1
while first_holonym_index <= #place_desc.holonyms do
local cat_data = find_placetype_cat_specs {
entry_placetype = entry_placetype,
place_desc = place_desc,
first_holonym_index = first_holonym_index,
from_demonym = from_demonym,
form_of_directive = form_of_directive,
}
if not cat_data then
break
end
local triggering_holonym = cat_data.triggering_holonym
if not triggering_holonym then
internal_error("find_placetype_cat_specs should have returned a triggering holonym: %s", cat_data)
end
extend(cats, cat_specs_to_categories(place_desc, cat_data))
first_holonym_index = cat_data.triggering_holonym_index
local equiv_triggering_placetypes = m_placetypes.get_placetype_equivs(triggering_holonym.placetype,
{no_fallback = true})
for _, equiv in ipairs(equiv_triggering_placetypes) do
local other_holonyms_of_same_type = place_desc.holonyms_by_placetype[equiv.placetype]
if other_holonyms_of_same_type then
for _, other_placename_of_same_type in ipairs(other_holonyms_of_same_type) do
if other_placename_of_same_type ~= triggering_holonym.unlinked_placename then
local overriding_holonym = {
placetype = triggering_holonym.placetype,
unlinked_placename = other_placename_of_same_type,
}
local other_cat_data = find_placetype_cat_specs {
entry_placetype = entry_placetype,
place_desc = place_desc,
overriding_holonym = overriding_holonym,
from_demonym = from_demonym,
form_of_directive = form_of_directive,
}
if other_cat_data then
extend(cats, cat_specs_to_categories(place_desc, other_cat_data))
end
end
end
end
end
first_holonym_index = first_holonym_index + 1
while first_holonym_index <= #place_desc.holonyms do
if place_desc.holonyms[first_holonym_index].continue_cat_loop then
break
end
first_holonym_index = first_holonym_index + 1
end
end
if cats[1] then
return cats
end
local entry_pt_default, equiv_entry_placetype_and_qualifier =
m_placetypes.get_equiv_placetype_prop(entry_placetype, function(pt)
return m_placetypes.placetype_data[pt] and m_placetypes.placetype_data[pt].default
end,
{form_of_directive = form_of_directive})
if entry_pt_default then
return cat_specs_to_categories(place_desc, {
cat_specs = entry_pt_default,
entry_placetype = equiv_entry_placetype_and_qualifier.placetype,
})
end
return {}
end
--[==[
Iterate through each type of place and return a list of the categories that need to be added to the entry.
See enwikt [[Module:place]] for detailed documentation.
]==]
function export.get_cats(args, overall_place_spec, from_demonym)
local cats = {}
local place_descriptions = overall_place_spec.descs
handle_category_implications(place_descriptions, m_placetypes.cat_implications)
m_placetypes.augment_holonyms_with_container(place_descriptions)
if overall_place_spec.directives then
for _, directive_terms in ipairs(overall_place_spec.directives) do
local spec_cats = directive_terms.spec.cat
if spec_cats then
if type(spec_cats) == "string" then
spec_cats = {spec_cats}
end
for _, spec_cat in ipairs(spec_cats) do
insert(cats, spec_cat)
end
end
if directive_terms.spec.type_prefix then
for _, place_desc in ipairs(place_descriptions) do
for _, placetype in ipairs(place_desc.placetypes) do
if not m_placetypes.placetype_is_ignorable(placetype) then
extend(cats, get_placetype_cats(place_desc, placetype, from_demonym,
directive_terms.spec.type_prefix))
end
end
end
end
end
end
if not from_demonym then
local bare_categories = m_placetypes.get_bare_categories(args, overall_place_spec)
extend(cats, bare_categories)
end
for _, place_desc in ipairs(place_descriptions) do
if not from_demonym then
for _, placetype in ipairs(place_desc.placetypes) do
if not m_placetypes.placetype_is_ignorable(placetype) then
extend(cats, get_placetype_cats(place_desc, placetype))
end
end
end
extend(cats, get_placetype_cats(place_desc, "*", from_demonym))
end
if args.cat then
for _, cat in ipairs(args.cat) do
local split_cats = split_on_comma(cat)
extend(cats, split_cats)
end
end
return cats
end
-- Return the category wikicode for a list of categories.
-- ZH: uses `lang:getFullName() .. " " .. cat` format for regular categories (same as cln: format in enwikt),
-- matching zhwikt's convention of "漢語 XX" category names instead of "zh:XX".
local function format_cats(lang, cats, sort_key)
local full_cats = {}
local langname = lang:getFullName()
for _, cat in ipairs(cats) do
local cln_cat = cat:match("^cln:(.*)$")
if cln_cat then
insert(full_cats, langname .. " " .. cln_cat)
else
-- ZH: use langname prefix instead of langcode:cat
insert(full_cats, langname .. " " .. cat)
end
end
return require(utilities_module).format_categories(full_cats, lang, sort_key, nil,
force_cat or m_placetypes.get_force_cat())
end
----------- Main entry point
--[==[
Implementation of {{tl|place}}. Meant to be callable from another module.
See enwikt [[Module:place]] for full documentation of the `data` argument fields.
]==]
function export.format(data)
local template_args = data.template_args
local list_param = {list = true}
local boolean_param = {type = "boolean"}
local params = {
[1] = {required = true, type = "language", default = "und"},
[2] = {required = true, list = true},
["t"] = list_param,
["tid"] = {list = true, allow_holes = true},
["cat"] = list_param,
["nocat"] = boolean_param,
["nocap"] = boolean_param,
["sort"] = true,
["pagename"] = true, -- for testing or documentation purposes
["a"] = true,
["addl"] = true,
["def"] = true,
-- params that are only used when transcluding using {{tcl}}/{{transclude}}, to transmit information to {{tcl}}.
["tcl"] = true,
["tcl_t"] = list_param,
["tcl_tid"] = list_param,
["tcl_nolb"] = true,
["tcl_nolc"] = boolean_param,
["tcl_noextratext"] = boolean_param,
}
-- add "extra info" parameters
for _, extra_arg_spec in ipairs(export.extra_info_args) do
params[extra_arg_spec.arg] = list_param
end
if template_args.def == "" then
error("Cannot currently pass def= as an empty parameter; use def=- if you want to suppress the definition display")
end
local args = require("Module:parameters").process(template_args, params)
if args.a then
track("a")
end
data.args = args
local overall_place_spec = parse_overall_place_spec(data)
data.overall_place_spec = overall_place_spec
return get_def(data) .. (
args.nocat and "" or format_cats(args[1], export.get_cats(args, overall_place_spec), args.sort))
end
--[==[
Actual entry point of {{tl|place}}.
]==]
function export.show(frame)
return export.format {
template_args = frame:getParent().args,
}
end
return export
6pqal4y5b33sjpu1zfyubdq3vaaew7n
Module:Place/data/sandbox
828
3034684
9758121
9153012
2026-05-12T22:01:56Z
TongcyDai
53191
9758121
Scribunto
text/plain
local export = {}
--[==[
Chinese localization data for [[Module:place]].
Fields per placetype entry:
zh_name -- Chinese display name in definition sentences (string or {string,...})
zh_suffix -- Chinese suffix for :pref/:suf holonym modifiers; if nil, falls back to zh_name
zh_name_by_holonym_type
-- context-sensitive Chinese name keyed by the first holonym's placetype;
-- used when the correct term depends on what the place is capital/seat of
zh_preposition -- "in" (→ 位於…的) or "of" (→ …的); nil means inherit from enwikt `preposition` field
-- Only needed when the Chinese preposition differs from the English one.
Multiple-regional-variant names are stored as arrays {"primary", "alt1", "alt2",...}.
- The first element is the canonical/primary form used in categories.
- All elements are displayed, joined with "/" in holonym context.
For zh_suffix with regional variants, use the same array convention.
]==]
-- ---------------------------------------------------------------------------
-- Placetype qualifier translations
-- ---------------------------------------------------------------------------
-- Maps English qualifier words (as canonicalized in placetype_qualifiers) to
-- their Chinese equivalents. Used when displaying qualified placetypes such as
-- "前城市"、"古代王國" etc.
export.zh_qualifiers = {
-- Historicity
["former"] = "前",
["ancient"] = "古代",
["medieval"] = "中世紀",
["historical"] = "歷史上的",
["extinct"] = "已消亡的",
["abandoned"] = "廢棄的",
["deserted"] = "廢棄的",
["ruined"] = "廢墟",
-- Hypothetical
["fictional"] = "虛構的",
["mythological"]= "神話中的",
-- Size
["small"] = "小",
["large"] = "大",
["major"] = "主要的",
["minor"] = "次要的",
["tiny"] = "微小的",
["huge"] = "龐大的",
-- Coastal/water
["coastal"] = "沿海",
["inland"] = "內陸",
["maritime"] = "濱海",
["riverine"] = "沿河",
-- Direction (adjectival use before holonym)
["northern"] = "北部",
["southern"] = "南部",
["eastern"] = "東部",
["western"] = "西部",
["central"] = "中部",
["northeastern"]= "東北部",
["northwestern"]= "西北部",
["southeastern"]= "東南部",
["southwestern"]= "西南部",
-- Status
["autonomous"] = "自治",
["independent"] = "獨立的",
["unincorporated"] = "非建制",
["incorporated"] = "建制",
["rural"] = "農村",
["urban"] = "城市",
["suburban"] = "郊區",
["industrial"] = "工業",
-- Terrain
["mountainous"] = "山地",
["volcanic"] = "火山",
}
-- ---------------------------------------------------------------------------
-- Extra-info label translations
-- ---------------------------------------------------------------------------
-- Maps the enwikt extra-info parameter names to Chinese display labels.
-- Used when appending "首都:X"、"最大城市:X" etc. to definitions.
export.zh_extra_info_labels = {
["capital"] = "首都", -- overridden for non-country holonyms; see zh_capital_label_by_holonym
["largest city"] = "最大城市",
["capital and largest city"] = "首都和最大城市",
["official"] = "官方名稱",
["modern"] = "現代名稱",
["full"] = "全稱",
["seat"] = "治所",
["county seat"] = "縣治",
["borough seat"] = "區治",
["parish seat"] = "教區治所",
["shire town"] = "郡鎮",
}
-- Context-sensitive label for `capital=` parameter, keyed by entry placetype.
-- When a capital-bearing placetype is identified, we look up the holonym type
-- to determine the correct Chinese term for the capital. Falls back to "首都".
export.zh_capital_label_by_holonym_type = {
["country"] = "首都",
["constituent country"]= "首都",
["state"] = "首府",
["province"] = "省會",
["territory"] = "首府",
["region"] = "首府",
["administrative region"] = "首府",
["autonomous region"] = "首府",
["county"] = "縣治",
["district"] = "區治",
["department"] = "省治",
["prefecture"] = "縣治",
}
-- ---------------------------------------------------------------------------
-- Special-syntax string translations
-- ---------------------------------------------------------------------------
-- Miscellaneous fixed strings used in building definition sentences.
export.zh_strings = {
in_preposition = "位於", -- prepended for "in" placetypes
-- "of" placetypes use no prepositional prefix; holonym directly precedes 的
de_particle = "的", -- possessive/locative particle
and_conj = "和", -- final conjunction in enumerations
enum_sep = "、", -- enumeration separator (replaces serial comma)
multi_name_sep = "/", -- separator for regional name variants (e.g. 格魯吉亞/喬治亞)
trans_sep = ",", -- separator for multiple t1/t2 translations
paren_open = "(",
paren_close = ")",
semicolon = ";", -- multiple-description join (replaces "; ")
former_name_of = "的舊稱", -- @former name of:X → "X的舊稱"
}
-- ---------------------------------------------------------------------------
-- Placetype data (zh_ fields)
-- ---------------------------------------------------------------------------
-- Keys match the canonical English placetype keys in enwikt's placetype_data.
-- Entries without zh_name will be looked up recursively through enwikt's
-- `fallback` chain until a zh_name is found; if none found, the English name
-- is displayed and a tracking category is added.
export.zh_placetype_data = {
-- -----------------------------------------------------------------------
-- Top-level polities
-- -----------------------------------------------------------------------
["country"] = {
zh_name = "國家",
zh_suffix = "國",
},
["city-state"] = {
zh_name = "城邦",
},
["polity"] = {
zh_name = "政體",
},
["empire"] = {
zh_name = "帝國",
zh_suffix = "帝國",
},
["kingdom"] = {
zh_name = "王國",
zh_suffix = "王國",
},
["republic"] = {
zh_name = "共和國",
zh_suffix = "共和國",
},
["federation"] = {
zh_name = "聯邦",
zh_suffix = "聯邦",
},
["confederation"] = {
zh_name = "邦聯",
zh_suffix = "邦聯",
},
["monarchy"] = {
zh_name = "君主國",
},
["principality"] = {
zh_name = "公國",
zh_suffix = "公國",
},
["duchy"] = {
zh_name = "公國",
zh_suffix = "公國",
},
["caliphate"] = {
zh_name = "哈里發國",
},
["khanate"] = {
zh_name = "汗國",
zh_suffix = "汗國",
},
["emirate"] = {
zh_name = "酋長國",
zh_suffix = "酋長國",
},
["bailiwick"] = {
zh_name = "行政管轄區",
},
["captaincy"] = {
zh_name = "都督區",
},
["microstate"] = {
zh_name = "微型國家",
},
["unrecognized country"] = {
zh_name = "未獲承認的國家",
},
-- -----------------------------------------------------------------------
-- Constituent / pseudo-countries
-- -----------------------------------------------------------------------
["constituent country"] = {
-- England, Scotland, Wales, Northern Ireland within the UK
zh_name = "構成國",
zh_suffix = "構成國",
},
["autonomous community"] = {
-- Spain
zh_name = "自治區",
zh_suffix = "自治區",
},
["autonomous republic"] = {
zh_name = "自治共和國",
zh_suffix = "自治共和國",
},
["special administrative region"] = {
-- China: Hong Kong, Macau
zh_name = "特別行政區",
zh_suffix = "特別行政區",
},
["dependent territory"] = {
zh_name = "屬地",
},
["overseas territory"] = {
zh_name = "海外屬地",
},
["Crown dependency"] = {
zh_name = "王室屬地",
},
["crown dependency"] = {
zh_name = "王室屬地",
},
-- -----------------------------------------------------------------------
-- First-level administrative divisions
-- -----------------------------------------------------------------------
["state"] = {
zh_name = "州",
zh_suffix = "州",
},
["province"] = {
zh_name = "省",
zh_suffix = "省",
},
["territory"] = {
zh_name = "地區",
zh_suffix = "地區",
},
["region"] = {
zh_name = "地區", -- fallback; specific regions use location data (e.g. 法國大區)
zh_suffix = "地區",
},
["administrative region"] = {
zh_name = "行政區",
zh_suffix = "行政區",
},
["autonomous region"] = {
zh_name = "自治區",
zh_suffix = "自治區",
},
["autonomous oblast"] = {
zh_name = "自治州",
zh_suffix = "自治州",
},
["autonomous okrug"] = {
zh_name = "自治區",
zh_suffix = "自治區",
},
["autonomous province"] = {
zh_name = "自治省",
zh_suffix = "自治省",
},
["autonomous prefecture"] = {
zh_name = "自治州",
zh_suffix = "自治州",
},
["autonomous territory"] = {
zh_name = "自治領地",
},
["autonomous territorial unit"] = {
-- Moldova (Gagauzia, Transnistria)
zh_name = "自治地域單位",
},
["federal subject"] = {
-- Russia
zh_name = "聯邦主體",
},
["voivodeship"] = {
-- Poland
zh_name = "省",
zh_suffix = "省",
},
["oblast"] = {
-- Russia/Ukraine
zh_name = "州",
zh_suffix = "州",
},
["okrug"] = {
zh_name = "區",
zh_suffix = "區",
},
["krai"] = {
-- Russia
zh_name = "邊疆區",
zh_suffix = "邊疆區",
},
["raion"] = {
-- Ukraine/Russia
zh_name = "區",
zh_suffix = "區",
},
["department"] = {
-- France and other countries
zh_name = "省",
zh_suffix = "省",
},
["governorate"] = {
zh_name = "省",
zh_suffix = "省",
},
["canton"] = {
-- Switzerland, Luxembourg etc.
zh_name = "州",
zh_suffix = "州",
},
["division"] = {
zh_name = "省",
zh_suffix = "省",
},
["periphery"] = {
-- Greece
zh_name = "大區",
zh_suffix = "大區",
},
["collectivity"] = {
-- France overseas
zh_name = "集體",
},
["commonwealth"] = {
-- Puerto Rico
zh_name = "自由邦",
},
["constituent republic"] = {
-- Yugoslavia/Russia
zh_name = "加盟共和國",
zh_suffix = "共和國",
},
["colony"] = {
zh_name = "殖民地",
},
["viceroyalty"] = {
zh_name = "副王轄地",
},
["regency"] = {
zh_name = "縣",
zh_suffix = "縣",
},
-- -----------------------------------------------------------------------
-- Second-level and lower administrative divisions
-- -----------------------------------------------------------------------
["county"] = {
-- zh_name stored as array for regional variant (Taiwan: 郡; mainland: 縣; general: 縣)
-- For Chinese/Taiwan admin contexts, location data will override to "縣" directly.
zh_name = {"縣", "郡"},
zh_suffix = {"縣", "郡"},
},
["district"] = {
zh_name = "區",
zh_suffix = "區",
},
["municipality"] = {
zh_name = "市鎮",
zh_suffix = "市鎮",
},
["commune"] = {
zh_name = "市鎮",
},
["comune"] = {
-- Italy/Switzerland
zh_name = "市鎮",
},
["borough"] = {
zh_name = "區",
zh_suffix = "區",
},
["metropolitan borough"] = {
zh_name = "都會區",
zh_suffix = "都會區",
},
["London borough"] = {
zh_name = "倫敦區",
zh_suffix = "區",
},
["royal borough"] = {
zh_name = "皇家自治市",
},
["county borough"] = {
zh_name = "郡市",
zh_suffix = "郡市",
},
["parish"] = {
zh_name = "教區",
zh_suffix = "教區",
},
["civil parish"] = {
zh_name = "教區",
zh_suffix = "教區",
},
["council area"] = {
-- Scotland
zh_name = "議會地區",
zh_suffix = "議會地區",
},
["prefecture"] = {
-- Japan: 縣(ken); France: 省治城市(handled by capital city logic)
zh_name = "縣",
zh_suffix = "縣",
},
["prefecture-level city"] = {
-- China
zh_name = "地級市",
zh_suffix = "市",
},
["county-level city"] = {
-- China
zh_name = "縣級市",
zh_suffix = "市",
},
["subprovincial city"] = {
-- China
zh_name = "副省級市",
zh_suffix = "市",
},
["direct-administered municipality"] = {
-- China (Beijing, Shanghai, etc.)
zh_name = "直轄市",
zh_suffix = "市",
},
["special municipality"] = {
-- Taiwan (Taipei, New Taipei etc.)
zh_name = "直轄市",
zh_suffix = "市",
},
["county-administered city"] = {
-- Taiwan
zh_name = "縣轄市",
zh_suffix = "市",
},
["special ward"] = {
-- Tokyo
zh_name = "特別區",
zh_suffix = "區",
},
["municipal district"] = {
zh_name = "市轄區",
zh_suffix = "區",
},
["subdistrict"] = {
zh_name = "街道",
zh_suffix = "街道",
},
["township"] = {
zh_name = "鄉鎮",
zh_suffix = "鄉鎮",
},
["rural township"] = {
-- Taiwan
zh_name = "鄉",
zh_suffix = "鄉",
},
["urban township"] = {
zh_name = "鎮",
zh_suffix = "鎮",
},
["mountain indigenous township"] = {
-- Taiwan
zh_name = "山地原住民區",
zh_suffix = "區",
},
["mountain indigenous district"] = {
-- Taiwan
zh_name = "山地原住民區",
zh_suffix = "區",
},
["community development block"] = {
-- India
zh_name = "社區發展區",
},
["union territory"] = {
-- India
zh_name = "聯合地區",
},
["hromada"] = {
-- Ukraine
zh_name = "社區",
zh_suffix = "社區",
},
["urban hromada"] = {
zh_name = "城市社區",
zh_suffix = "社區",
},
["rural hromada"] = {
zh_name = "農村社區",
zh_suffix = "社區",
},
["settlement hromada"] = {
zh_name = "聚落社區",
zh_suffix = "社區",
},
["regional unit"] = {
-- Greece
zh_name = "地區單位",
zh_suffix = "地區",
},
["regional county municipality"] = {
-- Quebec
zh_name = "地區縣市",
},
["regional district"] = {
-- Canada
zh_name = "地區區",
},
["regional municipality"] = {
zh_name = "地區市",
},
["local government area"] = {
-- Australia
zh_name = "地方政府區",
},
["local government district"] = {
zh_name = "地方政府區",
},
["arrondissement"] = {
zh_name = "區",
zh_suffix = "區",
},
["cercle"] = {
-- Mali
zh_name = "縣",
},
["geopolitical zone"] = {
-- Nigeria
zh_name = "地緣政治區",
},
["enclave"] = {
zh_name = "飛地",
},
["exclave"] = {
zh_name = "外飛地",
},
-- -----------------------------------------------------------------------
-- Capitals and seats
-- -----------------------------------------------------------------------
["capital city"] = {
-- Default for most contexts; see zh_name_by_holonym_type for overrides
zh_name = "首府",
zh_name_by_holonym_type = {
["country"] = "首都",
["constituent country"] = "首都",
["microstate"] = "首都",
["city-state"] = "首都",
["state"] = "首府",
["territory"] = "首府",
["region"] = "首府",
["administrative region"] = "首府",
["autonomous region"] = "首府",
["province"] = "省會",
["autonomous province"] = "省會",
["county"] = "縣治",
["district"] = "區治",
["department"] = "省治",
["prefecture"] = "縣治",
["municipality"] = "市治",
},
},
["capital"] = {
-- Alias for capital city; same logic
zh_name = "首府",
zh_name_by_holonym_type = {
["country"] = "首都",
["constituent country"] = "首都",
["state"] = "首府",
["territory"] = "首府",
["region"] = "首府",
["province"] = "省會",
["county"] = "縣治",
["district"] = "區治",
["department"] = "省治",
},
},
["state capital"] = {
zh_name = "首府",
},
["provincial capital"] = {
zh_name = "省會",
},
["regional capital"] = {
zh_name = "首府",
},
["district capital"] = {
zh_name = "區治",
},
["departmental capital"] = {
zh_name = "省治",
},
["national capital"] = {
zh_name = "首都",
},
["administrative capital"] = {
zh_name = "行政首都",
},
["legislative capital"] = {
zh_name = "立法首都",
},
["judicial capital"] = {
zh_name = "司法首都",
},
["royal capital"] = {
zh_name = "王都",
},
["co-capital"] = {
zh_name = "共同首都",
},
["largest city"] = {
zh_name = "最大城市",
},
["caplc"] = {
zh_name = "首都和最大城市",
},
["non-city capital"] = {
zh_name = "首府",
},
["county seat"] = {
zh_name = "縣治",
},
["county town"] = {
zh_name = "縣城",
},
["borough seat"] = {
zh_name = "區治",
},
["parish seat"] = {
zh_name = "教區治所",
},
["shire town"] = {
zh_name = "郡鎮",
},
["administrative center"] = {
zh_name = "行政中心",
},
["administrative centre"] = {
zh_name = "行政中心",
},
["administrative headquarters"] = {
zh_name = "行政總部",
},
["French prefecture"] = {
-- A city that is the administrative capital of a French department
zh_name = "省府",
zh_name_by_holonym_type = {
["department"] = "省府",
},
},
-- -----------------------------------------------------------------------
-- Cities and urban settlements
-- -----------------------------------------------------------------------
["city"] = {
zh_name = "市",
zh_suffix = "市",
},
["town"] = {
zh_name = "鎮",
zh_suffix = "鎮",
},
["village"] = {
zh_name = "村",
zh_suffix = "村",
},
["hamlet"] = {
zh_name = "小村",
},
["locality"] = {
zh_name = "村落",
},
["settlement"] = {
zh_name = "聚落",
},
["populated place"] = {
zh_name = "居民點",
},
["neighborhood"] = {
zh_name = "街區",
},
["neighbourhood"] = {
zh_name = "街區",
},
["suburb"] = {
zh_name = "郊區",
},
["community"] = {
zh_name = "社區",
},
["urban area"] = {
zh_name = "城市地區",
},
["residential area"] = {
zh_name = "住宅區",
},
["housing estate"] = {
zh_name = "住宅區",
},
["planned community"] = {
zh_name = "計劃社區",
},
["administrative village"] = {
zh_name = "行政村",
zh_suffix = "村",
},
["barangay"] = {
-- Philippines
zh_name = "里",
},
["barrio"] = {
zh_name = "里",
},
["kibbutz"] = {
zh_name = "集體農場",
},
["ghost town"] = {
zh_name = "鬼城",
},
["unincorporated community"] = {
zh_name = "非建制社區",
},
["census-designated place"] = {
zh_name = "人口普查指定地區",
},
["military base"] = {
zh_name = "軍事基地",
},
["research station"] = {
zh_name = "研究站",
},
["home rule city"] = {
zh_name = "自治市",
},
["federal district"] = {
zh_name = "聯邦特區",
zh_suffix = "特區",
},
["independent city"] = {
zh_name = "獨立市",
},
["autonomous city"] = {
zh_name = "自治市",
},
["port city"] = {
zh_name = "港市",
},
["port town"] = {
zh_name = "港鎮",
},
["market town"] = {
zh_name = "市集鎮",
},
["resort town"] = {
zh_name = "度假鎮",
},
["new town"] = {
zh_name = "新市鎮",
},
-- -----------------------------------------------------------------------
-- Geographic / natural features
-- -----------------------------------------------------------------------
["continent"] = {
zh_name = "洲",
zh_suffix = "洲",
},
["continental region"] = {
zh_name = "大陸地區",
},
["ocean"] = {
zh_name = "洋",
zh_suffix = "洋",
},
["sea"] = {
zh_name = "海",
zh_suffix = "海",
},
["inland sea"] = {
zh_name = "內陸海",
},
["marginal sea"] = {
zh_name = "邊緣海",
},
["river"] = {
zh_name = "河",
zh_suffix = "河",
},
["lake"] = {
zh_name = "湖",
zh_suffix = "湖",
},
["reservoir"] = {
zh_name = "水庫",
zh_suffix = "水庫",
},
["stream"] = {
zh_name = "溪",
zh_suffix = "溪",
},
["creek"] = {
zh_name = "溪",
zh_suffix = "溪",
},
["bay"] = {
zh_name = "灣",
zh_suffix = "灣",
},
["gulf"] = {
zh_name = "海灣",
zh_suffix = "海灣",
},
["fjord"] = {
zh_name = "峽灣",
},
["strait"] = {
zh_name = "海峽",
zh_suffix = "海峽",
},
["channel"] = {
zh_name = "水道",
zh_suffix = "水道",
},
["inlet"] = {
zh_name = "海灣",
zh_suffix = "灣",
},
["arm"] = {
zh_name = "海灣",
},
["island"] = {
zh_name = "島",
zh_suffix = "島",
},
["islet"] = {
zh_name = "小島",
zh_suffix = "島",
},
["island group"] = {
zh_name = "群島",
},
["archipelago"] = {
zh_name = "群島",
zh_suffix = "群島",
},
["atoll"] = {
zh_name = "環礁",
zh_suffix = "環礁",
},
["peninsula"] = {
zh_name = "半島",
zh_suffix = "半島",
},
["spit"] = {
zh_name = "沙嘴",
},
["cape"] = {
zh_name = "角",
zh_suffix = "角",
},
["headland"] = {
zh_name = "岬角",
},
["mountain"] = {
zh_name = "山",
zh_suffix = "山",
},
["hill"] = {
zh_name = "丘",
zh_suffix = "丘",
},
["mountain range"] = {
zh_name = "山脈",
zh_suffix = "山脈",
},
["mountain pass"] = {
zh_name = "山口",
},
["plateau"] = {
zh_name = "高原",
zh_suffix = "高原",
},
["valley"] = {
zh_name = "谷",
zh_suffix = "谷",
},
["glen"] = {
zh_name = "峽谷",
},
["volcano"] = {
zh_name = "火山",
zh_suffix = "火山",
},
["forest"] = {
zh_name = "林地",
zh_suffix = "林",
},
["moor"] = {
zh_name = "荒原",
},
["desert"] = {
zh_name = "沙漠",
zh_suffix = "沙漠",
},
["beach"] = {
zh_name = "海灘",
zh_suffix = "海灘",
},
["spring"] = {
zh_name = "泉",
zh_suffix = "泉",
},
["hot spring"] = {
zh_name = "溫泉",
zh_suffix = "溫泉",
},
["tributary"] = {
zh_name = "支流",
},
["distributary"] = {
zh_name = "分流",
},
-- -----------------------------------------------------------------------
-- Geographic / cultural regions (non-admin)
-- -----------------------------------------------------------------------
["geographic and cultural area"] = {
zh_name = "地區",
},
["geographic region"] = {
zh_name = "地理區域",
},
["historical region"] = {
zh_name = "歷史地區",
},
["historic region"] = {
zh_name = "歷史地區",
},
["cultural region"] = {
zh_name = "文化地區",
},
["subregion"] = {
zh_name = "次地區",
},
["macroregion"] = {
zh_name = "大區域",
},
-- -----------------------------------------------------------------------
-- Man-made structures
-- -----------------------------------------------------------------------
["airport"] = {
zh_name = "機場",
},
["port"] = {
zh_name = "港口",
},
["bridge"] = {
zh_name = "橋",
},
["road"] = {
zh_name = "道路",
},
["highway"] = {
zh_name = "公路",
},
["motorway"] = {
zh_name = "高速公路",
},
["street"] = {
zh_name = "街道",
},
["building"] = {
zh_name = "建築物",
},
["university"] = {
zh_name = "大學",
},
["park"] = {
zh_name = "公園",
},
["national park"] = {
zh_name = "國家公園",
},
["metro station"] = {
zh_name = "地鐵站",
},
["temple"] = {
zh_name = "廟宇",
},
["castle"] = {
zh_name = "城堡",
},
-- -----------------------------------------------------------------------
-- Misc / hypothetical
-- -----------------------------------------------------------------------
["fictional location"] = {
zh_name = "虛構地點",
},
["mythological location"] = {
zh_name = "神話地點",
},
["star"] = {
zh_name = "恆星",
},
["space station"] = {
zh_name = "太空站",
},
}
-- ---------------------------------------------------------------------------
-- Helper: look up zh_name for a placetype via fallback chain
-- ---------------------------------------------------------------------------
-- Looks up zh_name (and optionally zh_name_by_holonym_type) for a given
-- placetype, recursively following the enwikt fallback chain if needed.
-- Returns zh_name (string or table), zh_suffix (string or table or nil),
-- zh_name_by_holonym_type (table or nil).
-- `m_pt` should be the enwikt place-placetypes module (for fallback data).
function export.get_zh_placetype_props(placetype, m_pt)
local visited = {}
local current = placetype
while current and not visited[current] do
visited[current] = true
local zh = export.zh_placetype_data[current]
if zh and zh.zh_name then
return zh.zh_name, zh.zh_suffix, zh.zh_name_by_holonym_type
end
-- Follow enwikt fallback
if m_pt then
local ptdata = m_pt.placetype_data[current]
if ptdata and ptdata.fallback then
current = ptdata.fallback
-- Strip FORMER/ANCIENT prefixes from synthetic fallbacks like "FORMER settlement"
current = current:match("^FORMER (.+)$") or current:match("^ANCIENT (.+)$") or current
else
break
end
else
break
end
end
return nil, nil, nil
end
-- ---------------------------------------------------------------------------
-- Helper: resolve zh_name given holonym context
-- ---------------------------------------------------------------------------
-- Given the zh_name (possibly a table of variants) and zh_name_by_holonym_type,
-- and the holonym's placetype, return the appropriate Chinese name string.
-- If multiple variants, returns the array (caller joins with zh_strings.multi_name_sep).
function export.resolve_zh_name(zh_name, zh_name_by_holonym_type, holonym_placetype)
if zh_name_by_holonym_type and holonym_placetype then
local override = zh_name_by_holonym_type[holonym_placetype]
if override then
return override
end
end
return zh_name
end
-- ---------------------------------------------------------------------------
-- Helper: format zh_name for display (join variants with "/")
-- ---------------------------------------------------------------------------
function export.format_zh_name(zh_name_or_array)
if type(zh_name_or_array) == "table" then
return table.concat(zh_name_or_array, export.zh_strings.multi_name_sep)
end
return zh_name_or_array or ""
end
return export
jyq5wi9y0w8rp08ihy3ifp0j6mpiozc
User:TongcyDai/沙盒/14
2
3034686
9758133
9160358
2026-05-13T00:00:39Z
TongcyDai
53191
9758133
wikitext
text/x-wiki
# {{place/sandbox|zh|市|s/中央邦|c/印度}}
# {{place/sandbox|ko|市|s:suf/紐約|c/美國|t1=紐約}}
# {{place/sandbox|en|國家|cont/歐洲}}
# {{place/sandbox|en|市|p/安大略|c/加拿大|t=多倫多}}
# {{place/sandbox|en|市|c/荷蘭|t=阿姆斯特丹}}
# {{place/sandbox|en|市|s/賓夕法尼亞|c/美國|t=匹茲堡}}
# {{place/sandbox|fr|國家|cont/歐洲|t1=德國}}
# {{place/sandbox|en|縣|s/弗吉尼亞州|c/美國|t=費爾法克斯}}
# {{place/sandbox|en|國家|中部|cont/歐洲}}
# {{place/sandbox|en|<<c/土耳其>><<city/伊斯坦布爾>><<dist/法提赫>><<inlet/金角灣>>中部的一個<<街區>>。}}
# {{lb|en|now|historical}} {{place/sandbox|en|1659年至1809年間位於<<isl:suf/伊斯帕尼奧拉>>的<<前>><<殖民地>>,大致相當於現在的<<c/海地>>}}
# {{place/sandbox|en|兩個位於<<c/美國>><<s/伊利諾伊>><<co/威廉森縣>>的<<前非建制地區>>}}
# {{place/sandbox|en|河|c/烏克蘭,白俄羅斯,波蘭}}
# {{place/sandbox|en|<<c/阿根廷,智利,菲律賓,西班牙,美國>>的數個<<城市>>}}
# {{place/sandbox|en|市|南部|c/美國}}
# {{place/sandbox|en|市|s/佐治亞|c/美國}}
# {{place/sandbox|en|市|carea/Highland|cc/蘇格蘭}}
# {{place/sandbox|en|首都|c:pref/格魯吉亞}}
# {{place/sandbox|pt|市/州府|s/里約熱內盧|c/巴西|;|前首都|的|c/巴西}}
# {{place/sandbox|en|邦|r/南歐|;,|<<c/意大利>><<city/羅馬>>城內的一塊<<飛地>>}}
# {{place/sandbox|en|市|東北部|s:suf/賓夕法尼亞|c/美國|t=斯克蘭頓}}
# {{place/sandbox|zh|國家|南部|cont/歐洲|caplc=zh:羅馬}}
# {{place/sandbox|it|首都|c/意大利|t1=羅馬}},一般「AA的首都」就可以,「位於」有些累贅,通常首都是唯一的,類似英語中首都的冠詞一般用the,普通城市用a/an,好像英維版本區分了of和in,即of對應中文「AA的」,in對應「位於AA」
# {{place/sandbox|fr|村莊/and/市鎮|dept/北部|r/fr:[[加來海峽]]大區|c/法國}}
# {{place/sandbox|en|a=盎格魯撒克遜|王國|東北部|cc/英格蘭|和|東南部|cc/蘇格蘭}}
# {{place/sandbox|en|位於<<cc/英格蘭>>東北部和<<cc/蘇格蘭>>東南部的盎格魯撒克遜<<王國>>。}}
d29qmrlx3w4xdn3x6i30ddrcz0tz5p4
Template:List:oceans/lt
10
3319742
9758130
9530873
2026-05-12T23:56:10Z
TongcyDai
53191
9758130
wikitext
text/x-wiki
{{#invoke:topic list|show
|hypernym=[[vandenynas|vandenýnai]]
|Árkties vandenýnas
|Atlánto vandenýnas
|Ìndijos vandenýnas
|Pietų̃ vandenýnas
|Ramùsis vandenýnas
}}<noinclude>{{list doc}}</noinclude>
aa4ih7d3a2fdlo2cps29op1lip3uvml
quémander
0
3437593
9758035
9757906
2026-05-12T12:16:04Z
TongcyDai
53191
9758035
wikitext
text/x-wiki
==法语==
===发音===
* {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-Arthur Crbz-quémander.wav}}
* {{audio|fr|LL-Q150 (fra)-DenisdeShawi-quémander.wav|a=沙威尼根}}
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-quémander.wav|a=里昂}}
* {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-quémander.wav|a=索曼}}
===动词===
{{fr-verb}}
# [[乞求]],[[死皮赖脸]]地要
====变位====
{{fr-conj-auto}}
===延伸阅读===
* {{R:fr:TLFi}}
e45ks5u3mxli3gmvmtbvxc1ah1uxm86
gagé
0
3437595
9758058
9757912
2026-05-12T12:17:54Z
Sayonzei
40728
/* 奧星語 */
9758058
wikitext
text/x-wiki
{{also|gage|Gage}}
==法語==
===分詞===
{{fr-past participle}}
# {{past participle of|fr|gager}}
==奧星語==
===發音===
* {{IPA|osi|/ɡʲa.ɡe/}}
* {{audio|bew|LL-Q2701322 (osi)-Nurholipah (Dinda Anggun)-gagé.wav}}
* {{hyphenation|osi|ga|gé}}
* {{rhymes|osi|e}}
===形容詞===
{{head|osi|adj}}
# [[快速]]的;[[快捷]]的
===延伸閱讀===
* {{R:osi:Ali:2002|entry=gagé|page=111}}
nph1qlv9442ls5j9l4m24tuma1itj79
Category:Rhymes:斯洛伐克語/ɔʃla
14
3437603
9757925
2026-05-12T11:59:02Z
TongcyBot
83009
養貓
9757925
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:加里里語
14
3437604
9757926
2026-05-12T11:59:05Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「{{auto cat}}」的新頁面
9757926
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:斯洛伐克語/ɔʃla/2音節
14
3437605
9757927
2026-05-12T11:59:09Z
TongcyBot
83009
養貓
9757927
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/antɘ/2音節
14
3437606
9757928
2026-05-12T11:59:15Z
TongcyBot
83009
養貓
9757928
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɔwɡɔw̃
14
3437607
9757929
2026-05-12T11:59:23Z
TongcyBot
83009
養貓
9757929
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɔwɡɔw̃/2音節
14
3437608
9757930
2026-05-12T11:59:31Z
TongcyBot
83009
養貓
9757930
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:立陶宛語/eː
14
3437609
9757931
2026-05-12T11:59:37Z
TongcyBot
83009
養貓
9757931
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:立陶宛語/eː/3音節
14
3437610
9757932
2026-05-12T11:59:44Z
TongcyBot
83009
養貓
9757932
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:立陶宛語/ɐrʲˑlʲeː
14
3437611
9757933
2026-05-12T11:59:51Z
TongcyBot
83009
養貓
9757933
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:立陶宛語/ɐrʲˑlʲeː/3音節
14
3437612
9757934
2026-05-12T11:59:57Z
TongcyBot
83009
養貓
9757934
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英格里亞語/eʋɑ/4音節
14
3437613
9757935
2026-05-12T12:00:03Z
TongcyBot
83009
養貓
9757935
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英格里亞語/eʋɑ/5音節
14
3437614
9757936
2026-05-12T12:00:10Z
TongcyBot
83009
養貓
9757936
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ketçã
0
3437615
9757937
2026-05-12T12:00:14Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==加里里語== ===發音=== * {{IPA|kzw|/ket͡sã/}} * {{rhyme|kzw|ã|s=2}} ===代詞=== {{head|kzw|代詞}} {{tlb|kzw|Kipeá}} # {{lb|kzw|hapax}} {{alt of|kzw|ketçãá}} {{cln|kzw|人稱代詞}}」的新頁面
9757937
wikitext
text/x-wiki
==加里里語==
===發音===
* {{IPA|kzw|/ket͡sã/}}
* {{rhyme|kzw|ã|s=2}}
===代詞===
{{head|kzw|代詞}} {{tlb|kzw|Kipeá}}
# {{lb|kzw|hapax}} {{alt of|kzw|ketçãá}}
{{cln|kzw|人稱代詞}}
kt96n9rr3i6aj2u3a3nud7agp54guzk
Category:Rhymes:英語/aɪləs/2音節
14
3437616
9757938
2026-05-12T12:00:17Z
TongcyBot
83009
養貓
9757938
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英語/ɔː(ɹ)mɪŋ/2音節
14
3437617
9757939
2026-05-12T12:00:24Z
TongcyBot
83009
養貓
9757939
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:葡萄牙語/altu
14
3437618
9757940
2026-05-12T12:00:31Z
TongcyBot
83009
養貓
9757940
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:葡萄牙語/altu/3音節
14
3437619
9757941
2026-05-12T12:00:38Z
TongcyBot
83009
養貓
9757941
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𪒸」的漢語詞
14
3437620
9757942
2026-05-12T12:00:46Z
TongcyBot
83009
養貓
9757942
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𪒸」的詞
14
3437621
9757943
2026-05-12T12:00:52Z
TongcyBot
83009
養貓
9757943
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:加里里語/ã
14
3437622
9757944
2026-05-12T12:01:03Z
TongcyBot
83009
養貓
9757944
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:加里里語/ã/2音節
14
3437623
9757945
2026-05-12T12:01:09Z
TongcyBot
83009
養貓
9757945
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:加里里語人稱代詞
14
3437624
9757946
2026-05-12T12:01:17Z
TongcyBot
83009
養貓
9757946
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:加里里語代詞
14
3437625
9757947
2026-05-12T12:01:24Z
TongcyBot
83009
養貓
9757947
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:加里里語孤語
14
3437626
9757948
2026-05-12T12:01:31Z
TongcyBot
83009
養貓
9757948
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:依應用分類的加里里語詞
14
3437627
9757949
2026-05-12T12:01:39Z
TongcyBot
83009
養貓
9757949
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:以非標準文字書寫的克蔑語詞
14
3437628
9757950
2026-05-12T12:01:49Z
TongcyBot
83009
養貓
9757950
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語詞條維護
14
3437629
9757951
2026-05-12T12:01:55Z
TongcyBot
83009
養貓
9757951
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語
14
3437630
9757952
2026-05-12T12:02:04Z
TongcyBot
83009
養貓
9757952
wikitext
text/x-wiki
{{auto cat|中國}}
hzrtnbfn0n89q06uxv5pafyjiqn7evt
Category:克蔑語 水
14
3437631
9757953
2026-05-12T12:02:12Z
TongcyBot
83009
養貓
9757953
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語 液體
14
3437632
9757954
2026-05-12T12:02:19Z
TongcyBot
83009
養貓
9757954
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語 物質
14
3437633
9757955
2026-05-12T12:02:26Z
TongcyBot
83009
養貓
9757955
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語 化學
14
3437634
9757956
2026-05-12T12:02:32Z
TongcyBot
83009
養貓
9757956
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語 相關分類列表
14
3437635
9757957
2026-05-12T12:02:38Z
TongcyBot
83009
養貓
9757957
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語 主題
14
3437636
9757958
2026-05-12T12:02:45Z
TongcyBot
83009
養貓
9757958
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語 科學
14
3437637
9757959
2026-05-12T12:02:54Z
TongcyBot
83009
養貓
9757959
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語 自然
14
3437638
9757960
2026-05-12T12:03:02Z
TongcyBot
83009
養貓
9757960
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語 集合分類列表
14
3437639
9757961
2026-05-12T12:03:10Z
TongcyBot
83009
養貓
9757961
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語名詞
14
3437640
9757962
2026-05-12T12:03:20Z
TongcyBot
83009
養貓
9757962
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克蔑語詞元
14
3437641
9757963
2026-05-12T12:03:26Z
TongcyBot
83009
養貓
9757963
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:克里米亞韃靼語 服裝
14
3437642
9757964
2026-05-12T12:03:35Z
TongcyBot
83009
養貓
9757964
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:噶瑪蘭語 器官
14
3437643
9757965
2026-05-12T12:03:43Z
TongcyBot
83009
養貓
9757965
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:噶瑪蘭語 身體部位
14
3437644
9757966
2026-05-12T12:03:50Z
TongcyBot
83009
養貓
9757966
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:冰島語導航模板
14
3437645
9757967
2026-05-12T12:03:59Z
TongcyBot
83009
養貓
9757967
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:凱塔格語自動表格模板
14
3437646
9757968
2026-05-12T12:04:07Z
TongcyBot
83009
養貓
9757968
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:凱塔格語連結模板
14
3437647
9757969
2026-05-12T12:04:14Z
TongcyBot
83009
養貓
9757969
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:凱塔格語模板
14
3437648
9757970
2026-05-12T12:04:22Z
TongcyBot
83009
養貓
9757970
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:加利西亞語 木樨科植物
14
3437649
9757971
2026-05-12T12:04:33Z
TongcyBot
83009
養貓
9757971
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:加利西亞語 薑科植物
14
3437650
9757973
2026-05-12T12:04:41Z
TongcyBot
83009
養貓
9757973
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:加利西亞語 薑目植物
14
3437651
9757975
2026-05-12T12:04:48Z
TongcyBot
83009
養貓
9757975
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 撲克
14
3437652
9757976
2026-05-12T12:05:03Z
TongcyBot
83009
養貓
9757976
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
馬其頓人
0
3437653
9757978
2026-05-12T12:07:37Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==漢語== {{zh-forms|s=马其顿人|type=31}} ===發音=== {{zh-pron |m=Mǎqídùnrén |h=pfs=mâ-khì-tun-ngìn |cat=n }} ===名詞=== {{head|zh|名詞}} # [[來自]]或[[居住]]於[[馬其頓]]的人 ====翻譯==== {{trans-top|來自或居住於馬其頓的人}} * 南非語:{{t|af|Masedoniër}} * 阿爾巴尼亞語:{{t+|sq|maqedonas|m}}、{{t|sq|maqedonase|f}}、{{t|sq|sllavomaqedonas|m}}、{{t|sq|sllavomaqedonase|f}} * 阿拉伯…」的新頁面
9757978
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=马其顿人|type=31}}
===發音===
{{zh-pron
|m=Mǎqídùnrén
|h=pfs=mâ-khì-tun-ngìn
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[來自]]或[[居住]]於[[馬其頓]]的人
====翻譯====
{{trans-top|來自或居住於馬其頓的人}}
* 南非語:{{t|af|Masedoniër}}
* 阿爾巴尼亞語:{{t+|sq|maqedonas|m}}、{{t|sq|maqedonase|f}}、{{t|sq|sllavomaqedonas|m}}、{{t|sq|sllavomaqedonase|f}}
* 阿拉伯語:{{t|ar|مَقْدُونِيّ|m|tr=maqdūniyy, maqdōniyy}}、{{t+|ar|مَقْدُونِيَّة|f|tr=maqdūniyya, maqdōniyya}}
* 亞美尼亞語:{{t|hy|մակեդոնացի}}
* 阿羅馬尼亞語:{{t|rup|slavumachidon|m}}、{{t|rup|slavumachedon|m}}
* 阿斯圖里亞斯語:{{t+|ast|macedoniu|m}}、{{t+|ast|macedonia|f}}
* 阿塞拜疆語:{{t|az|makedon}}、{{t|az|makedoniyalı}}
* 巴斯克語:{{t|eu|mazedoniar}}
* 白俄羅斯語:{{t|be|македо́нец|m}}、{{t|be|македо́нка}}
* 保加利亞語:{{t+|bg|македон́ец|m}}、{{t|bg|македо́нка|f}}
* 加泰羅尼亞語:{{t+|ca|macedoni|m}}、{{t+|ca|macedònic|m}}、{{t+|ca|macedònia|f}}、{{t+|ca|macedònica|f}}
* 捷克語:{{t+|cs|Makedonec|m}}、{{t|cs|Makedoňan|m}}、{{t+|cs|Makedonka|f}}、{{t|cs|Makedoňanka|f}}
* 丹麥語:{{t|da|makedoner|c}}、{{t|da|makedonier|c}}
* 荷蘭語:{{t+|nl|Macedoniër|m}}
* 英語:{{t+|en|Macedonian}}、{{t+|en|Macedonian}} {{qual|少用}}
* 世界語:{{t|eo|Makedoniano}}
* 愛沙尼亞語:{{t+|et|makedoonlane}}
* 芬蘭語:{{t+|fi|makedonialainen}}
* 法語:{{t+|fr|macédonien|m}}、{{t+|fr|macédonienne|f}}
* 格魯吉亞語:{{t|ka|მაკედონელი}}、{{t|ka|მაკედონიელი}}
* 德語:{{t+|de|Mazedonier|m}}、{{t+|de|Mazedonierin|f}}
* 希臘語:{{t+|el|Μακεδόνας}}、{{t+|el|Μακεδόνισσα|f}}、{{t+|el|Σλαβομακεδόνας|m}}、{{t+|el|Σλαβομακεδόνισσα|f}} {{qualifier|i.e. Slavic Macedonian}}
*: 古希臘語:{{t|grc|Μακεδών|m}}
* 匈牙利語:{{t+|hu|macedón}}
* 冰島語:{{t|is|Makedóni|m}}
* 愛爾蘭語:{{t|ga|Macadónach|m}}
*: 古愛爾蘭語:{{t|sga|Maccidóndu|m-p}}
* 意大利語:{{t|it|macedoniana|f}}、{{t|it|macedoniano|m}}
* 日語:{{t+|ja|マケドニア人|tr=マケドニアじん, Makedonia-jin}}
* 哈薩克語:{{t|kk|македониялық}}
* 高棉語:{{t|km|ម៉ាសេដូនី}}
* 朝鮮語:{{t|ko|^마케도니아-인}}、{{t|ko|^마케도니아 사람}}
* 拉丁語:{{t|la|Macedoniense}}、{{t|la|Macedoniensis}}
* 拉脫維亞語:{{t|lv|maķedonietis|m}}、{{t|lv|maķedoniete|f}}
* 立陶宛語:{{t+|lt|makedonas|m}}、{{t+|lt|makedonė|f}}、{{t+|lt|makedonietė|f}}
* 馬其頓語:{{t|mk|Македонец|m}}、{{t+|mk|Македонка|f}}
* 挪威語:
*: 書面挪威語:{{t|nb|makedoner|m}}、{{t|nb|makedonier|m}}
*: 新挪威語:{{t+|nn|makedonar|m}}、{{t+|nn|makedoniar|m}}
* 波蘭語:{{t+|pl|Macedończyk|m}}、{{t+|pl|Macedonka|f}}
* 葡萄牙語:{{t+|pt|macedónio}} {{qualifier|葡萄牙}}、{{t+|pt|macedônio}} {{qualifier|巴西}}、{{t|pt|macedónico}} {{qualifier|葡萄牙}}、{{t|pt|macedônico}} {{qualifier|巴西}}
* 羅馬尼亞語:{{t+|ro|macedonean|m}}、{{t+|ro|macedoneancă|f}}、{{t+|ro|macedoneană|f}}
* 俄語:{{t+|ru|македо́нец|m}}、{{t+|ru|македо́нка|f}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|Македо́нац|m}}、{{t|sh|Макѐдо̄нка|f}}
*: 拉丁語字母:{{t+|sh|Makedónac|m}}、{{t|sh|Makèdōnka|f}}
* 斯洛伐克語:{{t|sk|Macedónec|m}}、{{t|sk|Macedónka|f}}、{{t|sk|Macedónčan|m}}、{{t|sk|Macedónčanka|f}}
* 斯洛文尼亞語:{{t+|sl|Makedónec|m}}、{{t|sl|Makedónka|f}}
* 西班牙語:{{t+|es|macedonio|m}}
* 瑞典語:{{t+|sv|makedonier|c}}
* 塔吉克語:{{t+|tg|мақдунӣ}}
* 土耳其語:{{t+|tr|Makedonyalı}}、{{t+|tr|Makedon}}
* 烏克蘭語:{{t|uk|македо́нець|m}}、{{t|uk|македо́нка|f}}
* 烏茲別克語:{{t|uz|makedoniyalik}}、{{t|uz|makedon}}
{{trans-bottom}}
9qo0rti4t5t9k058omfn67kashant6c
9757979
9757978
2026-05-12T12:07:53Z
TongcyDai
53191
9757979
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=马其顿人|type=31}}
===發音===
{{zh-pron
|m=Mǎqídùnrén
|h=pfs=mâ-khì-tun-ngìn
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[來自]]或[[居住]]於[[馬其頓]]的人
====翻譯====
{{trans-top|來自或居住於馬其頓的人}}
* 南非語:{{t|af|Masedoniër}}
* 阿爾巴尼亞語:{{t+|sq|maqedonas|m}}、{{t|sq|maqedonase|f}}、{{t|sq|sllavomaqedonas|m}}、{{t|sq|sllavomaqedonase|f}}
* 阿拉伯語:{{t|ar|مَقْدُونِيّ|m|tr=maqdūniyy, maqdōniyy}}、{{t+|ar|مَقْدُونِيَّة|f|tr=maqdūniyya, maqdōniyya}}
* 亞美尼亞語:{{t|hy|մակեդոնացի}}
* 阿羅馬尼亞語:{{t|rup|slavumachidon|m}}、{{t|rup|slavumachedon|m}}
* 阿斯圖里亞斯語:{{t+|ast|macedoniu|m}}、{{t+|ast|macedonia|f}}
* 阿塞拜疆語:{{t|az|makedon}}、{{t|az|makedoniyalı}}
* 巴斯克語:{{t|eu|mazedoniar}}
* 白俄羅斯語:{{t|be|македо́нец|m}}、{{t|be|македо́нка}}
* 保加利亞語:{{t+|bg|македон́ец|m}}、{{t|bg|македо́нка|f}}
* 加泰羅尼亞語:{{t+|ca|macedoni|m}}、{{t+|ca|macedònic|m}}、{{t+|ca|macedònia|f}}、{{t+|ca|macedònica|f}}
* 捷克語:{{t+|cs|Makedonec|m}}、{{t|cs|Makedoňan|m}}、{{t+|cs|Makedonka|f}}、{{t|cs|Makedoňanka|f}}
* 丹麥語:{{t|da|makedoner|c}}、{{t|da|makedonier|c}}
* 荷蘭語:{{t+|nl|Macedoniër|m}}
* 英語:{{t+|en|Macedonian}}、{{t+|en|Macedonian}} {{qual|少用}}
* 世界語:{{t|eo|Makedoniano}}
* 愛沙尼亞語:{{t+|et|makedoonlane}}
* 芬蘭語:{{t+|fi|makedonialainen}}
* 法語:{{t+|fr|macédonien|m}}、{{t+|fr|macédonienne|f}}
* 格魯吉亞語:{{t|ka|მაკედონელი}}、{{t|ka|მაკედონიელი}}
* 德語:{{t+|de|Mazedonier|m}}、{{t+|de|Mazedonierin|f}}
* 希臘語:{{t+|el|Μακεδόνας}}、{{t+|el|Μακεδόνισσα|f}}、{{t+|el|Σλαβομακεδόνας|m}}、{{t+|el|Σλαβομακεδόνισσα|f}} {{qualifier|i.e. Slavic Macedonian}}
*: 古希臘語:{{t|grc|Μακεδών|m}}
* 匈牙利語:{{t+|hu|macedón}}
* 冰島語:{{t|is|Makedóni|m}}
* 愛爾蘭語:{{t|ga|Macadónach|m}}
*: 古愛爾蘭語:{{t|sga|Maccidóndu|m-p}}
* 意大利語:{{t|it|macedoniana|f}}、{{t|it|macedoniano|m}}
* 日語:{{t+|ja|マケドニア人|tr=マケドニアじん, Makedonia-jin}}
* 哈薩克語:{{t|kk|македониялық}}
* 高棉語:{{t|km|ម៉ាសេដូនី}}
* 朝鮮語:{{t|ko|^마케도니아-인}}、{{t|ko|^마케도니아 사람}}
* 拉丁語:{{t|la|Macedoniense}}、{{t|la|Macedoniensis}}
* 拉脫維亞語:{{t|lv|maķedonietis|m}}、{{t|lv|maķedoniete|f}}
* 立陶宛語:{{t+|lt|makedonas|m}}、{{t+|lt|makedonė|f}}、{{t+|lt|makedonietė|f}}
* 馬其頓語:{{t|mk|Македонец|m}}、{{t+|mk|Македонка|f}}
* 挪威語:
*: 書面挪威語:{{t|nb|makedoner|m}}、{{t|nb|makedonier|m}}
*: 新挪威語:{{t+|nn|makedonar|m}}、{{t+|nn|makedoniar|m}}
* 波蘭語:{{t+|pl|Macedończyk|m}}、{{t+|pl|Macedonka|f}}
* 葡萄牙語:{{t+|pt|macedónio}} {{qualifier|葡萄牙}}、{{t+|pt|macedônio}} {{qualifier|巴西}}、{{t|pt|macedónico}} {{qualifier|葡萄牙}}、{{t|pt|macedônico}} {{qualifier|巴西}}
* 羅馬尼亞語:{{t+|ro|macedonean|m}}、{{t+|ro|macedoneancă|f}}、{{t+|ro|macedoneană|f}}
* 俄語:{{t+|ru|македо́нец|m}}、{{t+|ru|македо́нка|f}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|Македо́нац|m}}、{{t|sh|Макѐдо̄нка|f}}
*: 拉丁語字母:{{t+|sh|Makedónac|m}}、{{t|sh|Makèdōnka|f}}
* 斯洛伐克語:{{t|sk|Macedónec|m}}、{{t|sk|Macedónka|f}}、{{t|sk|Macedónčan|m}}、{{t|sk|Macedónčanka|f}}
* 斯洛文尼亞語:{{t+|sl|Makedónec|m}}、{{t|sl|Makedónka|f}}
* 西班牙語:{{t+|es|macedonio|m}}
* 瑞典語:{{t+|sv|makedonier|c}}
* 塔吉克語:{{t+|tg|мақдунӣ}}
* 土耳其語:{{t+|tr|Makedonyalı}}、{{t+|tr|Makedon}}
* 烏克蘭語:{{t|uk|македо́нець|m}}、{{t|uk|македо́нка|f}}
* 烏茲別克語:{{t|uz|makedoniyalik}}、{{t|uz|makedon}}
{{trans-bottom}}
{{C|zh|國籍}}
bf7c4msmeypsrrttzsvw6yz14e8kn1i
9757980
9757979
2026-05-12T12:08:30Z
TongcyDai
53191
9757980
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=马其顿人|type=31}}
===發音===
{{zh-pron
|m=Mǎqídùnrén
|h=pfs=mâ-khì-tun-ngìn
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[來自]]或[[居住]]於[[馬其頓]]的人
====翻譯====
{{trans-top|來自或居住於馬其頓的人}}
* 南非語:{{t|af|Masedoniër}}
* 阿爾巴尼亞語:{{t+|sq|maqedonas|m}}、{{t|sq|maqedonase|f}}、{{t|sq|sllavomaqedonas|m}}、{{t|sq|sllavomaqedonase|f}}
* 阿拉伯語:{{t|ar|مَقْدُونِيّ|m|tr=maqdūniyy, maqdōniyy}}、{{t+|ar|مَقْدُونِيَّة|f|tr=maqdūniyya, maqdōniyya}}
* 亞美尼亞語:{{t|hy|մակեդոնացի}}
* 阿羅馬尼亞語:{{t|rup|slavumachidon|m}}、{{t|rup|slavumachedon|m}}
* 阿斯圖里亞斯語:{{t+|ast|macedoniu|m}}、{{t+|ast|macedonia|f}}
* 阿塞拜疆語:{{t|az|makedon}}、{{t|az|makedoniyalı}}
* 巴斯克語:{{t|eu|mazedoniar}}
* 白俄羅斯語:{{t|be|македо́нец|m}}、{{t|be|македо́нка}}
* 保加利亞語:{{t+|bg|македон́ец|m}}、{{t|bg|македо́нка|f}}
* 加泰羅尼亞語:{{t+|ca|macedoni|m}}、{{t+|ca|macedònic|m}}、{{t+|ca|macedònia|f}}、{{t+|ca|macedònica|f}}
* 捷克語:{{t+|cs|Makedonec|m}}、{{t|cs|Makedoňan|m}}、{{t+|cs|Makedonka|f}}、{{t|cs|Makedoňanka|f}}
* 丹麥語:{{t|da|makedoner|c}}、{{t|da|makedonier|c}}
* 荷蘭語:{{t+|nl|Macedoniër|m}}
* 英語:{{t+|en|Macedonian}}、{{t+|en|Makedonian}} {{qual|少用}}
* 世界語:{{t|eo|Makedoniano}}
* 愛沙尼亞語:{{t+|et|makedoonlane}}
* 芬蘭語:{{t+|fi|makedonialainen}}
* 法語:{{t+|fr|macédonien|m}}、{{t+|fr|macédonienne|f}}
* 格魯吉亞語:{{t|ka|მაკედონელი}}、{{t|ka|მაკედონიელი}}
* 德語:{{t+|de|Mazedonier|m}}、{{t+|de|Mazedonierin|f}}
* 希臘語:{{t+|el|Μακεδόνας}}、{{t+|el|Μακεδόνισσα|f}}、{{t+|el|Σλαβομακεδόνας|m}}、{{t+|el|Σλαβομακεδόνισσα|f}} {{qualifier|i.e. Slavic Macedonian}}
*: 古希臘語:{{t|grc|Μακεδών|m}}
* 匈牙利語:{{t+|hu|macedón}}
* 冰島語:{{t|is|Makedóni|m}}
* 愛爾蘭語:{{t|ga|Macadónach|m}}
*: 古愛爾蘭語:{{t|sga|Maccidóndu|m-p}}
* 意大利語:{{t|it|macedoniana|f}}、{{t|it|macedoniano|m}}
* 日語:{{t+|ja|マケドニア人|tr=マケドニアじん, Makedonia-jin}}
* 哈薩克語:{{t|kk|македониялық}}
* 高棉語:{{t|km|ម៉ាសេដូនី}}
* 朝鮮語:{{t|ko|^마케도니아-인}}、{{t|ko|^마케도니아 사람}}
* 拉丁語:{{t|la|Macedoniense}}、{{t|la|Macedoniensis}}
* 拉脫維亞語:{{t|lv|maķedonietis|m}}、{{t|lv|maķedoniete|f}}
* 立陶宛語:{{t+|lt|makedonas|m}}、{{t+|lt|makedonė|f}}、{{t+|lt|makedonietė|f}}
* 馬其頓語:{{t|mk|Македонец|m}}、{{t+|mk|Македонка|f}}
* 挪威語:
*: 書面挪威語:{{t|nb|makedoner|m}}、{{t|nb|makedonier|m}}
*: 新挪威語:{{t+|nn|makedonar|m}}、{{t+|nn|makedoniar|m}}
* 波蘭語:{{t+|pl|Macedończyk|m}}、{{t+|pl|Macedonka|f}}
* 葡萄牙語:{{t+|pt|macedónio}} {{qualifier|葡萄牙}}、{{t+|pt|macedônio}} {{qualifier|巴西}}、{{t|pt|macedónico}} {{qualifier|葡萄牙}}、{{t|pt|macedônico}} {{qualifier|巴西}}
* 羅馬尼亞語:{{t+|ro|macedonean|m}}、{{t+|ro|macedoneancă|f}}、{{t+|ro|macedoneană|f}}
* 俄語:{{t+|ru|македо́нец|m}}、{{t+|ru|македо́нка|f}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|Македо́нац|m}}、{{t|sh|Макѐдо̄нка|f}}
*: 拉丁語字母:{{t+|sh|Makedónac|m}}、{{t|sh|Makèdōnka|f}}
* 斯洛伐克語:{{t|sk|Macedónec|m}}、{{t|sk|Macedónka|f}}、{{t|sk|Macedónčan|m}}、{{t|sk|Macedónčanka|f}}
* 斯洛文尼亞語:{{t+|sl|Makedónec|m}}、{{t|sl|Makedónka|f}}
* 西班牙語:{{t+|es|macedonio|m}}
* 瑞典語:{{t+|sv|makedonier|c}}
* 塔吉克語:{{t+|tg|мақдунӣ}}
* 土耳其語:{{t+|tr|Makedonyalı}}、{{t+|tr|Makedon}}
* 烏克蘭語:{{t|uk|македо́нець|m}}、{{t|uk|македо́нка|f}}
* 烏茲別克語:{{t|uz|makedoniyalik}}、{{t|uz|makedon}}
{{trans-bottom}}
{{C|zh|國籍}}
5xp4rp62pxsw8o9z65vz64pjj1bmy9l
Category:意大利語 羊
14
3437654
9757981
2026-05-12T12:08:59Z
TongcyBot
83009
養貓
9757981
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 羊亞科
14
3437655
9757982
2026-05-12T12:09:05Z
TongcyBot
83009
養貓
9757982
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 芹科植物
14
3437656
9757983
2026-05-12T12:09:15Z
TongcyBot
83009
養貓
9757983
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 莧科
14
3437657
9757984
2026-05-12T12:09:24Z
TongcyBot
83009
養貓
9757984
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 石竹目
14
3437658
9757985
2026-05-12T12:09:31Z
TongcyBot
83009
養貓
9757985
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 蓼科植物
14
3437659
9757986
2026-05-12T12:09:41Z
TongcyBot
83009
養貓
9757986
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 薔薇科植物
14
3437660
9757987
2026-05-12T12:09:50Z
TongcyBot
83009
養貓
9757987
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 酢漿草目植物
14
3437661
9757988
2026-05-12T12:10:00Z
TongcyBot
83009
養貓
9757988
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 針果芹族植物
14
3437662
9757989
2026-05-12T12:10:08Z
TongcyBot
83009
養貓
9757989
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 錫安主義
14
3437663
9757990
2026-05-12T12:10:15Z
TongcyBot
83009
養貓
9757990
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 以色列
14
3437664
9757992
2026-05-12T12:10:22Z
TongcyBot
83009
養貓
9757992
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 晶體學
14
3437665
9757993
2026-05-12T12:10:31Z
TongcyBot
83009
養貓
9757993
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意大利語 晶體
14
3437666
9757994
2026-05-12T12:10:37Z
TongcyBot
83009
養貓
9757994
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
bremi
0
3437667
9758000
2026-05-12T12:12:18Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==意大利語== ===名詞=== {{head|it|名詞變格形}} # {{plural of|it|breme}}」的新頁面
9758000
wikitext
text/x-wiki
==意大利語==
===名詞===
{{head|it|名詞變格形}}
# {{plural of|it|breme}}
aammthrn081u3ntnmkz8nfmpz90ptd4
ubai
0
3437668
9758001
2026-05-12T12:12:21Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|Ubaí}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|うばい}}」的新頁面
9758001
wikitext
text/x-wiki
{{also|Ubaí}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|うばい}}
t1klxygtqhnttxe3iw4sb89gpjc09gh
Category:帶「䒫」的漢語詞
14
3437669
9758003
2026-05-12T12:13:05Z
TongcyBot
83009
養貓
9758003
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「䒫」的詞
14
3437670
9758004
2026-05-12T12:13:11Z
TongcyBot
83009
養貓
9758004
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「䗧」的漢語詞
14
3437671
9758005
2026-05-12T12:13:17Z
TongcyBot
83009
養貓
9758005
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「䗧」的詞
14
3437672
9758006
2026-05-12T12:13:22Z
TongcyBot
83009
養貓
9758006
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「䬾」的漢語詞
14
3437673
9758007
2026-05-12T12:13:29Z
TongcyBot
83009
養貓
9758007
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「䬾」的詞
14
3437674
9758008
2026-05-12T12:13:35Z
TongcyBot
83009
養貓
9758008
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「嚐」的漢語詞
14
3437675
9758009
2026-05-12T12:13:42Z
TongcyBot
83009
養貓
9758009
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「嚐」的詞
14
3437676
9758011
2026-05-12T12:13:48Z
TongcyBot
83009
養貓
9758011
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「斛」的日語詞
14
3437677
9758012
2026-05-12T12:13:56Z
TongcyBot
83009
養貓
9758012
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「祦」的漢語詞
14
3437678
9758013
2026-05-12T12:14:06Z
TongcyBot
83009
養貓
9758013
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「祦」的詞
14
3437679
9758014
2026-05-12T12:14:13Z
TongcyBot
83009
養貓
9758014
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「聏」的漢語詞
14
3437680
9758015
2026-05-12T12:14:19Z
TongcyBot
83009
養貓
9758015
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「聏」的詞
14
3437681
9758016
2026-05-12T12:14:26Z
TongcyBot
83009
養貓
9758016
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𠨏」的漢語詞
14
3437682
9758017
2026-05-12T12:14:33Z
TongcyBot
83009
養貓
9758017
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𠨏」的詞
14
3437683
9758018
2026-05-12T12:14:40Z
TongcyBot
83009
養貓
9758018
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𡆭」的漢語詞
14
3437684
9758019
2026-05-12T12:14:48Z
TongcyBot
83009
養貓
9758019
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𡆭」的詞
14
3437685
9758020
2026-05-12T12:14:54Z
TongcyBot
83009
養貓
9758020
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𡖶」的漢語詞
14
3437686
9758022
2026-05-12T12:15:02Z
TongcyBot
83009
養貓
9758022
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𡖶」的詞
14
3437687
9758023
2026-05-12T12:15:07Z
TongcyBot
83009
養貓
9758023
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𡠜」的漢語詞
14
3437688
9758024
2026-05-12T12:15:12Z
TongcyBot
83009
養貓
9758024
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𡠜」的詞
14
3437689
9758025
2026-05-12T12:15:18Z
TongcyBot
83009
養貓
9758025
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𢟄」的漢語詞
14
3437690
9758026
2026-05-12T12:15:23Z
TongcyBot
83009
養貓
9758026
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
gear wheel
0
3437691
9758027
2026-05-12T12:15:29Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|gearwheel}} ==英語== [[File:Gears animation.gif|thumb|a pair of gear wheels]] ===詞源=== 源自 {{compound|en|gear|wheel}}。 ===發音=== * {{IPA|en|/ɡɪə(ɹ) ʍiːl/|a=UK}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-gear wheel.wav|a=Southern England}} * {{IPA|en|/ɡɪɚ ʍil/|a=US}} ===名詞=== {{en-noun}} # {{senseid|en|Q143873}}{{lb|en|力學}} [[齒輪]] #: {{alti|en|gearwheel<id:Q143873>|gear-wheel<id:Q143873>}} #: {{syn|en|…」的新頁面
9758027
wikitext
text/x-wiki
{{also|gearwheel}}
==英語==
[[File:Gears animation.gif|thumb|a pair of gear wheels]]
===詞源===
源自 {{compound|en|gear|wheel}}。
===發音===
* {{IPA|en|/ɡɪə(ɹ) ʍiːl/|a=UK}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-gear wheel.wav|a=Southern England}}
* {{IPA|en|/ɡɪɚ ʍil/|a=US}}
===名詞===
{{en-noun}}
# {{senseid|en|Q143873}}{{lb|en|力學}} [[齒輪]]
#: {{alti|en|gearwheel<id:Q143873>|gear-wheel<id:Q143873>}}
#: {{syn|en||cog wheel<id:Q143873>|cogwheel<id:Q143873>}}
#: {{hyper|en|gear<id:superclass of Q143873>|wheel#Noun}}
#: {{hypo|en|bevel gear|herringbone gear|planet gear|spur gear|sun gear|worm wheel}}
#: {{hol|en|gearset}}
#: {{cot|en|rack#Noun|worm gear|sprocket wheel<id:Q1154740>|sprocket<id:Q1154740>|chainring}}
#: {{nearsyn|en|cog<id:gear, especially Q143873>|gear<id:superclass of Q143873>}}
====參見====
{{col|en
|planetary gear
|worm drive
}}
ami75ak1jy1930y5mjfai4kti5i85e3
Category:帶「𢟄」的詞
14
3437692
9758028
2026-05-12T12:15:29Z
TongcyBot
83009
養貓
9758028
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
gear wheels
0
3437693
9758029
2026-05-12T12:15:33Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|gearwheels}} ==英語== ===名詞=== {{head|en|名詞變格形}} # {{plural of|en|gear wheel}}」的新頁面
9758029
wikitext
text/x-wiki
{{also|gearwheels}}
==英語==
===名詞===
{{head|en|名詞變格形}}
# {{plural of|en|gear wheel}}
pi5wrdhnqdjdax64jjv6c1v2cuxkz9j
Category:帶「𤇹」的漢語詞
14
3437694
9758030
2026-05-12T12:15:34Z
TongcyBot
83009
養貓
9758030
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𤇹」的詞
14
3437695
9758031
2026-05-12T12:15:42Z
TongcyBot
83009
養貓
9758031
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𥅡」的漢語詞
14
3437696
9758032
2026-05-12T12:15:49Z
TongcyBot
83009
養貓
9758032
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𥅡」的詞
14
3437697
9758033
2026-05-12T12:15:53Z
TongcyBot
83009
養貓
9758033
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𥜔」的漢語詞
14
3437698
9758034
2026-05-12T12:16:01Z
TongcyBot
83009
養貓
9758034
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𥜔」的詞
14
3437699
9758036
2026-05-12T12:16:05Z
TongcyBot
83009
養貓
9758036
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
gearwheel
0
3437700
9758037
2026-05-12T12:16:09Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|gear wheel}} ==英語== ===詞源=== {{etymon|en|:af|gear|wheel|tree=1|text=+}} ===名詞=== {{en-noun}} # {{senseid|en|Q143873}} {{alternative spelling of|en|gear wheel<id:Q143873>}}。 #* {{quote-journal|en|year=1962|month=June|title=The 2,800 h.p. Brush "Falcon" diesel-electric|journal=Modern Railways|page=380|text='''Gearwheels''' and pinions can be removed by the oil injection method, a provision which speeds and simplifies the…」的新頁面
9758037
wikitext
text/x-wiki
{{also|gear wheel}}
==英語==
===詞源===
{{etymon|en|:af|gear|wheel|tree=1|text=+}}
===名詞===
{{en-noun}}
# {{senseid|en|Q143873}} {{alternative spelling of|en|gear wheel<id:Q143873>}}。
#* {{quote-journal|en|year=1962|month=June|title=The 2,800 h.p. Brush "Falcon" diesel-electric|journal=Modern Railways|page=380|text='''Gearwheels''' and pinions can be removed by the oil injection method, a provision which speeds and simplifies the work of replacement.|t=大小'''齿轮'''可以通过注油法拆卸,这种设计加快并简化了更换工作。}}
===參考資料===
* {{R:Lexico}}
lxx4i9qdbc0o0fljgy9ch5ua7tf7m1l
Category:帶「𥼚」的漢語詞
14
3437701
9758038
2026-05-12T12:16:11Z
TongcyBot
83009
養貓
9758038
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
gearwheels
0
3437702
9758039
2026-05-12T12:16:12Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|gear wheels}} ==英語== ===名詞=== {{head|en|名詞變格形}} # {{plural of|en|gearwheel}}」的新頁面
9758039
wikitext
text/x-wiki
{{also|gear wheels}}
==英語==
===名詞===
{{head|en|名詞變格形}}
# {{plural of|en|gearwheel}}
c4kzjw1kmgavrmxduareh8imj2otai2
Category:帶「𥼚」的詞
14
3437703
9758040
2026-05-12T12:16:17Z
TongcyBot
83009
養貓
9758040
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𦓑」的漢語詞
14
3437704
9758041
2026-05-12T12:16:24Z
TongcyBot
83009
養貓
9758041
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
quémandé
0
3437705
9758042
2026-05-12T12:16:29Z
Sayonzei
40728
創建法語「[[quémander]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758042
wikitext
text/x-wiki
==法語==
===動詞===
{{fr-past participle}}
# {{past participle of|fr|quémander}}
lhbl6w8uim1apa5lid73dhmrr2qvx1s
Category:帶「𦓑」的詞
14
3437706
9758043
2026-05-12T12:16:31Z
TongcyBot
83009
養貓
9758043
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𦓒」的漢語詞
14
3437707
9758044
2026-05-12T12:16:38Z
TongcyBot
83009
養貓
9758044
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𦓒」的詞
14
3437708
9758045
2026-05-12T12:16:47Z
TongcyBot
83009
養貓
9758045
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
quémandés
0
3437709
9758046
2026-05-12T12:16:53Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|quémandes}} ==法語== ===分詞=== {{head|fr|過去分詞變格形|g=m-p}} # {{masculine plural of|fr|quémandé}}」的新頁面
9758046
wikitext
text/x-wiki
{{also|quémandes}}
==法語==
===分詞===
{{head|fr|過去分詞變格形|g=m-p}}
# {{masculine plural of|fr|quémandé}}
00tx08g707vjxni6b1okamifabm3k9u
Category:帶「𦓠」的漢語詞
14
3437710
9758047
2026-05-12T12:16:54Z
TongcyBot
83009
養貓
9758047
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
quémandée
0
3437711
9758048
2026-05-12T12:16:55Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==法語== ===分詞=== {{head|fr|過去分詞變格形|g=f-s}} # {{feminine singular of|fr|quémandé}}」的新頁面
9758048
wikitext
text/x-wiki
==法語==
===分詞===
{{head|fr|過去分詞變格形|g=f-s}}
# {{feminine singular of|fr|quémandé}}
f8kovdwpd87uyyu6hd1zalfdzo8lhca
quémandées
0
3437712
9758049
2026-05-12T12:16:57Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==法語== ===分詞=== {{head|fr|過去分詞變格形|g=f-p}} # {{feminine plural of|fr|quémandé}}」的新頁面
9758049
wikitext
text/x-wiki
==法語==
===分詞===
{{head|fr|過去分詞變格形|g=f-p}}
# {{feminine plural of|fr|quémandé}}
groig77c5p8aqdz2gn1636cnzv1b5ix
Category:帶「𦓠」的詞
14
3437713
9758050
2026-05-12T12:17:01Z
TongcyBot
83009
養貓
9758050
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𧦊」的漢語詞
14
3437714
9758051
2026-05-12T12:17:08Z
TongcyBot
83009
養貓
9758051
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𧦊」的詞
14
3437715
9758052
2026-05-12T12:17:14Z
TongcyBot
83009
養貓
9758052
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𧦍」的漢語詞
14
3437716
9758053
2026-05-12T12:17:21Z
TongcyBot
83009
養貓
9758053
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𧦍」的詞
14
3437717
9758054
2026-05-12T12:17:29Z
TongcyBot
83009
養貓
9758054
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𧦰」的漢語詞
14
3437718
9758055
2026-05-12T12:17:36Z
TongcyBot
83009
養貓
9758055
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𧦰」的詞
14
3437719
9758056
2026-05-12T12:17:42Z
TongcyBot
83009
養貓
9758056
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𧩌」的漢語詞
14
3437720
9758057
2026-05-12T12:17:49Z
TongcyBot
83009
養貓
9758057
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𧩌」的詞
14
3437721
9758059
2026-05-12T12:17:55Z
TongcyBot
83009
養貓
9758059
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
gagée
0
3437722
9758060
2026-05-12T12:17:59Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==法語== ===分詞=== {{head|fr|過去分詞變格形|g=f-s}} # {{feminine singular of|fr|gagé}}」的新頁面
9758060
wikitext
text/x-wiki
==法語==
===分詞===
{{head|fr|過去分詞變格形|g=f-s}}
# {{feminine singular of|fr|gagé}}
lzar5q8titabwizkesmp08ubl84ohss
gagés
0
3437723
9758061
2026-05-12T12:18:00Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|gages|Gages}} ==法語== ===分詞=== {{head|fr|過去分詞變格形|g=m-p}} # {{masculine plural of|fr|gagé}}」的新頁面
9758061
wikitext
text/x-wiki
{{also|gages|Gages}}
==法語==
===分詞===
{{head|fr|過去分詞變格形|g=m-p}}
# {{masculine plural of|fr|gagé}}
ryieo3h9ss0y5l519e7v94cahk18lwx
gagées
0
3437724
9758062
2026-05-12T12:18:02Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==法語== ===分詞=== {{head|fr|過去分詞變格形|g=f-p}} # {{feminine plural of|fr|gagé}}」的新頁面
9758062
wikitext
text/x-wiki
==法語==
===分詞===
{{head|fr|過去分詞變格形|g=f-p}}
# {{feminine plural of|fr|gagé}}
t8ln8bzm10pg5obpklch5lppthl5urq
Category:帶「𨄥」的漢語詞
14
3437725
9758063
2026-05-12T12:18:02Z
TongcyBot
83009
養貓
9758063
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𨄥」的詞
14
3437726
9758064
2026-05-12T12:18:08Z
TongcyBot
83009
養貓
9758064
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𨩝」的漢語詞
14
3437727
9758065
2026-05-12T12:18:15Z
TongcyBot
83009
養貓
9758065
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𨩝」的詞
14
3437728
9758066
2026-05-12T12:18:21Z
TongcyBot
83009
養貓
9758066
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𨰼」的漢語詞
14
3437729
9758067
2026-05-12T12:18:29Z
TongcyBot
83009
養貓
9758067
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𨰼」的詞
14
3437730
9758068
2026-05-12T12:18:35Z
TongcyBot
83009
養貓
9758068
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𩰴」的漢語詞
14
3437731
9758069
2026-05-12T12:18:42Z
TongcyBot
83009
養貓
9758069
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𩰴」的詞
14
3437732
9758070
2026-05-12T12:18:48Z
TongcyBot
83009
養貓
9758070
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𪠽」的漢語詞
14
3437733
9758071
2026-05-12T12:18:56Z
TongcyBot
83009
養貓
9758071
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𪠽」的詞
14
3437734
9758072
2026-05-12T12:19:02Z
TongcyBot
83009
養貓
9758072
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𫚜」的漢語詞
14
3437735
9758073
2026-05-12T12:19:09Z
TongcyBot
83009
養貓
9758073
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𫚜」的詞
14
3437736
9758074
2026-05-12T12:19:16Z
TongcyBot
83009
養貓
9758074
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𫾦」的漢語詞
14
3437737
9758075
2026-05-12T12:19:24Z
TongcyBot
83009
養貓
9758075
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:帶「𫾦」的詞
14
3437738
9758076
2026-05-12T12:19:30Z
TongcyBot
83009
養貓
9758076
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
香加皮
0
3437739
9758082
2026-05-12T13:59:37Z
P1ayer
5118
新詞條
9758082
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiāngjiāpí
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 夾竹桃科植物{{w|杠柳}}({{taxlink|Periploca sepium|species}})的乾燥根皮,作為[[藥材]]有利水消腫、祛風濕、強筋骨之效
55gafaniy51mp4a2kcsylg6e6tqqyp8
ưu trương
0
3437740
9758088
2026-05-12T15:09:14Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==越南語== {{wp|vi:}} ===詞源=== {{vi-etym-sino|優||張}}。 ===發音=== {{vi-IPA}} ===形容詞=== {{vi-adj}} # {{lb|vi|science}} [[高]][[滲透壓]]的 #: {{ant|vi|nhược trương}}」的新頁面
9758088
wikitext
text/x-wiki
==越南語==
{{wp|vi:}}
===詞源===
{{vi-etym-sino|優||張}}。
===發音===
{{vi-IPA}}
===形容詞===
{{vi-adj}}
# {{lb|vi|science}} [[高]][[滲透壓]]的
#: {{ant|vi|nhược trương}}
d50p0ss8qbzrrq7x8ts26edpdacc9se
ưu tiên
0
3437741
9758091
2026-05-12T15:10:19Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==越南語== ===詞源=== {{vi-etym-sino|優先}}。 ===發音=== {{vi-IPA}} ===形容詞=== {{vi-adj}} # [[優先]] ===動詞=== {{vi-verb}} # [[優先]]」的新頁面
9758091
wikitext
text/x-wiki
==越南語==
===詞源===
{{vi-etym-sino|優先}}。
===發音===
{{vi-IPA}}
===形容詞===
{{vi-adj}}
# [[優先]]
===動詞===
{{vi-verb}}
# [[優先]]
mv72bktk91rbb4ydde3fjvpp3jzawal
tối ưu
0
3437742
9758092
2026-05-12T15:10:54Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==越南語== {{swp|vi:Lựa chọn +}} ===詞源=== {{vi-etym-sino|最||優}}。 ===發音=== {{vi-IPA}} ===形容詞=== {{vi-adj}} # [[最優]],[[最佳]] #: {{uxi|vi|Lựa chọn '''tối ưu'''|'''最佳'''選擇}}」的新頁面
9758092
wikitext
text/x-wiki
==越南語==
{{swp|vi:Lựa chọn +}}
===詞源===
{{vi-etym-sino|最||優}}。
===發音===
{{vi-IPA}}
===形容詞===
{{vi-adj}}
# [[最優]],[[最佳]]
#: {{uxi|vi|Lựa chọn '''tối ưu'''|'''最佳'''選擇}}
f1crobp5tjurzflobyar9o76boav98l
うばう
0
3437743
9758098
2026-05-12T15:18:30Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|奪う}}」的新頁面
9758098
wikitext
text/x-wiki
==日語==
{{ja-see|奪う}}
s36peqb4rpbb7fh5aobgvbb1gsjh4le
けいすう
0
3437744
9758114
2026-05-12T20:41:39Z
Fglffer
55252
新詞條
9758114
wikitext
text/x-wiki
==日語==
{{ja-see|係数|計数}}
fy7ol2w3luc9kzw1zxhntorohf7mwc7
Category:Rhymes:奧星語/e
14
3437745
9758122
2026-05-12T22:11:04Z
TongcyBot
83009
養貓
9758122
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:奧星語形容詞
14
3437746
9758123
2026-05-12T22:11:23Z
TongcyBot
83009
養貓
9758123
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:有國際音標的奧星語詞
14
3437747
9758124
2026-05-12T22:11:29Z
TongcyBot
83009
養貓
9758124
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:奧星語詞條維護
14
3437748
9758125
2026-05-12T22:11:36Z
TongcyBot
83009
養貓
9758125
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Module:Place/locations
828
3437749
9758126
2026-05-12T23:18:25Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「local export = {} export.force_cat = false local m_table = require("Module:table") local insert = table.insert local concat = table.concat local dump = mw.dumpObject local unpack = unpack or table.unpack --[==[ Chinese Wiktionary localization of [[Module:place/locations]]. All canonical location keys are in Chinese, matching what editors write in holonym parameters (e.g. {{place|zh|城市|s/中央邦|c/印度}}). English Wikipedia articl…」的新頁面
9758126
Scribunto
text/plain
local export = {}
export.force_cat = false
local m_table = require("Module:table")
local insert = table.insert
local concat = table.concat
local dump = mw.dumpObject
local unpack = unpack or table.unpack
--[==[
Chinese Wiktionary localization of [[Module:place/locations]].
All canonical location keys are in Chinese, matching what editors write in holonym parameters
(e.g. {{place|zh|城市|s/中央邦|c/印度}}). English Wikipedia article names are stored in the
`wp` field for cross-reference. The `the`, `british_spelling` and English-suffix-detection
fields from enwikt are omitted as they are not applicable in Chinese.
The helper functions (process_error through construct_linked_placename) are kept intact from
enwikt's Module:place/locations to maintain API compatibility with Module:place/placetypes.
]==]
-----------------------------------------------------------------------------------
-- Helper functions --
-----------------------------------------------------------------------------------
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
function export.internal_error(fmt, ...)
export.process_error("Internal error: " .. fmt, ...)
end
local internal_error = export.internal_error
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
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
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 == "city" 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 == "country" or
defcon.placetype == "constituent country") then
return placename .. ", " .. defcon.key
else
return placename
end
end
end
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 = "country"}
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", "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
spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city")
spec.initialized = true
end
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
local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype
if not placetype then
internal_error("No placetype found for key %s", key)
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
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
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
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
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
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
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
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)
-- Chinese has no articles; `the` field is unused but kept for API compatibility.
return linked_placename
end
-----------------------------------------------------------------------------------
-- Local data helper factories --
-----------------------------------------------------------------------------------
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 _, pat in ipairs(container_patterns) do
local nsubs
full_placename, nsubs = full_placename:gsub(pat, "")
if nsubs > 0 then break end
end
end
local elliptical_placename = full_placename
if divtype_patterns then
for _, pat in ipairs(divtype_patterns) do
local nsubs
elliptical_placename, nsubs = elliptical_placename:gsub(pat, "")
if nsubs > 0 then break end
end
end
return full_placename, elliptical_placename
end
end
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
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
-- Canonicalize a continent container key (string) to canonical container form.
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_container`", key)
end
-----------------------------------------------------------------------------------
-- Top-level tables --
-----------------------------------------------------------------------------------
export.continents = {
["地球"] = {placetype = "planet", addl_parents = {"nature"},
fulldesc = "=the planet [[Earth]] and the features found on it", wp = "Earth"},
["非洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"}, wp = "Africa"},
["美洲"] = {placetype = {"supercontinent", "continent"}, container = {key = "地球", placetype = "planet"},
wp = "Americas"},
["北美洲"] = {placetype = "continent", container = {key = "美洲", placetype = "supercontinent"}, wp = "North America"},
["加勒比地區"] = {placetype = {"continental region", "region"}, container = {key = "北美洲", placetype = "continent"}, wp = "Caribbean"},
["中美洲"] = {placetype = {"continental region", "region"}, container = {key = "北美洲", placetype = "continent"}, wp = "Central America"},
["南美洲"] = {placetype = "continent", container = {key = "美洲", placetype = "supercontinent"}, wp = "South America"},
["南極洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"},
fulldesc = "=the territory of [[Antarctica]]", wp = "Antarctica"},
["歐亞大陸"] = {placetype = {"supercontinent", "continent"}, container = {key = "地球", placetype = "planet"}, wp = "Eurasia"},
["亞洲"] = {placetype = "continent", container = {key = "歐亞大陸", placetype = "supercontinent"}, wp = "Asia"},
["中東"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Middle East"},
["東南亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Southeast Asia"},
["南亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "South Asia"},
["東亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "East Asia"},
["中亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Central Asia"},
["歐洲"] = {placetype = "continent", container = {key = "歐亞大陸", placetype = "supercontinent"}, wp = "Europe"},
["西歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Western Europe"},
["東歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Eastern Europe"},
["北歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Northern Europe"},
["南歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Southern Europe"},
["中歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Central Europe"},
["大洋洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"}, wp = "Oceania"},
["美拉尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Melanesia"},
["密克羅尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Micronesia"},
["玻里尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Polynesia"},
}
export.continents_group = {
default_overriding_bare_label_parents = {},
default_divs = {{type = "countries", prep = "in"}},
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,
default_no_check_holonym_mismatch = true,
data = export.continents,
}
-----------------------------------------------------------------------------------
-- Countries --
-----------------------------------------------------------------------------------
export.countries = {
-- Africa
["阿爾及利亞"] = {container = "非洲", divs = {"provinces", "communes", "districts"}, wp = "Algeria"},
["安哥拉"] = {container = "非洲", divs = {"provinces", "municipalities"}, wp = "Angola"},
["貝南"] = {container = "非洲", wp = "Benin"},
["波札那"] = {container = "非洲", wp = "Botswana"},
["博茨瓦納"] = {alias_of = "波札那"},
["布吉納法索"] = {container = "非洲", wp = "Burkina Faso"},
["布基納法索"] = {alias_of = "布吉納法索"},
["蒲隆地"] = {container = "非洲", wp = "Burundi"},
["布隆迪"] = {alias_of = "蒲隆地"},
["維德角"] = {container = "非洲", wp = "Cape Verde"},
["佛得角"] = {alias_of = "維德角"},
["中非共和國"] = {container = "非洲", wp = "Central African Republic"},
["查德"] = {container = "非洲", wp = "Chad"},
["科摩羅"] = {container = "非洲", wp = "Comoros"},
["葛摩"] = {alias_of = "科摩羅"},
["剛果共和國"] = {container = "非洲", wp = "Republic of the Congo"},
["剛果(布)"] = {alias_of = "剛果共和國"},
["剛果民主共和國"] = {container = "非洲", divs = {"provinces"}, wp = "Democratic Republic of the Congo"},
["剛果(金)"] = {alias_of = "剛果民主共和國"},
["吉布地"] = {container = "非洲", wp = "Djibouti"},
["吉布提"] = {alias_of = "吉布地"},
["埃及"] = {container = "非洲", divs = {"governorates"}, wp = "Egypt"},
["赤道幾內亞"] = {container = "非洲", wp = "Equatorial Guinea"},
["厄利垂亞"] = {container = "非洲", wp = "Eritrea"},
["厄立特里亞"] = {alias_of = "厄利垂亞"},
["史瓦帝尼"] = {container = "非洲", wp = "Eswatini"},
["衣索比亞"] = {container = "非洲", divs = {"regions"}, wp = "Ethiopia"},
["埃塞俄比亞"] = {alias_of = "衣索比亞"},
["加彭"] = {container = "非洲", wp = "Gabon"},
["加蓬"] = {alias_of = "加彭"},
["甘比亞"] = {container = "非洲", wp = "Gambia"},
["岡比亞"] = {alias_of = "甘比亞"},
["迦納"] = {container = "非洲", wp = "Ghana"},
["加納"] = {alias_of = "迦納"},
["幾內亞"] = {container = "非洲", wp = "Guinea"},
["幾內亞比索"] = {container = "非洲", wp = "Guinea-Bissau"},
["象牙海岸"] = {container = "非洲", wp = "Ivory Coast"},
["科特迪瓦"] = {alias_of = "象牙海岸"},
["肯亞"] = {container = "非洲", divs = {"counties"}, wp = "Kenya"},
["肯尼亞"] = {alias_of = "肯亞"},
["賴索托"] = {container = "非洲", wp = "Lesotho"},
["莱索托"] = {alias_of = "賴索托"},
["賴比瑞亞"] = {container = "非洲", wp = "Liberia"},
["利比里亞"] = {alias_of = "賴比瑞亞"},
["利比亞"] = {container = "非洲", wp = "Libya"},
["馬達加斯加"] = {container = "非洲", wp = "Madagascar"},
["馬拉威"] = {container = "非洲", wp = "Malawi"},
["馬拉維"] = {alias_of = "馬拉威"},
["馬利"] = {container = "非洲", wp = "Mali"},
["馬里"] = {alias_of = "馬利"},
["茅利塔尼亞"] = {container = "非洲", wp = "Mauritania"},
["毛里塔尼亞"] = {alias_of = "茅利塔尼亞"},
["模里西斯"] = {container = "非洲", wp = "Mauritius"},
["毛里求斯"] = {alias_of = "模里西斯"},
["摩洛哥"] = {container = "非洲", wp = "Morocco"},
["莫三比克"] = {container = "非洲", wp = "Mozambique"},
["莫桑比克"] = {alias_of = "莫三比克"},
["納米比亞"] = {container = "非洲", wp = "Namibia"},
["尼日"] = {container = "非洲", wp = "Niger"},
["尼日爾"] = {alias_of = "尼日"},
["奈及利亞"] = {container = "非洲", divs = {
{type = "states", cat_as = "states and FCT"},
"local government areas",
}, wp = "Nigeria"},
["尼日利亞"] = {alias_of = "奈及利亞"},
["盧安達"] = {container = "非洲", wp = "Rwanda"},
["盧旺達"] = {alias_of = "盧安達"},
["聖多美和普林西比"] = {container = "非洲", wp = "São Tomé and Príncipe"},
["塞內加爾"] = {container = "非洲", wp = "Senegal"},
["塞席爾"] = {container = "非洲", wp = "Seychelles"},
["塞舌爾"] = {alias_of = "塞席爾"},
["獅子山"] = {container = "非洲", wp = "Sierra Leone"},
["塞拉利昂"] = {alias_of = "獅子山"},
["索馬利亞"] = {container = "非洲", wp = "Somalia"},
["索馬里"] = {alias_of = "索馬利亞"},
["南非"] = {container = "非洲", divs = {"provinces"}, wp = "South Africa"},
["南蘇丹"] = {container = "非洲", wp = "South Sudan"},
["蘇丹"] = {container = "非洲", wp = "Sudan"},
["坦尚尼亞"] = {container = "非洲", wp = "Tanzania"},
["坦桑尼亞"] = {alias_of = "坦尚尼亞"},
["多哥"] = {container = "非洲", wp = "Togo"},
["突尼西亞"] = {container = "非洲", wp = "Tunisia"},
["突尼斯"] = {alias_of = "突尼西亞"},
["烏干達"] = {container = "非洲", wp = "Uganda"},
["尚比亞"] = {container = "非洲", wp = "Zambia"},
["贊比亞"] = {alias_of = "尚比亞"},
["辛巴威"] = {container = "非洲", wp = "Zimbabwe"},
["津巴布韋"] = {alias_of = "辛巴威"},
-- Asia
["阿富汗"] = {container = "亞洲", wp = "Afghanistan"},
["亞美尼亞"] = {container = {"歐洲", "亞洲"}, wp = "Armenia"},
["亞塞拜然"] = {container = {"歐洲", "亞洲"}, wp = "Azerbaijan"},
["阿塞拜疆"] = {alias_of = "亞塞拜然"},
["巴林"] = {container = "亞洲", wp = "Bahrain"},
["孟加拉"] = {container = "亞洲", divs = {"divisions", "districts"}, wp = "Bangladesh"},
["孟加拉國"] = {alias_of = "孟加拉"},
["不丹"] = {container = "亞洲", wp = "Bhutan"},
["汶萊"] = {container = "亞洲", wp = "Brunei"},
["文萊"] = {alias_of = "汶萊"},
["柬埔寨"] = {container = "亞洲", wp = "Cambodia"},
["中國"] = {container = "亞洲", divs = {
{type = "provinces", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "autonomous regions", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "direct-administered municipalities", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "special administrative regions", cat_as = "special administrative regions"},
}, wp = "China"},
["東帝汶"] = {container = "亞洲", wp = "East Timor"},
["帝汶島"] = {alias_of = "東帝汶"},
["印度"] = {container = "亞洲", divs = {
{type = "states", cat_as = "states and union territories"},
{type = "union territories", cat_as = "states and union territories"},
}, wp = "India"},
["印度尼西亞"] = {container = "亞洲", divs = {"provinces"}, wp = "Indonesia"},
["印尼"] = {alias_of = "印度尼西亞"},
["伊朗"] = {container = "亞洲", wp = "Iran"},
["伊拉克"] = {container = "亞洲", wp = "Iraq"},
["以色列"] = {container = "亞洲", wp = "Israel"},
["日本"] = {container = "亞洲", divs = {"prefectures"}, wp = "Japan"},
["約旦"] = {container = "亞洲", wp = "Jordan"},
["哈薩克"] = {container = {"歐洲", "亞洲"}, wp = "Kazakhstan"},
["哈薩克斯坦"] = {alias_of = "哈薩克"},
["北韓"] = {container = "亞洲", wp = "North Korea"},
["朝鮮"] = {alias_of = "北韓"},
["南韓"] = {container = "亞洲", divs = {"provinces", "special cities", "metropolitan cities"}, wp = "South Korea"},
["韓國"] = {alias_of = "南韓"},
["科威特"] = {container = "亞洲", wp = "Kuwait"},
["吉爾吉斯"] = {container = "亞洲", wp = "Kyrgyzstan"},
["吉爾吉斯斯坦"] = {alias_of = "吉爾吉斯"},
["寮國"] = {container = "亞洲", wp = "Laos"},
["老撾"] = {alias_of = "寮國"},
["黎巴嫩"] = {container = "亞洲", wp = "Lebanon"},
["馬來西亞"] = {container = "亞洲", divs = {"states"}, wp = "Malaysia"},
["馬爾地夫"] = {container = "亞洲", wp = "Maldives"},
["馬爾代夫"] = {alias_of = "馬爾地夫"},
["蒙古"] = {container = "亞洲", wp = "Mongolia"},
["緬甸"] = {container = "亞洲", wp = "Myanmar"},
["尼泊爾"] = {container = "亞洲", wp = "Nepal"},
["阿曼"] = {container = "亞洲", wp = "Oman"},
["巴基斯坦"] = {container = "亞洲", divs = {"provinces"}, wp = "Pakistan"},
["菲律賓"] = {container = "亞洲", divs = {"regions"}, wp = "Philippines"},
["菲律宾"] = {alias_of = "菲律賓"},
["卡達"] = {container = "亞洲", wp = "Qatar"},
["卡塔爾"] = {alias_of = "卡達"},
["俄羅斯"] = {container = {"歐洲", "亞洲"}, divs = {"federal subjects"}, wp = "Russia"},
["俄國"] = {alias_of = "俄羅斯"},
["沙烏地阿拉伯"] = {container = "亞洲", wp = "Saudi Arabia"},
["沙特阿拉伯"] = {alias_of = "沙烏地阿拉伯"},
["新加坡"] = {container = "亞洲", is_city = true, wp = "Singapore"},
["斯里蘭卡"] = {container = "亞洲", wp = "Sri Lanka"},
["敘利亞"] = {container = "亞洲", wp = "Syria"},
["叙利亞"] = {alias_of = "敘利亞"},
["臺灣"] = {container = "亞洲", divs = {
{type = "special municipalities", cat_as = "special municipalities and counties"},
{type = "counties", cat_as = "special municipalities and counties"},
}, wp = "Taiwan"},
["台灣"] = {alias_of = "臺灣"},
["塔吉克"] = {container = "亞洲", wp = "Tajikistan"},
["塔吉克斯坦"] = {alias_of = "塔吉克"},
["泰國"] = {container = "亞洲", divs = {"provinces"}, wp = "Thailand"},
["泰国"] = {alias_of = "泰國"},
["土耳其"] = {container = {"歐洲", "亞洲"}, wp = "Turkey"},
["土庫曼"] = {container = "亞洲", wp = "Turkmenistan"},
["土庫曼斯坦"] = {alias_of = "土庫曼"},
["阿拉伯聯合大公國"] = {container = "亞洲", wp = "United Arab Emirates"},
["阿聯酋"] = {alias_of = "阿拉伯聯合大公國"},
["烏茲別克"] = {container = "亞洲", wp = "Uzbekistan"},
["烏茲別克斯坦"] = {alias_of = "烏茲別克"},
["越南"] = {container = "亞洲", divs = {"provinces", "municipalities"}, wp = "Vietnam"},
["葉門"] = {container = "亞洲", wp = "Yemen"},
["也門"] = {alias_of = "葉門"},
-- Europe
["阿爾巴尼亞"] = {container = "歐洲", wp = "Albania"},
["安道爾"] = {container = "歐洲", wp = "Andorra"},
["奧地利"] = {container = "歐洲", divs = {"states"}, wp = "Austria"},
["白俄羅斯"] = {container = "歐洲", divs = {"regions"}, wp = "Belarus"},
["比利時"] = {container = "歐洲", divs = {"regions", "provinces"}, wp = "Belgium"},
["波士尼亞與赫塞哥維納"] = {container = "歐洲", wp = "Bosnia and Herzegovina"},
["波斯尼亞和黑塞哥維那"] = {alias_of = "波士尼亞與赫塞哥維納"},
["保加利亞"] = {container = "歐洲", wp = "Bulgaria"},
["克羅埃西亞"] = {container = "歐洲", wp = "Croatia"},
["克羅地亞"] = {alias_of = "克羅埃西亞"},
["賽普勒斯"] = {container = "亞洲", addl_parents = {"歐洲"}, wp = "Cyprus"},
["塞浦路斯"] = {alias_of = "賽普勒斯"},
["捷克"] = {container = "歐洲", wp = "Czech Republic"},
["丹麥"] = {container = "歐洲", wp = "Denmark"},
["愛沙尼亞"] = {container = "歐洲", wp = "Estonia"},
["芬蘭"] = {container = "歐洲", divs = {"regions"}, wp = "Finland"},
["法國"] = {container = "歐洲", divs = {
{type = "regions", cat_as = "metropolitan regions"},
"departments",
"communes",
}, wp = "France"},
["格魯吉亞"] = {container = {"歐洲", "亞洲"}, wp = "Georgia (country)"},
["喬治亞"] = {alias_of = "格魯吉亞"},
["德國"] = {container = "歐洲", divs = {"states"}, wp = "Germany"},
["希臘"] = {container = "歐洲", divs = {"regions"}, wp = "Greece"},
["匈牙利"] = {container = "歐洲", wp = "Hungary"},
["冰島"] = {container = "歐洲", wp = "Iceland"},
["愛爾蘭"] = {container = "歐洲", divs = {"provinces", "counties"}, wp = "Ireland"},
["意大利"] = {container = "歐洲", divs = {"regions"}, wp = "Italy"},
["義大利"] = {alias_of = "意大利"},
["科索沃"] = {container = "歐洲", wp = "Kosovo"},
["拉脫維亞"] = {container = "歐洲", wp = "Latvia"},
["拉托維亞"] = {alias_of = "拉脫維亞"},
["列支敦斯登"] = {container = "歐洲", wp = "Liechtenstein"},
["立陶宛"] = {container = "歐洲", wp = "Lithuania"},
["盧森堡"] = {container = "歐洲", wp = "Luxembourg"},
["北馬其頓"] = {container = "歐洲", wp = "North Macedonia"},
["馬爾他"] = {container = "歐洲", wp = "Malta"},
["馬耳他"] = {alias_of = "馬爾他"},
["摩爾多瓦"] = {container = "歐洲", wp = "Moldova"},
["摩納哥"] = {container = "歐洲", is_city = true, wp = "Monaco"},
["蒙特內哥羅"] = {container = "歐洲", wp = "Montenegro"},
["黑山"] = {alias_of = "蒙特內哥羅"},
["荷蘭"] = {container = "歐洲", divs = {"provinces"}, wp = "Netherlands"},
["尼德蘭"] = {alias_of = "荷蘭"},
["挪威"] = {container = "歐洲", wp = "Norway"},
["波蘭"] = {container = "歐洲", divs = {"voivodeships"}, wp = "Poland"},
["葡萄牙"] = {container = "歐洲", divs = {"districts"}, wp = "Portugal"},
["羅馬尼亞"] = {container = "歐洲", wp = "Romania"},
["聖馬利諾"] = {container = "歐洲", wp = "San Marino"},
["塞爾維亞"] = {container = "歐洲", wp = "Serbia"},
["斯洛伐克"] = {container = "歐洲", wp = "Slovakia"},
["斯洛維尼亞"] = {container = "歐洲", wp = "Slovenia"},
["斯洛文尼亞"] = {alias_of = "斯洛維尼亞"},
["西班牙"] = {container = "歐洲", divs = {"autonomous communities"}, wp = "Spain"},
["瑞典"] = {container = "歐洲", wp = "Sweden"},
["瑞士"] = {container = "歐洲", divs = {"cantons"}, wp = "Switzerland"},
["烏克蘭"] = {container = "歐洲", divs = {"oblasts"}, wp = "Ukraine"},
["英國"] = {container = "歐洲", divs = {
{type = "constituent countries", cat_as = "constituent countries"},
}, wp = "United Kingdom"},
-- North America
["加拿大"] = {container = "北美洲", divs = {
{type = "provinces", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
}, wp = "Canada"},
["墨西哥"] = {container = "北美洲", divs = {"states"}, wp = "Mexico"},
["美國"] = {container = "北美洲", divs = {"states"}, wp = "United States"},
-- Central America
["貝里斯"] = {container = "中美洲", wp = "Belize"},
["伯利茲"] = {alias_of = "貝里斯"},
["哥斯大黎加"] = {container = "中美洲", wp = "Costa Rica"},
["哥斯達黎加"] = {alias_of = "哥斯大黎加"},
["薩爾瓦多"] = {container = "中美洲", wp = "El Salvador"},
["瓜地馬拉"] = {container = "中美洲", wp = "Guatemala"},
["危地馬拉"] = {alias_of = "瓜地馬拉"},
["宏都拉斯"] = {container = "中美洲", wp = "Honduras"},
["洪都拉斯"] = {alias_of = "宏都拉斯"},
["尼加拉瓜"] = {container = "中美洲", wp = "Nicaragua"},
["巴拿馬"] = {container = "中美洲", wp = "Panama"},
-- Caribbean
["安地卡及巴布達"] = {container = "加勒比地區", wp = "Antigua and Barbuda"},
["安提瓜和巴布達"] = {alias_of = "安地卡及巴布達"},
["巴哈馬"] = {container = "加勒比地區", wp = "Bahamas"},
["巴貝多"] = {container = "加勒比地區", wp = "Barbados"},
["巴巴多斯"] = {alias_of = "巴貝多"},
["古巴"] = {container = "加勒比地區", wp = "Cuba"},
["多米尼克"] = {container = "加勒比地區", wp = "Dominica"},
["多明尼加共和國"] = {container = "加勒比地區", wp = "Dominican Republic"},
["格瑞那達"] = {container = "加勒比地區", wp = "Grenada"},
["格林納達"] = {alias_of = "格瑞那達"},
["海地"] = {container = "加勒比地區", wp = "Haiti"},
["牙買加"] = {container = "加勒比地區", wp = "Jamaica"},
["牙买加"] = {alias_of = "牙買加"},
["聖克里斯多福及尼維斯"] = {container = "加勒比地區", wp = "Saint Kitts and Nevis"},
["聖基茨和尼維斯"] = {alias_of = "聖克里斯多福及尼維斯"},
["聖露西亞"] = {container = "加勒比地區", wp = "Saint Lucia"},
["聖文森及格瑞那丁"] = {container = "加勒比地區", wp = "Saint Vincent and the Grenadines"},
["千里達及托巴哥"] = {container = "加勒比地區", wp = "Trinidad and Tobago"},
["特立尼達和多巴哥"] = {alias_of = "千里達及托巴哥"},
-- South America
["阿根廷"] = {container = "南美洲", divs = {"provinces"}, wp = "Argentina"},
["玻利維亞"] = {container = "南美洲", wp = "Bolivia"},
["玻利维亚"] = {alias_of = "玻利維亞"},
["巴西"] = {container = "南美洲", divs = {"states"}, wp = "Brazil"},
["智利"] = {container = "南美洲", wp = "Chile"},
["哥倫比亞"] = {container = "南美洲", wp = "Colombia"},
["哥伦比亚"] = {alias_of = "哥倫比亞"},
["厄瓜多"] = {container = "南美洲", wp = "Ecuador"},
["厄瓜多爾"] = {alias_of = "厄瓜多"},
["蓋亞那"] = {container = "南美洲", wp = "Guyana"},
["圭亞那"] = {alias_of = "蓋亞那"},
["巴拉圭"] = {container = "南美洲", wp = "Paraguay"},
["秘魯"] = {container = "南美洲", wp = "Peru"},
["秘鲁"] = {alias_of = "秘魯"},
["蘇利南"] = {container = "南美洲", wp = "Suriname"},
["蘇里南"] = {alias_of = "蘇利南"},
["烏拉圭"] = {container = "南美洲", wp = "Uruguay"},
["委內瑞拉"] = {container = "南美洲", wp = "Venezuela"},
["委内瑞拉"] = {alias_of = "委內瑞拉"},
-- Oceania
["澳大利亞"] = {container = "大洋洲", divs = {
{type = "states", cat_as = "states and territories"},
{type = "territories", cat_as = "states and territories"},
}, wp = "Australia"},
["澳洲"] = {alias_of = "澳大利亞"},
["斐濟"] = {container = "大洋洲", wp = "Fiji"},
["吉里巴斯"] = {container = "大洋洲", wp = "Kiribati"},
["馬紹爾群島"] = {container = "大洋洲", wp = "Marshall Islands"},
["密克羅尼西亞聯邦"] = {container = "大洋洲", wp = "Federated States of Micronesia"},
["諾魯"] = {container = "大洋洲", wp = "Nauru"},
["瑙魯"] = {alias_of = "諾魯"},
["紐西蘭"] = {container = "大洋洲", wp = "New Zealand"},
["新西蘭"] = {alias_of = "紐西蘭"},
["帛琉"] = {container = "大洋洲", wp = "Palau"},
["帕勞"] = {alias_of = "帛琉"},
["巴布亞紐幾內亞"] = {container = "大洋洲", wp = "Papua New Guinea"},
["巴布亚新几内亚"] = {alias_of = "巴布亞紐幾內亞"},
["薩摩亞"] = {container = "大洋洲", wp = "Samoa"},
["萨摩亚"] = {alias_of = "薩摩亞"},
["所羅門群島"] = {container = "大洋洲", wp = "Solomon Islands"},
["東加"] = {container = "大洋洲", wp = "Tonga"},
["湯加"] = {alias_of = "東加"},
["吐瓦魯"] = {container = "大洋洲", wp = "Tuvalu"},
["圖瓦盧"] = {alias_of = "吐瓦魯"},
["萬那杜"] = {container = "大洋洲", wp = "Vanuatu"},
["瓦努阿圖"] = {alias_of = "萬那杜"},
}
export.countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_overriding_bare_label_parents = {"+++", "countries"},
default_placetype = "country",
default_no_container_cat = true,
default_no_container_parent = true,
default_no_auto_augment_container = true,
placename_to_key = false,
data = export.countries,
}
-----------------------------------------------------------------------------------
-- Country-like entities --
-----------------------------------------------------------------------------------
export.country_like_entities = {
-- Special administrative regions of China
["香港"] = {
placetype = {"special administrative region", "region"},
container = "中國",
addl_parents = {"亞洲"},
is_city = true,
divs = {"districts"},
wp = "Hong Kong",
},
["澳門"] = {
placetype = {"special administrative region", "region"},
container = "中國",
addl_parents = {"亞洲"},
is_city = true,
wp = "Macau",
},
-- Western Sahara
["西撒哈拉"] = {
placetype = {"territory", "country"},
container = "非洲",
wp = "Western Sahara",
},
-- Kosovo (disputed)
["科索沃(部分承認)"] = {alias_of = "科索沃"},
-- Palestinian territories
["巴勒斯坦"] = {
placetype = {"country", "territory"},
container = "亞洲",
wp = "State of Palestine",
},
-- Key overseas territories
["波多黎各"] = {
placetype = {"commonwealth", "territory"},
container = "美國",
addl_parents = {"加勒比地區"},
wp = "Puerto Rico",
},
["關島"] = {
placetype = {"territory"},
container = "美國",
addl_parents = {"密克羅尼西亞"},
wp = "Guam",
},
["新喀里多尼亞"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"大洋洲"},
wp = "New Caledonia",
},
["法屬圭亞那"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"南美洲"},
wp = "French Guiana",
},
["留尼旺"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"非洲"},
wp = "Réunion",
},
["馬丁尼克"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"加勒比地區"},
wp = "Martinique",
},
["瓜德羅普"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"加勒比地區"},
wp = "Guadeloupe",
},
["格陵蘭"] = {
placetype = {"territory"},
container = "丹麥",
addl_parents = {"北美洲"},
wp = "Greenland",
},
["法羅群島"] = {
placetype = {"territory"},
container = "丹麥",
addl_parents = {"歐洲"},
wp = "Faroe Islands",
},
}
export.country_like_entities_group = {
canonicalize_key_container = make_canonicalize_key_container(nil, "country"),
default_placetype = "territory",
placename_to_key = false,
data = export.country_like_entities,
}
-----------------------------------------------------------------------------------
-- Former countries --
-----------------------------------------------------------------------------------
export.former_countries = {
["蘇聯"] = {
placetype = {"country"},
container = {"歐洲", "亞洲"},
is_former_place = true,
wp = "Soviet Union",
},
["南斯拉夫"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Yugoslavia",
},
["捷克斯洛伐克"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Czechoslovakia",
},
["東德"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "East Germany",
},
["西德"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "West Germany",
},
["奧匈帝國"] = {
placetype = {"empire"},
container = "歐洲",
is_former_place = true,
wp = "Austria-Hungary",
},
["鄂圖曼帝國"] = {
placetype = {"empire"},
container = {"歐洲", "亞洲"},
is_former_place = true,
wp = "Ottoman Empire",
},
["奧斯曼帝國"] = {alias_of = "鄂圖曼帝國"},
["羅馬帝國"] = {
placetype = {"empire"},
container = {"歐洲", "亞洲", "非洲"},
is_former_place = true,
wp = "Roman Empire",
},
["大英帝國"] = {
placetype = {"empire"},
is_former_place = true,
wp = "British Empire",
},
["普魯士"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Prussia",
},
}
export.former_countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_placetype = "country",
default_is_former_place = true,
placename_to_key = false,
data = export.former_countries,
}
-----------------------------------------------------------------------------------
-- United States states --
-----------------------------------------------------------------------------------
export.united_states_states = {
["阿拉巴馬"] = {wp = "Alabama"},
["阿拉斯加"] = {wp = "Alaska"},
["亞利桑那"] = {wp = "Arizona"},
["阿肯色"] = {wp = "Arkansas"},
["加利福尼亞"] = {wp = "California"},
["加州"] = {alias_of = "加利福尼亞"},
["科羅拉多"] = {wp = "Colorado"},
["康乃狄克"] = {wp = "Connecticut"},
["康涅狄格"] = {alias_of = "康乃狄克"},
["德拉瓦"] = {wp = "Delaware"},
["佛羅里達"] = {wp = "Florida"},
["佛罗里达"] = {alias_of = "佛羅里達"},
["佐治亞"] = {wp = "Georgia (U.S. state)"},
["夏威夷"] = {addl_parents = {"玻里尼西亞"}, wp = "Hawaii"},
["愛達荷"] = {wp = "Idaho"},
["伊利諾伊"] = {wp = "Illinois"},
["伊利诺伊"] = {alias_of = "伊利諾伊"},
["印地安那"] = {wp = "Indiana"},
["印第安納"] = {alias_of = "印地安那"},
["愛荷華"] = {wp = "Iowa"},
["堪薩斯"] = {wp = "Kansas"},
["肯塔基"] = {wp = "Kentucky"},
["路易斯安那"] = {wp = "Louisiana"},
["緬因"] = {wp = "Maine"},
["馬里蘭"] = {wp = "Maryland"},
["麻薩諸塞"] = {wp = "Massachusetts"},
["麻薩诸塞"] = {alias_of = "麻薩諸塞"},
["密西根"] = {wp = "Michigan"},
["密歇根"] = {alias_of = "密西根"},
["明尼蘇達"] = {wp = "Minnesota"},
["明尼苏达"] = {alias_of = "明尼蘇達"},
["密西西比"] = {wp = "Mississippi"},
["密蘇里"] = {wp = "Missouri"},
["蒙大拿"] = {wp = "Montana"},
["內布拉斯加"] = {wp = "Nebraska"},
["內華達"] = {wp = "Nevada"},
["新罕布什爾"] = {wp = "New Hampshire"},
["新澤西"] = {wp = "New Jersey"},
["新泽西"] = {alias_of = "新澤西"},
["新墨西哥"] = {wp = "New Mexico"},
["紐約"] = {wp = "New York (state)"},
["纽约"] = {alias_of = "紐約"},
["北卡羅來納"] = {wp = "North Carolina"},
["北达科他"] = {alias_of = "北達科他"},
["北達科他"] = {wp = "North Dakota"},
["俄亥俄"] = {wp = "Ohio"},
["奧克拉荷馬"] = {wp = "Oklahoma"},
["奧勒岡"] = {wp = "Oregon"},
["俄勒冈"] = {alias_of = "奧勒岡"},
["賓夕法尼亞"] = {wp = "Pennsylvania"},
["宾夕法尼亚"] = {alias_of = "賓夕法尼亞"},
["羅德島"] = {wp = "Rhode Island"},
["南卡羅來納"] = {wp = "South Carolina"},
["南達科他"] = {wp = "South Dakota"},
["田納西"] = {wp = "Tennessee"},
["田纳西"] = {alias_of = "田納西"},
["德克薩斯"] = {wp = "Texas"},
["德州"] = {alias_of = "德克薩斯"},
["猶他"] = {wp = "Utah"},
["佛蒙特"] = {wp = "Vermont"},
["弗吉尼亞"] = {wp = "Virginia"},
["弗吉尼亚"] = {alias_of = "弗吉尼亞"},
["維吉尼亞"] = {alias_of = "弗吉尼亞"},
["華盛頓州"] = {wp = "Washington (state)"},
["华盛顿州"] = {alias_of = "華盛頓州"},
["西維吉尼亞"] = {wp = "West Virginia"},
["西弗吉尼亞"] = {alias_of = "西維吉尼亞"},
["威斯康辛"] = {wp = "Wisconsin"},
["懷俄明"] = {wp = "Wyoming"},
-- Washington D.C. (federal district, treated like a state in holonym context)
["華盛頓特區"] = {placetype = {"federal district", "district"}, wp = "Washington, D.C."},
}
export.united_states_group = {
placename_to_key = false,
default_container = "美國",
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,
}
-----------------------------------------------------------------------------------
-- United Kingdom constituent countries --
-----------------------------------------------------------------------------------
export.united_kingdom_constituent_countries = {
["英格蘭"] = {divs = {"counties", "districts"}, wp = "England"},
["北愛爾蘭"] = {
placetype = {"constituent country", "province", "country"},
divs = {"counties", "districts"},
wp = "Northern Ireland",
},
["蘇格蘭"] = {divs = {{type = "council areas", container_parent_type = false}}, wp = "Scotland"},
["威爾斯"] = {divs = {"counties"}, wp = "Wales"},
["威尔士"] = {alias_of = "威爾斯"},
}
export.united_kingdom_group = {
placename_to_key = false,
default_container = "英國",
default_placetype = {"constituent country", "country"},
default_no_container_cat = true,
data = export.united_kingdom_constituent_countries,
}
-- Scotland council areas
export.scotland_council_areas = {
["Aberdeen市"] = {wp = "Aberdeen"},
["Aberdeenshire"] = {wp = "Aberdeenshire"},
["Angus"] = {wp = "Angus, Scotland"},
["Argyll and Bute"] = {wp = "Argyll and Bute"},
["Clackmannanshire"] = {wp = "Clackmannanshire"},
["Dumfries and Galloway"] = {wp = "Dumfries and Galloway"},
["Dundee市"] = {wp = "Dundee"},
["East Ayrshire"] = {wp = "East Ayrshire"},
["East Dunbartonshire"] = {wp = "East Dunbartonshire"},
["East Lothian"] = {wp = "East Lothian"},
["East Renfrewshire"] = {wp = "East Renfrewshire"},
["Edinburgh市"] = {wp = "Edinburgh"},
["Eilean Siar"] = {wp = "Outer Hebrides"},
["Falkirk"] = {wp = "Falkirk"},
["Fife"] = {wp = "Fife"},
["Glasgow市"] = {wp = "Glasgow"},
["Highland"] = {wp = "Highland council area"},
["Inverclyde"] = {wp = "Inverclyde"},
["Midlothian"] = {wp = "Midlothian"},
["Moray"] = {wp = "Moray"},
["North Ayrshire"] = {wp = "North Ayrshire"},
["North Lanarkshire"] = {wp = "North Lanarkshire"},
["Orkney群島"] = {wp = "Orkney"},
["Perth and Kinross"] = {wp = "Perth and Kinross"},
["Renfrewshire"] = {wp = "Renfrewshire"},
["Scottish Borders"] = {wp = "Scottish Borders"},
["Shetland群島"] = {wp = "Shetland"},
["South Ayrshire"] = {wp = "South Ayrshire"},
["South Lanarkshire"] = {wp = "South Lanarkshire"},
["Stirling"] = {wp = "Stirling (council area)"},
["West Dunbartonshire"] = {wp = "West Dunbartonshire"},
["West Lothian"] = {wp = "West Lothian"},
}
export.scotland_group = {
placename_to_key = false,
default_container = "蘇格蘭",
default_placetype = "council area",
data = export.scotland_council_areas,
}
-- England counties (selected)
export.england_counties = {
["德文郡"] = {wp = "Devon"},
["薩默塞特郡"] = {wp = "Somerset"},
["肯特郡"] = {wp = "Kent"},
["薩里郡"] = {wp = "Surrey"},
["埃塞克斯郡"] = {wp = "Essex"},
["約克郡"] = {wp = "Yorkshire"},
["蘭開夏郡"] = {wp = "Lancashire"},
["諾福克郡"] = {wp = "Norfolk"},
}
export.england_group = {
placename_to_key = false,
default_container = "英格蘭",
default_placetype = "county",
data = export.england_counties,
}
-- Northern Ireland counties (stub table required by place-placetypes.lua)
export.northern_ireland_counties = {}
export.northern_ireland_group = {
placename_to_key = false,
default_container = "北愛爾蘭",
default_placetype = "county",
data = export.northern_ireland_counties,
}
-- Ireland counties (stub table required by place-placetypes.lua)
export.ireland_counties = {}
export.ireland_group = {
placename_to_key = false,
default_container = "愛爾蘭",
default_placetype = "county",
data = export.ireland_counties,
}
-----------------------------------------------------------------------------------
-- China provinces --
-----------------------------------------------------------------------------------
export.china_provinces = {
-- Provinces
["安徽"] = {wp = "Anhui"},
["福建"] = {wp = "Fujian"},
["甘肅"] = {wp = "Gansu"},
["廣東"] = {wp = "Guangdong"},
["貴州"] = {wp = "Guizhou"},
["海南"] = {wp = "Hainan"},
["河北"] = {wp = "Hebei"},
["黑龍江"] = {wp = "Heilongjiang"},
["河南"] = {wp = "Henan"},
["湖北"] = {wp = "Hubei"},
["湖南"] = {wp = "Hunan"},
["江蘇"] = {wp = "Jiangsu"},
["江西"] = {wp = "Jiangxi"},
["吉林"] = {wp = "Jilin"},
["遼寧"] = {wp = "Liaoning"},
["青海"] = {wp = "Qinghai"},
["陝西"] = {wp = "Shaanxi"},
["山東"] = {wp = "Shandong"},
["山西"] = {wp = "Shanxi"},
["四川"] = {wp = "Sichuan"},
["雲南"] = {wp = "Yunnan"},
["浙江"] = {wp = "Zhejiang"},
-- Autonomous regions
["廣西壯族自治區"] = {placetype = "autonomous region", wp = "Guangxi"},
["廣西"] = {alias_of = "廣西壯族自治區"},
["內蒙古自治區"] = {placetype = "autonomous region", wp = "Inner Mongolia"},
["內蒙古"] = {alias_of = "內蒙古自治區"},
["寧夏回族自治區"] = {placetype = "autonomous region", wp = "Ningxia"},
["寧夏"] = {alias_of = "寧夏回族自治區"},
["西藏自治區"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"},
["西藏"] = {alias_of = "西藏自治區"},
["新疆維吾爾自治區"] = {placetype = "autonomous region", wp = "Xinjiang"},
["新疆"] = {alias_of = "新疆維吾爾自治區"},
-- Direct-administered municipalities (treated as province-level for holonym purposes)
["北京"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Beijing"},
["北京市"] = {alias_of = "北京"},
["上海"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Shanghai"},
["上海市"] = {alias_of = "上海"},
["天津"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Tianjin"},
["天津市"] = {alias_of = "天津"},
["重慶"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Chongqing"},
["重慶市"] = {alias_of = "重慶"},
}
export.china_group = {
placename_to_key = false,
default_container = "中國",
default_placetype = "province",
default_divs = {
"prefecture-level cities",
"districts",
{type = "counties", cat_as = "counties and county-level cities"},
{type = "county-level cities", cat_as = "counties and county-level cities"},
},
data = export.china_provinces,
}
-----------------------------------------------------------------------------------
-- Taiwan counties --
-----------------------------------------------------------------------------------
-- Note: In zhwikt, Taiwan county keys use Chinese names directly.
-- The enwikt-style lookup `taiwan_counties["Chiayi County, Taiwan"]` will return nil
-- (correct: no English suffix auto-detection for Chinese holonym names).
export.taiwan_counties = {
["彰化縣"] = {wp = "Changhua County"},
["嘉義縣"] = {wp = "Chiayi County"},
["新竹縣"] = {wp = "Hsinchu County"},
["花蓮縣"] = {wp = "Hualien County"},
["金門縣"] = {wp = "Kinmen County"},
["連江縣"] = {wp = "Lienchiang County"},
["苗栗縣"] = {wp = "Miaoli County"},
["南投縣"] = {wp = "Nantou County"},
["澎湖縣"] = {wp = "Penghu County"},
["屏東縣"] = {wp = "Pingtung County"},
["臺東縣"] = {wp = "Taitung County"},
["宜蘭縣"] = {wp = "Yilan County"},
["雲林縣"] = {wp = "Yunlin County"},
-- Special municipalities (province-level)
["臺北市"] = {placetype = "special municipality", wp = "Taipei"},
["新北市"] = {placetype = "special municipality", wp = "New Taipei"},
["桃園市"] = {placetype = "special municipality", wp = "Taoyuan City"},
["臺中市"] = {placetype = "special municipality", wp = "Taichung"},
["臺南市"] = {placetype = "special municipality", wp = "Tainan"},
["高雄市"] = {placetype = "special municipality", wp = "Kaohsiung"},
["嘉義市"] = {placetype = "city", wp = "Chiayi City"},
["新竹市"] = {placetype = "city", wp = "Hsinchu City"},
["基隆市"] = {placetype = "city", wp = "Keelung"},
}
export.taiwan_group = {
placename_to_key = false,
default_container = "臺灣",
default_placetype = "county",
default_divs = {"districts", "townships"},
data = export.taiwan_counties,
}
-----------------------------------------------------------------------------------
-- Canada provinces and territories --
-----------------------------------------------------------------------------------
export.canada_provinces_and_territories = {
["亞伯達"] = {wp = "Alberta"},
["艾伯塔"] = {alias_of = "亞伯達"},
["英屬哥倫比亞"] = {wp = "British Columbia"},
["卑詩省"] = {alias_of = "英屬哥倫比亞"},
["馬尼托巴"] = {wp = "Manitoba"},
["新不倫瑞克"] = {wp = "New Brunswick"},
["紐芬蘭與拉布拉多"] = {wp = "Newfoundland and Labrador"},
["西北地區"] = {placetype = "territory", wp = "Northwest Territories"},
["新斯科舍"] = {wp = "Nova Scotia"},
["努納武特"] = {placetype = "territory", wp = "Nunavut"},
["安大略"] = {divs = {"counties", "regional municipalities"}, wp = "Ontario"},
["愛德華王子島"] = {wp = "Prince Edward Island"},
["魁北克"] = {wp = "Quebec"},
["薩斯喀徹溫"] = {wp = "Saskatchewan"},
["育空"] = {placetype = "territory", wp = "Yukon"},
}
export.canada_group = {
placename_to_key = false,
default_container = "加拿大",
default_placetype = "province",
data = export.canada_provinces_and_territories,
}
-----------------------------------------------------------------------------------
-- Australia states and territories --
-----------------------------------------------------------------------------------
export.australia_states_and_territories = {
["新南威爾斯"] = {wp = "New South Wales"},
["維多利亞州"] = {wp = "Victoria (Australia)"},
["昆士蘭"] = {wp = "Queensland"},
["南澳大利亞"] = {wp = "South Australia"},
["西澳大利亞"] = {wp = "Western Australia"},
["塔斯馬尼亞"] = {wp = "Tasmania"},
["澳大利亞首都領地"] = {placetype = "territory", wp = "Australian Capital Territory"},
["北領地"] = {placetype = "territory", wp = "Northern Territory"},
}
export.australia_group = {
placename_to_key = false,
default_container = "澳大利亞",
default_placetype = "state",
data = export.australia_states_and_territories,
}
-----------------------------------------------------------------------------------
-- India states and union territories --
-----------------------------------------------------------------------------------
export.india_states_and_union_territories = {
["安達曼-尼科巴群島"] = {placetype = "union territory", wp = "Andaman and Nicobar Islands"},
["安得拉邦"] = {wp = "Andhra Pradesh"},
["阿魯納恰爾邦"] = {wp = "Arunachal Pradesh"},
["阿薩姆"] = {wp = "Assam"},
["比哈爾邦"] = {wp = "Bihar"},
["昌迪加爾"] = {placetype = "union territory", wp = "Chandigarh"},
["恰蒂斯加爾邦"] = {wp = "Chhattisgarh"},
["達德拉-納加爾哈維利和達曼-第烏"] = {placetype = "union territory", wp = "Dadra and Nagar Haveli and Daman and Diu"},
["德里"] = {placetype = "union territory", wp = "Delhi"},
["果阿"] = {wp = "Goa"},
["古吉拉特邦"] = {wp = "Gujarat"},
["哈里亞納邦"] = {wp = "Haryana"},
["喜馬偕爾邦"] = {wp = "Himachal Pradesh"},
["查謨和克什米爾"] = {placetype = "union territory", wp = "Jammu and Kashmir (union territory)"},
["賈坎德邦"] = {wp = "Jharkhand"},
["卡納塔克邦"] = {wp = "Karnataka"},
["喀拉拉邦"] = {wp = "Kerala"},
["拉達克"] = {placetype = "union territory", wp = "Ladakh"},
["拉克沙群島"] = {placetype = "union territory", wp = "Lakshadweep"},
["中央邦"] = {wp = "Madhya Pradesh"},
["馬哈拉施特拉邦"] = {wp = "Maharashtra"},
["曼尼普爾邦"] = {wp = "Manipur"},
["梅加拉亞邦"] = {wp = "Meghalaya"},
["米佐拉姆邦"] = {wp = "Mizoram"},
["那加蘭邦"] = {wp = "Nagaland"},
["奧里薩邦"] = {wp = "Odisha"},
["本地治里"] = {placetype = "union territory", wp = "Puducherry"},
["旁遮普邦"] = {wp = "Punjab, India"},
["拉賈斯坦邦"] = {wp = "Rajasthan"},
["錫金"] = {wp = "Sikkim"},
["泰米爾納德邦"] = {wp = "Tamil Nadu"},
["特倫甘納邦"] = {wp = "Telangana"},
["特里普拉邦"] = {wp = "Tripura"},
["北方邦"] = {wp = "Uttar Pradesh"},
["北阿坎德邦"] = {wp = "Uttarakhand"},
["西孟加拉邦"] = {wp = "West Bengal"},
}
export.india_group = {
placename_to_key = false,
default_container = "印度",
default_placetype = "state",
default_divs = {"districts"},
data = export.india_states_and_union_territories,
}
-----------------------------------------------------------------------------------
-- Japan prefectures --
-----------------------------------------------------------------------------------
-- Note: export.japan_prefectures is accessed directly by place-placetypes.lua
-- using English-style keys (e.g. "Tokyo Prefecture, Japan"). Those lookups return
-- nil for Chinese keys, which is correct: no English "Prefecture" suffix is added.
export.japan_prefectures = {
["北海道"] = {placetype = {"prefecture"}, wp = "Hokkaido"},
["青森縣"] = {wp = "Aomori Prefecture"},
["岩手縣"] = {wp = "Iwate Prefecture"},
["宮城縣"] = {wp = "Miyagi Prefecture"},
["秋田縣"] = {wp = "Akita Prefecture"},
["山形縣"] = {wp = "Yamagata Prefecture"},
["福島縣"] = {wp = "Fukushima Prefecture"},
["茨城縣"] = {wp = "Ibaraki Prefecture"},
["栃木縣"] = {wp = "Tochigi Prefecture"},
["群馬縣"] = {wp = "Gunma Prefecture"},
["埼玉縣"] = {wp = "Saitama Prefecture"},
["千葉縣"] = {wp = "Chiba Prefecture"},
["東京都"] = {placetype = {"prefecture"}, wp = "Tokyo"},
["神奈川縣"] = {wp = "Kanagawa Prefecture"},
["新潟縣"] = {wp = "Niigata Prefecture"},
["富山縣"] = {wp = "Toyama Prefecture"},
["石川縣"] = {wp = "Ishikawa Prefecture"},
["福井縣"] = {wp = "Fukui Prefecture"},
["山梨縣"] = {wp = "Yamanashi Prefecture"},
["長野縣"] = {wp = "Nagano Prefecture"},
["岐阜縣"] = {wp = "Gifu Prefecture"},
["靜岡縣"] = {wp = "Shizuoka Prefecture"},
["愛知縣"] = {wp = "Aichi Prefecture"},
["三重縣"] = {wp = "Mie Prefecture"},
["滋賀縣"] = {wp = "Shiga Prefecture"},
["京都府"] = {placetype = {"prefecture"}, wp = "Kyoto Prefecture"},
["大阪府"] = {placetype = {"prefecture"}, wp = "Osaka Prefecture"},
["兵庫縣"] = {wp = "Hyogo Prefecture"},
["奈良縣"] = {wp = "Nara Prefecture"},
["和歌山縣"] = {wp = "Wakayama Prefecture"},
["鳥取縣"] = {wp = "Tottori Prefecture"},
["島根縣"] = {wp = "Shimane Prefecture"},
["岡山縣"] = {wp = "Okayama Prefecture"},
["廣島縣"] = {wp = "Hiroshima Prefecture"},
["山口縣"] = {wp = "Yamaguchi Prefecture"},
["德島縣"] = {wp = "Tokushima Prefecture"},
["香川縣"] = {wp = "Kagawa Prefecture"},
["愛媛縣"] = {wp = "Ehime Prefecture"},
["高知縣"] = {wp = "Kochi Prefecture"},
["福岡縣"] = {wp = "Fukuoka Prefecture"},
["佐賀縣"] = {wp = "Saga Prefecture"},
["長崎縣"] = {wp = "Nagasaki Prefecture"},
["熊本縣"] = {wp = "Kumamoto Prefecture"},
["大分縣"] = {wp = "Oita Prefecture"},
["宮崎縣"] = {wp = "Miyazaki Prefecture"},
["鹿兒島縣"] = {wp = "Kagoshima Prefecture"},
["沖繩縣"] = {wp = "Okinawa Prefecture"},
}
export.japan_group = {
placename_to_key = false,
default_container = "日本",
default_placetype = "prefecture",
default_divs = {"cities", "districts"},
data = export.japan_prefectures,
}
-----------------------------------------------------------------------------------
-- Stub tables required by place-placetypes.lua for suffix-detection lookups --
-- These are accessed as m_locations.X[english_key]; all lookups return nil, --
-- which is correct: Chinese holonyms do not get English suffix auto-detection. --
-----------------------------------------------------------------------------------
export.new_york_boroughs = {}
export.romania_counties = {}
export.bulgaria_provinces = {}
export.iran_provinces = {}
export.laos_provinces = {}
export.north_korea_provinces = {}
export.south_korea_provinces = {}
export.thailand_provinces = {}
export.turkey_provinces = {}
export.vietnam_provinces = {}
export.nigeria_states = {}
-----------------------------------------------------------------------------------
-- Selected city groups --
-----------------------------------------------------------------------------------
-- Key world cities frequently used as holonyms
export.misc_cities = {
-- Americas
["紐約市"] = {container = "紐約", placetype = "city", is_city = true, wp = "New York City"},
["洛杉磯"] = {container = "加利福尼亞", placetype = "city", is_city = true, wp = "Los Angeles"},
["芝加哥"] = {container = "伊利諾伊", placetype = "city", is_city = true, wp = "Chicago"},
["休士頓"] = {container = "德克薩斯", placetype = "city", is_city = true, wp = "Houston"},
["費城"] = {container = "賓夕法尼亞", placetype = "city", is_city = true, wp = "Philadelphia"},
["匹茲堡"] = {container = "賓夕法尼亞", placetype = "city", is_city = true, wp = "Pittsburgh"},
["費爾法克斯"] = {container = "弗吉尼亞", placetype = "city", is_city = true, wp = "Fairfax, Virginia"},
["斯克蘭頓"] = {container = "賓夕法尼亞", placetype = "city", is_city = true, wp = "Scranton, Pennsylvania"},
["多倫多"] = {container = "安大略", placetype = "city", is_city = true, wp = "Toronto"},
["蒙特婁"] = {container = "魁北克", placetype = "city", is_city = true, wp = "Montreal"},
["墨西哥城"] = {container = "墨西哥", placetype = "city", is_city = true, wp = "Mexico City"},
["聖保羅"] = {container = "巴西", placetype = "city", is_city = true, wp = "São Paulo"},
["里約熱內盧市"] = {container = "巴西", placetype = "city", is_city = true, wp = "Rio de Janeiro"},
["布宜諾斯艾利斯"] = {container = "阿根廷", placetype = "city", is_city = true, wp = "Buenos Aires"},
["聖地牙哥"] = {container = "智利", placetype = "city", is_city = true, wp = "Santiago"},
["波哥大"] = {container = "哥倫比亞", placetype = "city", is_city = true, wp = "Bogotá"},
["利馬"] = {container = "秘魯", placetype = "city", is_city = true, wp = "Lima"},
-- Europe
["倫敦"] = {container = "英格蘭", placetype = "city", is_city = true, wp = "London"},
["巴黎"] = {container = "法國", placetype = "city", is_city = true, wp = "Paris"},
["柏林"] = {container = "德國", placetype = "city", is_city = true, wp = "Berlin"},
["馬德里"] = {container = "西班牙", placetype = "city", is_city = true, wp = "Madrid"},
["羅馬"] = {container = "意大利", placetype = "city", is_city = true, wp = "Rome"},
["阿姆斯特丹"] = {container = "荷蘭", placetype = "city", is_city = true, wp = "Amsterdam"},
["布魯塞爾"] = {container = "比利時", placetype = "city", is_city = true, wp = "Brussels"},
["維也納"] = {container = "奧地利", placetype = "city", is_city = true, wp = "Vienna"},
["莫斯科"] = {container = "俄羅斯", placetype = "city", is_city = true, wp = "Moscow"},
["伊斯坦布爾"] = {container = "土耳其", placetype = "city", is_city = true, wp = "Istanbul"},
["基輔"] = {container = "烏克蘭", placetype = "city", is_city = true, wp = "Kyiv"},
["華沙"] = {container = "波蘭", placetype = "city", is_city = true, wp = "Warsaw"},
["布拉格"] = {container = "捷克", placetype = "city", is_city = true, wp = "Prague"},
["布達佩斯"] = {container = "匈牙利", placetype = "city", is_city = true, wp = "Budapest"},
["斯德哥爾摩"] = {container = "瑞典", placetype = "city", is_city = true, wp = "Stockholm"},
["赫爾辛基"] = {container = "芬蘭", placetype = "city", is_city = true, wp = "Helsinki"},
["奧斯陸"] = {container = "挪威", placetype = "city", is_city = true, wp = "Oslo"},
["哥本哈根"] = {container = "丹麥", placetype = "city", is_city = true, wp = "Copenhagen"},
["里斯本"] = {container = "葡萄牙", placetype = "city", is_city = true, wp = "Lisbon"},
["雅典"] = {container = "希臘", placetype = "city", is_city = true, wp = "Athens"},
["蘇黎世"] = {container = "瑞士", placetype = "city", is_city = true, wp = "Zurich"},
["日內瓦"] = {container = "瑞士", placetype = "city", is_city = true, wp = "Geneva"},
["第比利斯"] = {container = "格魯吉亞", placetype = "city", is_city = true, wp = "Tbilisi"},
["貝爾格勒"] = {container = "塞爾維亞", placetype = "city", is_city = true, wp = "Belgrade"},
["薩格勒布"] = {container = "克羅埃西亞", placetype = "city", is_city = true, wp = "Zagreb"},
["愛丁堡"] = {container = "蘇格蘭", placetype = "city", is_city = true, wp = "Edinburgh"},
["格拉斯哥"] = {container = "蘇格蘭", placetype = "city", is_city = true, wp = "Glasgow"},
["都柏林"] = {container = "愛爾蘭", placetype = "city", is_city = true, wp = "Dublin"},
-- Asia
["北京市"] = {container = "北京", placetype = "city", is_city = true, wp = "Beijing"},
["上海市"] = {container = "上海", placetype = "city", is_city = true, wp = "Shanghai"},
["東京"] = {container = "東京都", placetype = "city", is_city = true, wp = "Tokyo"},
["大阪"] = {container = "大阪府", placetype = "city", is_city = true, wp = "Osaka"},
["首爾"] = {container = "南韓", placetype = "city", is_city = true, wp = "Seoul"},
["孟買"] = {container = "馬哈拉施特拉邦", placetype = "city", is_city = true, wp = "Mumbai"},
["德里市"] = {container = "德里", placetype = "city", is_city = true, wp = "Delhi"},
["加爾各答"] = {container = "西孟加拉邦", placetype = "city", is_city = true, wp = "Kolkata"},
["雅加達"] = {container = "印度尼西亞", placetype = "city", is_city = true, wp = "Jakarta"},
["曼谷"] = {container = "泰國", placetype = "city", is_city = true, wp = "Bangkok"},
["吉隆坡"] = {container = "馬來西亞", placetype = "city", is_city = true, wp = "Kuala Lumpur"},
["河內"] = {container = "越南", placetype = "city", is_city = true, wp = "Hanoi"},
["胡志明市"] = {container = "越南", placetype = "city", is_city = true, wp = "Ho Chi Minh City"},
["開羅"] = {container = "埃及", placetype = "city", is_city = true, wp = "Cairo"},
["德黑蘭"] = {container = "伊朗", placetype = "city", is_city = true, wp = "Tehran"},
["利雅得"] = {container = "沙烏地阿拉伯", placetype = "city", is_city = true, wp = "Riyadh"},
["安卡拉"] = {container = "土耳其", placetype = "city", is_city = true, wp = "Ankara"},
-- Oceania
["悉尼"] = {container = "新南威爾斯", placetype = "city", is_city = true, wp = "Sydney"},
["雪梨"] = {alias_of = "悉尼"},
["墨爾本"] = {container = "維多利亞州", placetype = "city", is_city = true, wp = "Melbourne"},
["奧克蘭"] = {container = "紐西蘭", placetype = "city", is_city = true, wp = "Auckland"},
-- Africa
["開普敦"] = {container = "南非", placetype = "city", is_city = true, wp = "Cape Town"},
["約翰尼斯堡"] = {container = "南非", placetype = "city", is_city = true, wp = "Johannesburg"},
["拉各斯"] = {container = "奈及利亞", placetype = "city", is_city = true, wp = "Lagos"},
["奈洛比"] = {container = "肯亞", placetype = "city", is_city = true, wp = "Nairobi"},
}
export.misc_cities_group = {
placename_to_key = false,
default_placetype = "city",
default_is_city = true,
data = export.misc_cities,
}
-----------------------------------------------------------------------------------
-- Brazil states (for testcase coverage) --
-----------------------------------------------------------------------------------
export.brazil_states = {
["里約熱內盧州"] = {wp = "Rio de Janeiro (state)"},
["里約熱內盧"] = {alias_of = "里約熱內盧州"},
["聖保羅州"] = {wp = "São Paulo (state)"},
["米納斯吉拉斯"] = {wp = "Minas Gerais"},
["巴伊亞"] = {wp = "Bahia"},
["亞馬遜州"] = {wp = "Amazonas (Brazilian state)"},
["帕拉州"] = {wp = "Pará"},
}
export.brazil_group = {
placename_to_key = false,
default_container = "巴西",
default_placetype = "state",
data = export.brazil_states,
}
-----------------------------------------------------------------------------------
-- France regions --
-----------------------------------------------------------------------------------
export.france_administrative_regions = {
["奧弗涅-隆河-阿爾卑斯大區"] = {wp = "Auvergne-Rhône-Alpes"},
["勃艮第-弗朗什-孔泰大區"] = {wp = "Bourgogne-Franche-Comté"},
["布列塔尼大區"] = {wp = "Brittany (administrative region)"},
["中央-羅亞爾河谷大區"] = {wp = "Centre-Val de Loire"},
["科西嘉大區"] = {wp = "Corsica"},
["大東部大區"] = {wp = "Grand Est"},
["上法蘭西大區"] = {wp = "Hauts-de-France"},
["法蘭西島大區"] = {wp = "Île-de-France"},
["諾曼底大區"] = {wp = "Normandy"},
["新阿基坦大區"] = {wp = "Nouvelle-Aquitaine"},
["奧克西塔尼大區"] = {wp = "Occitanie"},
["盧瓦爾河地區大區"] = {wp = "Pays de la Loire"},
["普羅旺斯-阿爾卑斯-蔚藍海岸大區"] = {wp = "Provence-Alpes-Côte d'Azur"},
-- Old region names (pre-2016) as aliases
["北部-加萊海峽大區"] = {wp = "Nord-Pas-de-Calais"},
["加來海峽大區"] = {alias_of = "北部-加萊海峽大區"},
}
export.france_group = {
placename_to_key = false,
default_container = "法國",
default_placetype = "region",
data = export.france_administrative_regions,
}
-- France departments (abbreviated list)
export.france_departments = {
["北部省"] = {wp = "Nord (department)", container = "上法蘭西大區"},
["加來海峽省"] = {wp = "Pas-de-Calais", container = "上法蘭西大區"},
["巴黎市"] = {wp = "Paris", container = "法蘭西島大區"},
["上塞納省"] = {wp = "Hauts-de-Seine", container = "法蘭西島大區"},
}
export.france_departments_group = {
placename_to_key = false,
default_container = "法國",
default_placetype = "department",
data = export.france_departments,
}
-----------------------------------------------------------------------------------
-- locations list --
-----------------------------------------------------------------------------------
export.locations = {
export.continents_group,
export.countries_group,
export.country_like_entities_group,
export.former_countries_group,
export.united_states_group,
export.united_kingdom_group,
export.scotland_group,
export.england_group,
export.northern_ireland_group,
export.ireland_group,
export.china_group,
export.taiwan_group,
export.canada_group,
export.australia_group,
export.india_group,
export.japan_group,
export.brazil_group,
export.france_group,
export.france_departments_group,
export.misc_cities_group,
}
return export
nptdyvmand7v72f56qxy7twf9h4wv8t
9758136
9758126
2026-05-13T00:40:06Z
TongcyDai
53191
9758136
Scribunto
text/plain
local export = {}
export.force_cat = false
local m_table = require("Module:table")
local insert = table.insert
local concat = table.concat
local dump = mw.dumpObject
local unpack = unpack or table.unpack
--[==[
Chinese Wiktionary localization of [[Module:place/locations]].
All canonical location keys are in Chinese, matching what editors write in holonym parameters
(e.g. {{place|zh|城市|s/中央邦|c/印度}}). English Wikipedia article names are stored in the
`wp` field for cross-reference. The `the`, `british_spelling` and English-suffix-detection
fields from enwikt are omitted as they are not applicable in Chinese.
The helper functions (process_error through construct_linked_placename) are kept intact from
enwikt's Module:place/locations to maintain API compatibility with Module:place/placetypes.
]==]
-----------------------------------------------------------------------------------
-- Helper functions --
-----------------------------------------------------------------------------------
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
function export.internal_error(fmt, ...)
export.process_error("Internal error: " .. fmt, ...)
end
local internal_error = export.internal_error
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
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
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 == "city" 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 == "country" or
defcon.placetype == "constituent country") then
return placename .. ", " .. defcon.key
else
return placename
end
end
end
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 = "country"}
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", "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
spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city")
spec.initialized = true
end
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
local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype
if not placetype then
internal_error("No placetype found for key %s", key)
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
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
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
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
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
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
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
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)
-- Chinese has no articles; `the` field is unused but kept for API compatibility.
return linked_placename
end
-----------------------------------------------------------------------------------
-- Local data helper factories --
-----------------------------------------------------------------------------------
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 _, pat in ipairs(container_patterns) do
local nsubs
full_placename, nsubs = full_placename:gsub(pat, "")
if nsubs > 0 then break end
end
end
local elliptical_placename = full_placename
if divtype_patterns then
for _, pat in ipairs(divtype_patterns) do
local nsubs
elliptical_placename, nsubs = elliptical_placename:gsub(pat, "")
if nsubs > 0 then break end
end
end
return full_placename, elliptical_placename
end
end
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
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
-- Canonicalize a continent container key (string) to canonical container form.
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_container`", key)
end
-----------------------------------------------------------------------------------
-- Top-level tables --
-----------------------------------------------------------------------------------
export.continents = {
["地球"] = {placetype = "planet", addl_parents = {"nature"},
fulldesc = "=the planet [[Earth]] and the features found on it", wp = "Earth"},
["非洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"}, wp = "Africa"},
["美洲"] = {placetype = {"supercontinent", "continent"}, container = {key = "地球", placetype = "planet"},
wp = "Americas"},
["北美洲"] = {placetype = "continent", container = {key = "美洲", placetype = "supercontinent"}, wp = "North America"},
["加勒比地區"] = {placetype = {"continental region", "region"}, container = {key = "北美洲", placetype = "continent"}, wp = "Caribbean"},
["中美洲"] = {placetype = {"continental region", "region"}, container = {key = "北美洲", placetype = "continent"}, wp = "Central America"},
["南美洲"] = {placetype = "continent", container = {key = "美洲", placetype = "supercontinent"}, wp = "South America"},
["南極洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"},
fulldesc = "=the territory of [[Antarctica]]", wp = "Antarctica"},
["歐亞大陸"] = {placetype = {"supercontinent", "continent"}, container = {key = "地球", placetype = "planet"}, wp = "Eurasia"},
["亞洲"] = {placetype = "continent", container = {key = "歐亞大陸", placetype = "supercontinent"}, wp = "Asia"},
["中東"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Middle East"},
["東南亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Southeast Asia"},
["南亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "South Asia"},
["東亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "East Asia"},
["中亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Central Asia"},
["歐洲"] = {placetype = "continent", container = {key = "歐亞大陸", placetype = "supercontinent"}, wp = "Europe"},
["西歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Western Europe"},
["東歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Eastern Europe"},
["北歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Northern Europe"},
["南歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Southern Europe"},
["中歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Central Europe"},
["大洋洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"}, wp = "Oceania"},
["美拉尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Melanesia"},
["密克羅尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Micronesia"},
["玻里尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Polynesia"},
}
export.continents_group = {
default_overriding_bare_label_parents = {},
default_divs = {{type = "countries", prep = "in"}},
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,
default_no_check_holonym_mismatch = true,
data = export.continents,
}
-----------------------------------------------------------------------------------
-- Countries --
-----------------------------------------------------------------------------------
export.countries = {
-- Africa
["阿爾及利亞"] = {container = "非洲", divs = {"provinces", "communes", "districts"}, wp = "Algeria"},
["安哥拉"] = {container = "非洲", divs = {"provinces", "municipalities"}, wp = "Angola"},
["貝南"] = {container = "非洲", wp = "Benin"},
["波札那"] = {container = "非洲", wp = "Botswana"},
["博茨瓦納"] = {alias_of = "波札那"},
["布吉納法索"] = {container = "非洲", wp = "Burkina Faso"},
["布基納法索"] = {alias_of = "布吉納法索"},
["蒲隆地"] = {container = "非洲", wp = "Burundi"},
["布隆迪"] = {alias_of = "蒲隆地"},
["維德角"] = {container = "非洲", wp = "Cape Verde"},
["佛得角"] = {alias_of = "維德角"},
["中非共和國"] = {container = "非洲", wp = "Central African Republic"},
["查德"] = {container = "非洲", wp = "Chad"},
["科摩羅"] = {container = "非洲", wp = "Comoros"},
["葛摩"] = {alias_of = "科摩羅"},
["剛果共和國"] = {container = "非洲", wp = "Republic of the Congo"},
["剛果(布)"] = {alias_of = "剛果共和國"},
["剛果民主共和國"] = {container = "非洲", divs = {"provinces"}, wp = "Democratic Republic of the Congo"},
["剛果(金)"] = {alias_of = "剛果民主共和國"},
["吉布地"] = {container = "非洲", wp = "Djibouti"},
["吉布提"] = {alias_of = "吉布地"},
["埃及"] = {container = "非洲", divs = {"governorates"}, wp = "Egypt"},
["赤道幾內亞"] = {container = "非洲", wp = "Equatorial Guinea"},
["厄利垂亞"] = {container = "非洲", wp = "Eritrea"},
["厄立特里亞"] = {alias_of = "厄利垂亞"},
["史瓦帝尼"] = {container = "非洲", wp = "Eswatini"},
["衣索比亞"] = {container = "非洲", divs = {"regions"}, wp = "Ethiopia"},
["埃塞俄比亞"] = {alias_of = "衣索比亞"},
["加彭"] = {container = "非洲", wp = "Gabon"},
["加蓬"] = {alias_of = "加彭"},
["甘比亞"] = {container = "非洲", wp = "Gambia"},
["岡比亞"] = {alias_of = "甘比亞"},
["迦納"] = {container = "非洲", wp = "Ghana"},
["加納"] = {alias_of = "迦納"},
["幾內亞"] = {container = "非洲", wp = "Guinea"},
["幾內亞比索"] = {container = "非洲", wp = "Guinea-Bissau"},
["象牙海岸"] = {container = "非洲", wp = "Ivory Coast"},
["科特迪瓦"] = {alias_of = "象牙海岸"},
["肯亞"] = {container = "非洲", divs = {"counties"}, wp = "Kenya"},
["肯尼亞"] = {alias_of = "肯亞"},
["賴索托"] = {container = "非洲", wp = "Lesotho"},
["莱索托"] = {alias_of = "賴索托"},
["賴比瑞亞"] = {container = "非洲", wp = "Liberia"},
["利比里亞"] = {alias_of = "賴比瑞亞"},
["利比亞"] = {container = "非洲", wp = "Libya"},
["馬達加斯加"] = {container = "非洲", wp = "Madagascar"},
["馬拉威"] = {container = "非洲", wp = "Malawi"},
["馬拉維"] = {alias_of = "馬拉威"},
["馬利"] = {container = "非洲", wp = "Mali"},
["馬里"] = {alias_of = "馬利"},
["茅利塔尼亞"] = {container = "非洲", wp = "Mauritania"},
["毛里塔尼亞"] = {alias_of = "茅利塔尼亞"},
["模里西斯"] = {container = "非洲", wp = "Mauritius"},
["毛里求斯"] = {alias_of = "模里西斯"},
["摩洛哥"] = {container = "非洲", wp = "Morocco"},
["莫三比克"] = {container = "非洲", wp = "Mozambique"},
["莫桑比克"] = {alias_of = "莫三比克"},
["納米比亞"] = {container = "非洲", wp = "Namibia"},
["尼日"] = {container = "非洲", wp = "Niger"},
["尼日爾"] = {alias_of = "尼日"},
["奈及利亞"] = {container = "非洲", divs = {
{type = "states", cat_as = "states and FCT"},
"local government areas",
}, wp = "Nigeria"},
["尼日利亞"] = {alias_of = "奈及利亞"},
["盧安達"] = {container = "非洲", wp = "Rwanda"},
["盧旺達"] = {alias_of = "盧安達"},
["聖多美和普林西比"] = {container = "非洲", wp = "São Tomé and Príncipe"},
["塞內加爾"] = {container = "非洲", wp = "Senegal"},
["塞席爾"] = {container = "非洲", wp = "Seychelles"},
["塞舌爾"] = {alias_of = "塞席爾"},
["獅子山"] = {container = "非洲", wp = "Sierra Leone"},
["塞拉利昂"] = {alias_of = "獅子山"},
["索馬利亞"] = {container = "非洲", wp = "Somalia"},
["索馬里"] = {alias_of = "索馬利亞"},
["南非"] = {container = "非洲", divs = {"provinces"}, wp = "South Africa"},
["南蘇丹"] = {container = "非洲", wp = "South Sudan"},
["蘇丹"] = {container = "非洲", wp = "Sudan"},
["坦尚尼亞"] = {container = "非洲", wp = "Tanzania"},
["坦桑尼亞"] = {alias_of = "坦尚尼亞"},
["多哥"] = {container = "非洲", wp = "Togo"},
["突尼西亞"] = {container = "非洲", wp = "Tunisia"},
["突尼斯"] = {alias_of = "突尼西亞"},
["烏干達"] = {container = "非洲", wp = "Uganda"},
["尚比亞"] = {container = "非洲", wp = "Zambia"},
["贊比亞"] = {alias_of = "尚比亞"},
["辛巴威"] = {container = "非洲", wp = "Zimbabwe"},
["津巴布韋"] = {alias_of = "辛巴威"},
-- Asia
["阿富汗"] = {container = "亞洲", wp = "Afghanistan"},
["亞美尼亞"] = {container = {"歐洲", "亞洲"}, wp = "Armenia"},
["亞塞拜然"] = {container = {"歐洲", "亞洲"}, wp = "Azerbaijan"},
["阿塞拜疆"] = {alias_of = "亞塞拜然"},
["巴林"] = {container = "亞洲", wp = "Bahrain"},
["孟加拉"] = {container = "亞洲", divs = {"divisions", "districts"}, wp = "Bangladesh"},
["孟加拉國"] = {alias_of = "孟加拉"},
["不丹"] = {container = "亞洲", wp = "Bhutan"},
["汶萊"] = {container = "亞洲", wp = "Brunei"},
["文萊"] = {alias_of = "汶萊"},
["柬埔寨"] = {container = "亞洲", wp = "Cambodia"},
["中國"] = {container = "亞洲", divs = {
{type = "provinces", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "autonomous regions", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "direct-administered municipalities", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "special administrative regions", cat_as = "special administrative regions"},
}, wp = "China"},
["東帝汶"] = {container = "亞洲", wp = "East Timor"},
["帝汶島"] = {alias_of = "東帝汶"},
["印度"] = {container = "亞洲", divs = {
{type = "states", cat_as = "states and union territories"},
{type = "union territories", cat_as = "states and union territories"},
}, wp = "India"},
["印度尼西亞"] = {container = "亞洲", divs = {"provinces"}, wp = "Indonesia"},
["印尼"] = {alias_of = "印度尼西亞"},
["伊朗"] = {container = "亞洲", wp = "Iran"},
["伊拉克"] = {container = "亞洲", wp = "Iraq"},
["以色列"] = {container = "亞洲", wp = "Israel"},
["日本"] = {container = "亞洲", divs = {"prefectures"}, wp = "Japan"},
["約旦"] = {container = "亞洲", wp = "Jordan"},
["哈薩克"] = {container = {"歐洲", "亞洲"}, wp = "Kazakhstan"},
["哈薩克斯坦"] = {alias_of = "哈薩克"},
["北韓"] = {container = "亞洲", wp = "North Korea"},
["朝鮮"] = {alias_of = "北韓"},
["南韓"] = {container = "亞洲", divs = {"provinces", "special cities", "metropolitan cities"}, wp = "South Korea"},
["韓國"] = {alias_of = "南韓"},
["科威特"] = {container = "亞洲", wp = "Kuwait"},
["吉爾吉斯"] = {container = "亞洲", wp = "Kyrgyzstan"},
["吉爾吉斯斯坦"] = {alias_of = "吉爾吉斯"},
["寮國"] = {container = "亞洲", wp = "Laos"},
["老撾"] = {alias_of = "寮國"},
["黎巴嫩"] = {container = "亞洲", wp = "Lebanon"},
["馬來西亞"] = {container = "亞洲", divs = {"states"}, wp = "Malaysia"},
["馬爾地夫"] = {container = "亞洲", wp = "Maldives"},
["馬爾代夫"] = {alias_of = "馬爾地夫"},
["蒙古"] = {container = "亞洲", wp = "Mongolia"},
["緬甸"] = {container = "亞洲", wp = "Myanmar"},
["尼泊爾"] = {container = "亞洲", wp = "Nepal"},
["阿曼"] = {container = "亞洲", wp = "Oman"},
["巴基斯坦"] = {container = "亞洲", divs = {"provinces"}, wp = "Pakistan"},
["菲律賓"] = {container = "亞洲", divs = {"regions"}, wp = "Philippines"},
["菲律宾"] = {alias_of = "菲律賓"},
["卡達"] = {container = "亞洲", wp = "Qatar"},
["卡塔爾"] = {alias_of = "卡達"},
["俄羅斯"] = {container = {"歐洲", "亞洲"}, divs = {"federal subjects"}, wp = "Russia"},
["俄國"] = {alias_of = "俄羅斯"},
["沙烏地阿拉伯"] = {container = "亞洲", wp = "Saudi Arabia"},
["沙特阿拉伯"] = {alias_of = "沙烏地阿拉伯"},
["新加坡"] = {container = "亞洲", is_city = true, wp = "Singapore"},
["斯里蘭卡"] = {container = "亞洲", wp = "Sri Lanka"},
["敘利亞"] = {container = "亞洲", wp = "Syria"},
["叙利亞"] = {alias_of = "敘利亞"},
["臺灣"] = {container = "亞洲", divs = {
{type = "special municipalities", cat_as = "special municipalities and counties"},
{type = "counties", cat_as = "special municipalities and counties"},
}, wp = "Taiwan"},
["台灣"] = {alias_of = "臺灣"},
["塔吉克"] = {container = "亞洲", wp = "Tajikistan"},
["塔吉克斯坦"] = {alias_of = "塔吉克"},
["泰國"] = {container = "亞洲", divs = {"provinces"}, wp = "Thailand"},
["泰国"] = {alias_of = "泰國"},
["土耳其"] = {container = {"歐洲", "亞洲"}, wp = "Turkey"},
["土庫曼"] = {container = "亞洲", wp = "Turkmenistan"},
["土庫曼斯坦"] = {alias_of = "土庫曼"},
["阿拉伯聯合大公國"] = {container = "亞洲", wp = "United Arab Emirates"},
["阿聯酋"] = {alias_of = "阿拉伯聯合大公國"},
["烏茲別克"] = {container = "亞洲", wp = "Uzbekistan"},
["烏茲別克斯坦"] = {alias_of = "烏茲別克"},
["越南"] = {container = "亞洲", divs = {"provinces", "municipalities"}, wp = "Vietnam"},
["葉門"] = {container = "亞洲", wp = "Yemen"},
["也門"] = {alias_of = "葉門"},
-- Europe
["阿爾巴尼亞"] = {container = "歐洲", wp = "Albania"},
["安道爾"] = {container = "歐洲", wp = "Andorra"},
["奧地利"] = {container = "歐洲", divs = {"states"}, wp = "Austria"},
["白俄羅斯"] = {container = "歐洲", divs = {"regions"}, wp = "Belarus"},
["比利時"] = {container = "歐洲", divs = {"regions", "provinces"}, wp = "Belgium"},
["波士尼亞與赫塞哥維納"] = {container = "歐洲", wp = "Bosnia and Herzegovina"},
["波斯尼亞和黑塞哥維那"] = {alias_of = "波士尼亞與赫塞哥維納"},
["保加利亞"] = {container = "歐洲", wp = "Bulgaria"},
["克羅埃西亞"] = {container = "歐洲", wp = "Croatia"},
["克羅地亞"] = {alias_of = "克羅埃西亞"},
["賽普勒斯"] = {container = "亞洲", addl_parents = {"歐洲"}, wp = "Cyprus"},
["塞浦路斯"] = {alias_of = "賽普勒斯"},
["捷克"] = {container = "歐洲", wp = "Czech Republic"},
["丹麥"] = {container = "歐洲", wp = "Denmark"},
["愛沙尼亞"] = {container = "歐洲", wp = "Estonia"},
["芬蘭"] = {container = "歐洲", divs = {"regions"}, wp = "Finland"},
["法國"] = {container = "歐洲", divs = {
{type = "regions", cat_as = "metropolitan regions"},
"departments",
"communes",
}, wp = "France"},
["格魯吉亞"] = {container = {"歐洲", "亞洲"}, wp = "Georgia (country)"},
["喬治亞"] = {alias_of = "格魯吉亞"},
["德國"] = {container = "歐洲", divs = {"states"}, wp = "Germany"},
["希臘"] = {container = "歐洲", divs = {"regions"}, wp = "Greece"},
["匈牙利"] = {container = "歐洲", wp = "Hungary"},
["冰島"] = {container = "歐洲", wp = "Iceland"},
["愛爾蘭"] = {container = "歐洲", divs = {"provinces", "counties"}, wp = "Ireland"},
["意大利"] = {container = "歐洲", divs = {"regions"}, wp = "Italy"},
["義大利"] = {alias_of = "意大利"},
["科索沃"] = {container = "歐洲", wp = "Kosovo"},
["拉脫維亞"] = {container = "歐洲", wp = "Latvia"},
["拉托維亞"] = {alias_of = "拉脫維亞"},
["列支敦斯登"] = {container = "歐洲", wp = "Liechtenstein"},
["立陶宛"] = {container = "歐洲", wp = "Lithuania"},
["盧森堡"] = {container = "歐洲", wp = "Luxembourg"},
["北馬其頓"] = {container = "歐洲", wp = "North Macedonia"},
["馬爾他"] = {container = "歐洲", wp = "Malta"},
["馬耳他"] = {alias_of = "馬爾他"},
["摩爾多瓦"] = {container = "歐洲", wp = "Moldova"},
["摩納哥"] = {container = "歐洲", is_city = true, wp = "Monaco"},
["蒙特內哥羅"] = {container = "歐洲", wp = "Montenegro"},
["黑山"] = {alias_of = "蒙特內哥羅"},
["荷蘭"] = {container = "歐洲", divs = {"provinces"}, wp = "Netherlands"},
["尼德蘭"] = {alias_of = "荷蘭"},
["挪威"] = {container = "歐洲", wp = "Norway"},
["波蘭"] = {container = "歐洲", divs = {"voivodeships"}, wp = "Poland"},
["葡萄牙"] = {container = "歐洲", divs = {"districts"}, wp = "Portugal"},
["羅馬尼亞"] = {container = "歐洲", wp = "Romania"},
["聖馬利諾"] = {container = "歐洲", wp = "San Marino"},
["塞爾維亞"] = {container = "歐洲", wp = "Serbia"},
["斯洛伐克"] = {container = "歐洲", wp = "Slovakia"},
["斯洛維尼亞"] = {container = "歐洲", wp = "Slovenia"},
["斯洛文尼亞"] = {alias_of = "斯洛維尼亞"},
["西班牙"] = {container = "歐洲", divs = {"autonomous communities"}, wp = "Spain"},
["瑞典"] = {container = "歐洲", wp = "Sweden"},
["瑞士"] = {container = "歐洲", divs = {"cantons"}, wp = "Switzerland"},
["烏克蘭"] = {container = "歐洲", divs = {"oblasts"}, wp = "Ukraine"},
["英國"] = {container = "歐洲", divs = {
{type = "constituent countries", cat_as = "constituent countries"},
}, wp = "United Kingdom"},
-- North America
["加拿大"] = {container = "北美洲", divs = {
{type = "provinces", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
}, wp = "Canada"},
["墨西哥"] = {container = "北美洲", divs = {"states"}, wp = "Mexico"},
["美國"] = {container = "北美洲", divs = {"states"}, wp = "United States"},
-- Central America
["貝里斯"] = {container = "中美洲", wp = "Belize"},
["伯利茲"] = {alias_of = "貝里斯"},
["哥斯大黎加"] = {container = "中美洲", wp = "Costa Rica"},
["哥斯達黎加"] = {alias_of = "哥斯大黎加"},
["薩爾瓦多"] = {container = "中美洲", wp = "El Salvador"},
["瓜地馬拉"] = {container = "中美洲", wp = "Guatemala"},
["危地馬拉"] = {alias_of = "瓜地馬拉"},
["宏都拉斯"] = {container = "中美洲", wp = "Honduras"},
["洪都拉斯"] = {alias_of = "宏都拉斯"},
["尼加拉瓜"] = {container = "中美洲", wp = "Nicaragua"},
["巴拿馬"] = {container = "中美洲", wp = "Panama"},
-- Caribbean
["安地卡及巴布達"] = {container = "加勒比地區", wp = "Antigua and Barbuda"},
["安提瓜和巴布達"] = {alias_of = "安地卡及巴布達"},
["巴哈馬"] = {container = "加勒比地區", wp = "Bahamas"},
["巴貝多"] = {container = "加勒比地區", wp = "Barbados"},
["巴巴多斯"] = {alias_of = "巴貝多"},
["古巴"] = {container = "加勒比地區", wp = "Cuba"},
["多米尼克"] = {container = "加勒比地區", wp = "Dominica"},
["多明尼加共和國"] = {container = "加勒比地區", wp = "Dominican Republic"},
["格瑞那達"] = {container = "加勒比地區", wp = "Grenada"},
["格林納達"] = {alias_of = "格瑞那達"},
["海地"] = {container = "加勒比地區", wp = "Haiti"},
["牙買加"] = {container = "加勒比地區", wp = "Jamaica"},
["牙买加"] = {alias_of = "牙買加"},
["聖克里斯多福及尼維斯"] = {container = "加勒比地區", wp = "Saint Kitts and Nevis"},
["聖基茨和尼維斯"] = {alias_of = "聖克里斯多福及尼維斯"},
["聖露西亞"] = {container = "加勒比地區", wp = "Saint Lucia"},
["聖文森及格瑞那丁"] = {container = "加勒比地區", wp = "Saint Vincent and the Grenadines"},
["千里達及托巴哥"] = {container = "加勒比地區", wp = "Trinidad and Tobago"},
["特立尼達和多巴哥"] = {alias_of = "千里達及托巴哥"},
-- South America
["阿根廷"] = {container = "南美洲", divs = {"provinces"}, wp = "Argentina"},
["玻利維亞"] = {container = "南美洲", wp = "Bolivia"},
["玻利维亚"] = {alias_of = "玻利維亞"},
["巴西"] = {container = "南美洲", divs = {"states"}, wp = "Brazil"},
["智利"] = {container = "南美洲", wp = "Chile"},
["哥倫比亞"] = {container = "南美洲", wp = "Colombia"},
["哥伦比亚"] = {alias_of = "哥倫比亞"},
["厄瓜多"] = {container = "南美洲", wp = "Ecuador"},
["厄瓜多爾"] = {alias_of = "厄瓜多"},
["蓋亞那"] = {container = "南美洲", wp = "Guyana"},
["圭亞那"] = {alias_of = "蓋亞那"},
["巴拉圭"] = {container = "南美洲", wp = "Paraguay"},
["秘魯"] = {container = "南美洲", wp = "Peru"},
["秘鲁"] = {alias_of = "秘魯"},
["蘇利南"] = {container = "南美洲", wp = "Suriname"},
["蘇里南"] = {alias_of = "蘇利南"},
["烏拉圭"] = {container = "南美洲", wp = "Uruguay"},
["委內瑞拉"] = {container = "南美洲", wp = "Venezuela"},
["委内瑞拉"] = {alias_of = "委內瑞拉"},
-- Oceania
["澳大利亞"] = {container = "大洋洲", divs = {
{type = "states", cat_as = "states and territories"},
{type = "territories", cat_as = "states and territories"},
}, wp = "Australia"},
["澳洲"] = {alias_of = "澳大利亞"},
["斐濟"] = {container = "大洋洲", wp = "Fiji"},
["吉里巴斯"] = {container = "大洋洲", wp = "Kiribati"},
["馬紹爾群島"] = {container = "大洋洲", wp = "Marshall Islands"},
["密克羅尼西亞聯邦"] = {container = "大洋洲", wp = "Federated States of Micronesia"},
["諾魯"] = {container = "大洋洲", wp = "Nauru"},
["瑙魯"] = {alias_of = "諾魯"},
["紐西蘭"] = {container = "大洋洲", wp = "New Zealand"},
["新西蘭"] = {alias_of = "紐西蘭"},
["帛琉"] = {container = "大洋洲", wp = "Palau"},
["帕勞"] = {alias_of = "帛琉"},
["巴布亞紐幾內亞"] = {container = "大洋洲", wp = "Papua New Guinea"},
["巴布亚新几内亚"] = {alias_of = "巴布亞紐幾內亞"},
["薩摩亞"] = {container = "大洋洲", wp = "Samoa"},
["萨摩亚"] = {alias_of = "薩摩亞"},
["所羅門群島"] = {container = "大洋洲", wp = "Solomon Islands"},
["東加"] = {container = "大洋洲", wp = "Tonga"},
["湯加"] = {alias_of = "東加"},
["吐瓦魯"] = {container = "大洋洲", wp = "Tuvalu"},
["圖瓦盧"] = {alias_of = "吐瓦魯"},
["萬那杜"] = {container = "大洋洲", wp = "Vanuatu"},
["瓦努阿圖"] = {alias_of = "萬那杜"},
}
export.countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_overriding_bare_label_parents = {"+++", "countries"},
default_placetype = "country",
default_no_container_cat = true,
default_no_container_parent = true,
default_no_auto_augment_container = true,
placename_to_key = false,
data = export.countries,
}
-----------------------------------------------------------------------------------
-- Country-like entities --
-----------------------------------------------------------------------------------
export.country_like_entities = {
-- Special administrative regions of China
["香港"] = {
placetype = {"special administrative region", "region"},
container = "中國",
addl_parents = {"亞洲"},
is_city = true,
divs = {"districts"},
wp = "Hong Kong",
},
["澳門"] = {
placetype = {"special administrative region", "region"},
container = "中國",
addl_parents = {"亞洲"},
is_city = true,
wp = "Macau",
},
-- Western Sahara
["西撒哈拉"] = {
placetype = {"territory", "country"},
container = "非洲",
wp = "Western Sahara",
},
-- Kosovo (disputed)
["科索沃(部分承認)"] = {alias_of = "科索沃"},
-- Palestinian territories
["巴勒斯坦"] = {
placetype = {"country", "territory"},
container = "亞洲",
wp = "State of Palestine",
},
-- Key overseas territories
["波多黎各"] = {
placetype = {"commonwealth", "territory"},
container = "美國",
addl_parents = {"加勒比地區"},
wp = "Puerto Rico",
},
["關島"] = {
placetype = {"territory"},
container = "美國",
addl_parents = {"密克羅尼西亞"},
wp = "Guam",
},
["新喀里多尼亞"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"大洋洲"},
wp = "New Caledonia",
},
["法屬圭亞那"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"南美洲"},
wp = "French Guiana",
},
["留尼旺"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"非洲"},
wp = "Réunion",
},
["馬丁尼克"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"加勒比地區"},
wp = "Martinique",
},
["瓜德羅普"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"加勒比地區"},
wp = "Guadeloupe",
},
["格陵蘭"] = {
placetype = {"territory"},
container = "丹麥",
addl_parents = {"北美洲"},
wp = "Greenland",
},
["法羅群島"] = {
placetype = {"territory"},
container = "丹麥",
addl_parents = {"歐洲"},
wp = "Faroe Islands",
},
}
export.country_like_entities_group = {
canonicalize_key_container = make_canonicalize_key_container(nil, "country"),
default_placetype = "territory",
placename_to_key = false,
data = export.country_like_entities,
}
-----------------------------------------------------------------------------------
-- Former countries --
-----------------------------------------------------------------------------------
export.former_countries = {
["蘇聯"] = {
placetype = {"country"},
container = {"歐洲", "亞洲"},
is_former_place = true,
wp = "Soviet Union",
},
["南斯拉夫"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Yugoslavia",
},
["捷克斯洛伐克"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Czechoslovakia",
},
["東德"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "East Germany",
},
["西德"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "West Germany",
},
["奧匈帝國"] = {
placetype = {"empire"},
container = "歐洲",
is_former_place = true,
wp = "Austria-Hungary",
},
["鄂圖曼帝國"] = {
placetype = {"empire"},
container = {"歐洲", "亞洲"},
is_former_place = true,
wp = "Ottoman Empire",
},
["奧斯曼帝國"] = {alias_of = "鄂圖曼帝國"},
["羅馬帝國"] = {
placetype = {"empire"},
container = {"歐洲", "亞洲", "非洲"},
is_former_place = true,
wp = "Roman Empire",
},
["大英帝國"] = {
placetype = {"empire"},
is_former_place = true,
wp = "British Empire",
},
["普魯士"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Prussia",
},
}
export.former_countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_placetype = "country",
default_is_former_place = true,
placename_to_key = false,
data = export.former_countries,
}
-----------------------------------------------------------------------------------
-- United States states --
-----------------------------------------------------------------------------------
export.united_states_states = {
["阿拉巴馬"] = {wp = "Alabama"},
["阿拉斯加"] = {wp = "Alaska"},
["亞利桑那"] = {wp = "Arizona"},
["阿肯色"] = {wp = "Arkansas"},
["加利福尼亞"] = {wp = "California"},
["加州"] = {alias_of = "加利福尼亞"},
["科羅拉多"] = {wp = "Colorado"},
["康乃狄克"] = {wp = "Connecticut"},
["康涅狄格"] = {alias_of = "康乃狄克"},
["德拉瓦"] = {wp = "Delaware"},
["佛羅里達"] = {wp = "Florida"},
["佛罗里达"] = {alias_of = "佛羅里達"},
["佐治亞"] = {wp = "Georgia (U.S. state)"},
["夏威夷"] = {addl_parents = {"玻里尼西亞"}, wp = "Hawaii"},
["愛達荷"] = {wp = "Idaho"},
["伊利諾伊"] = {wp = "Illinois"},
["伊利诺伊"] = {alias_of = "伊利諾伊"},
["印地安那"] = {wp = "Indiana"},
["印第安納"] = {alias_of = "印地安那"},
["愛荷華"] = {wp = "Iowa"},
["堪薩斯"] = {wp = "Kansas"},
["肯塔基"] = {wp = "Kentucky"},
["路易斯安那"] = {wp = "Louisiana"},
["緬因"] = {wp = "Maine"},
["馬里蘭"] = {wp = "Maryland"},
["麻薩諸塞"] = {wp = "Massachusetts"},
["麻薩诸塞"] = {alias_of = "麻薩諸塞"},
["密西根"] = {wp = "Michigan"},
["密歇根"] = {alias_of = "密西根"},
["明尼蘇達"] = {wp = "Minnesota"},
["明尼苏达"] = {alias_of = "明尼蘇達"},
["密西西比"] = {wp = "Mississippi"},
["密蘇里"] = {wp = "Missouri"},
["蒙大拿"] = {wp = "Montana"},
["內布拉斯加"] = {wp = "Nebraska"},
["內華達"] = {wp = "Nevada"},
["新罕布什爾"] = {wp = "New Hampshire"},
["新澤西"] = {wp = "New Jersey"},
["新泽西"] = {alias_of = "新澤西"},
["新墨西哥"] = {wp = "New Mexico"},
["紐約"] = {wp = "New York (state)"},
["纽约"] = {alias_of = "紐約"},
["北卡羅來納"] = {wp = "North Carolina"},
["北达科他"] = {alias_of = "北達科他"},
["北達科他"] = {wp = "North Dakota"},
["俄亥俄"] = {wp = "Ohio"},
["奧克拉荷馬"] = {wp = "Oklahoma"},
["奧勒岡"] = {wp = "Oregon"},
["俄勒冈"] = {alias_of = "奧勒岡"},
["賓夕法尼亞"] = {wp = "Pennsylvania"},
["宾夕法尼亚"] = {alias_of = "賓夕法尼亞"},
["羅德島"] = {wp = "Rhode Island"},
["南卡羅來納"] = {wp = "South Carolina"},
["南達科他"] = {wp = "South Dakota"},
["田納西"] = {wp = "Tennessee"},
["田纳西"] = {alias_of = "田納西"},
["德克薩斯"] = {wp = "Texas"},
["德州"] = {alias_of = "德克薩斯"},
["猶他"] = {wp = "Utah"},
["佛蒙特"] = {wp = "Vermont"},
["弗吉尼亞"] = {wp = "Virginia"},
["弗吉尼亚"] = {alias_of = "弗吉尼亞"},
["維吉尼亞"] = {alias_of = "弗吉尼亞"},
["華盛頓州"] = {wp = "Washington (state)"},
["华盛顿州"] = {alias_of = "華盛頓州"},
["西維吉尼亞"] = {wp = "West Virginia"},
["西弗吉尼亞"] = {alias_of = "西維吉尼亞"},
["威斯康辛"] = {wp = "Wisconsin"},
["懷俄明"] = {wp = "Wyoming"},
-- Washington D.C. (federal district, treated like a state in holonym context)
["華盛頓特區"] = {placetype = {"federal district", "district"}, wp = "Washington, D.C."},
}
export.united_states_group = {
placename_to_key = false,
default_container = "美國",
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,
}
-----------------------------------------------------------------------------------
-- United Kingdom constituent countries --
-----------------------------------------------------------------------------------
export.united_kingdom_constituent_countries = {
["英格蘭"] = {divs = {"counties", "districts"}, wp = "England"},
["北愛爾蘭"] = {
placetype = {"constituent country", "province", "country"},
divs = {"counties", "districts"},
wp = "Northern Ireland",
},
["蘇格蘭"] = {divs = {{type = "council areas", container_parent_type = false}}, wp = "Scotland"},
["威爾斯"] = {divs = {"counties"}, wp = "Wales"},
["威尔士"] = {alias_of = "威爾斯"},
}
export.united_kingdom_group = {
placename_to_key = false,
default_container = "英國",
default_placetype = {"constituent country", "country"},
default_no_container_cat = true,
data = export.united_kingdom_constituent_countries,
}
-- Scotland council areas
export.scotland_council_areas = {
["Aberdeen市"] = {wp = "Aberdeen"},
["Aberdeenshire"] = {wp = "Aberdeenshire"},
["Angus"] = {wp = "Angus, Scotland"},
["Argyll and Bute"] = {wp = "Argyll and Bute"},
["Clackmannanshire"] = {wp = "Clackmannanshire"},
["Dumfries and Galloway"] = {wp = "Dumfries and Galloway"},
["Dundee市"] = {wp = "Dundee"},
["East Ayrshire"] = {wp = "East Ayrshire"},
["East Dunbartonshire"] = {wp = "East Dunbartonshire"},
["East Lothian"] = {wp = "East Lothian"},
["East Renfrewshire"] = {wp = "East Renfrewshire"},
["Edinburgh市"] = {wp = "Edinburgh"},
["Eilean Siar"] = {wp = "Outer Hebrides"},
["Falkirk"] = {wp = "Falkirk"},
["Fife"] = {wp = "Fife"},
["Glasgow市"] = {wp = "Glasgow"},
["高地"] = {wp = "Highland council area"},
["Highland"] = {alias_of = "高地", display = true},
["Inverclyde"] = {wp = "Inverclyde"},
["Midlothian"] = {wp = "Midlothian"},
["Moray"] = {wp = "Moray"},
["North Ayrshire"] = {wp = "North Ayrshire"},
["North Lanarkshire"] = {wp = "North Lanarkshire"},
["Orkney群島"] = {wp = "Orkney"},
["Perth and Kinross"] = {wp = "Perth and Kinross"},
["Renfrewshire"] = {wp = "Renfrewshire"},
["Scottish Borders"] = {wp = "Scottish Borders"},
["Shetland群島"] = {wp = "Shetland"},
["South Ayrshire"] = {wp = "South Ayrshire"},
["South Lanarkshire"] = {wp = "South Lanarkshire"},
["Stirling"] = {wp = "Stirling (council area)"},
["West Dunbartonshire"] = {wp = "West Dunbartonshire"},
["West Lothian"] = {wp = "West Lothian"},
}
export.scotland_group = {
placename_to_key = false,
default_container = "蘇格蘭",
default_placetype = "council area",
data = export.scotland_council_areas,
}
-- England counties (selected)
export.england_counties = {
["德文郡"] = {wp = "Devon"},
["薩默塞特郡"] = {wp = "Somerset"},
["肯特郡"] = {wp = "Kent"},
["薩里郡"] = {wp = "Surrey"},
["埃塞克斯郡"] = {wp = "Essex"},
["約克郡"] = {wp = "Yorkshire"},
["蘭開夏郡"] = {wp = "Lancashire"},
["諾福克郡"] = {wp = "Norfolk"},
}
export.england_group = {
placename_to_key = false,
default_container = "英格蘭",
default_placetype = "county",
data = export.england_counties,
}
-- Northern Ireland counties (stub table required by place-placetypes.lua)
export.northern_ireland_counties = {}
export.northern_ireland_group = {
placename_to_key = false,
default_container = "北愛爾蘭",
default_placetype = "county",
data = export.northern_ireland_counties,
}
-- Ireland counties (stub table required by place-placetypes.lua)
export.ireland_counties = {}
export.ireland_group = {
placename_to_key = false,
default_container = "愛爾蘭",
default_placetype = "county",
data = export.ireland_counties,
}
-----------------------------------------------------------------------------------
-- China provinces --
-----------------------------------------------------------------------------------
export.china_provinces = {
-- Provinces
["安徽"] = {wp = "Anhui"},
["福建"] = {wp = "Fujian"},
["甘肅"] = {wp = "Gansu"},
["廣東"] = {wp = "Guangdong"},
["貴州"] = {wp = "Guizhou"},
["海南"] = {wp = "Hainan"},
["河北"] = {wp = "Hebei"},
["黑龍江"] = {wp = "Heilongjiang"},
["河南"] = {wp = "Henan"},
["湖北"] = {wp = "Hubei"},
["湖南"] = {wp = "Hunan"},
["江蘇"] = {wp = "Jiangsu"},
["江西"] = {wp = "Jiangxi"},
["吉林"] = {wp = "Jilin"},
["遼寧"] = {wp = "Liaoning"},
["青海"] = {wp = "Qinghai"},
["陝西"] = {wp = "Shaanxi"},
["山東"] = {wp = "Shandong"},
["山西"] = {wp = "Shanxi"},
["四川"] = {wp = "Sichuan"},
["雲南"] = {wp = "Yunnan"},
["浙江"] = {wp = "Zhejiang"},
-- Autonomous regions
["廣西壯族自治區"] = {placetype = "autonomous region", wp = "Guangxi"},
["廣西"] = {alias_of = "廣西壯族自治區"},
["內蒙古自治區"] = {placetype = "autonomous region", wp = "Inner Mongolia"},
["內蒙古"] = {alias_of = "內蒙古自治區"},
["寧夏回族自治區"] = {placetype = "autonomous region", wp = "Ningxia"},
["寧夏"] = {alias_of = "寧夏回族自治區"},
["西藏自治區"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"},
["西藏"] = {alias_of = "西藏自治區"},
["新疆維吾爾自治區"] = {placetype = "autonomous region", wp = "Xinjiang"},
["新疆"] = {alias_of = "新疆維吾爾自治區"},
-- Direct-administered municipalities (treated as province-level for holonym purposes)
["北京"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Beijing"},
["北京市"] = {alias_of = "北京"},
["上海"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Shanghai"},
["上海市"] = {alias_of = "上海"},
["天津"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Tianjin"},
["天津市"] = {alias_of = "天津"},
["重慶"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Chongqing"},
["重慶市"] = {alias_of = "重慶"},
}
export.china_group = {
placename_to_key = false,
default_container = "中國",
default_placetype = "province",
default_divs = {
"prefecture-level cities",
"districts",
{type = "counties", cat_as = "counties and county-level cities"},
{type = "county-level cities", cat_as = "counties and county-level cities"},
},
data = export.china_provinces,
}
-----------------------------------------------------------------------------------
-- Taiwan counties --
-----------------------------------------------------------------------------------
-- Note: In zhwikt, Taiwan county keys use Chinese names directly.
-- The enwikt-style lookup `taiwan_counties["Chiayi County, Taiwan"]` will return nil
-- (correct: no English suffix auto-detection for Chinese holonym names).
export.taiwan_counties = {
["彰化縣"] = {wp = "Changhua County"},
["嘉義縣"] = {wp = "Chiayi County"},
["新竹縣"] = {wp = "Hsinchu County"},
["花蓮縣"] = {wp = "Hualien County"},
["金門縣"] = {wp = "Kinmen County"},
["連江縣"] = {wp = "Lienchiang County"},
["苗栗縣"] = {wp = "Miaoli County"},
["南投縣"] = {wp = "Nantou County"},
["澎湖縣"] = {wp = "Penghu County"},
["屏東縣"] = {wp = "Pingtung County"},
["臺東縣"] = {wp = "Taitung County"},
["宜蘭縣"] = {wp = "Yilan County"},
["雲林縣"] = {wp = "Yunlin County"},
-- Special municipalities (province-level)
["臺北市"] = {placetype = "special municipality", wp = "Taipei"},
["新北市"] = {placetype = "special municipality", wp = "New Taipei"},
["桃園市"] = {placetype = "special municipality", wp = "Taoyuan City"},
["臺中市"] = {placetype = "special municipality", wp = "Taichung"},
["臺南市"] = {placetype = "special municipality", wp = "Tainan"},
["高雄市"] = {placetype = "special municipality", wp = "Kaohsiung"},
["嘉義市"] = {placetype = "city", wp = "Chiayi City"},
["新竹市"] = {placetype = "city", wp = "Hsinchu City"},
["基隆市"] = {placetype = "city", wp = "Keelung"},
}
export.taiwan_group = {
placename_to_key = false,
default_container = "臺灣",
default_placetype = "county",
default_divs = {"districts", "townships"},
data = export.taiwan_counties,
}
-----------------------------------------------------------------------------------
-- Canada provinces and territories --
-----------------------------------------------------------------------------------
export.canada_provinces_and_territories = {
["亞伯達"] = {wp = "Alberta"},
["艾伯塔"] = {alias_of = "亞伯達"},
["英屬哥倫比亞"] = {wp = "British Columbia"},
["卑詩省"] = {alias_of = "英屬哥倫比亞"},
["馬尼托巴"] = {wp = "Manitoba"},
["新不倫瑞克"] = {wp = "New Brunswick"},
["紐芬蘭與拉布拉多"] = {wp = "Newfoundland and Labrador"},
["西北地區"] = {placetype = "territory", wp = "Northwest Territories"},
["新斯科舍"] = {wp = "Nova Scotia"},
["努納武特"] = {placetype = "territory", wp = "Nunavut"},
["安大略"] = {divs = {"counties", "regional municipalities"}, wp = "Ontario"},
["愛德華王子島"] = {wp = "Prince Edward Island"},
["魁北克"] = {wp = "Quebec"},
["薩斯喀徹溫"] = {wp = "Saskatchewan"},
["育空"] = {placetype = "territory", wp = "Yukon"},
}
export.canada_group = {
placename_to_key = false,
default_container = "加拿大",
default_placetype = "province",
data = export.canada_provinces_and_territories,
}
-----------------------------------------------------------------------------------
-- Australia states and territories --
-----------------------------------------------------------------------------------
export.australia_states_and_territories = {
["新南威爾斯"] = {wp = "New South Wales"},
["維多利亞州"] = {wp = "Victoria (Australia)"},
["昆士蘭"] = {wp = "Queensland"},
["南澳大利亞"] = {wp = "South Australia"},
["西澳大利亞"] = {wp = "Western Australia"},
["塔斯馬尼亞"] = {wp = "Tasmania"},
["澳大利亞首都領地"] = {placetype = "territory", wp = "Australian Capital Territory"},
["北領地"] = {placetype = "territory", wp = "Northern Territory"},
}
export.australia_group = {
placename_to_key = false,
default_container = "澳大利亞",
default_placetype = "state",
data = export.australia_states_and_territories,
}
-----------------------------------------------------------------------------------
-- India states and union territories --
-----------------------------------------------------------------------------------
export.india_states_and_union_territories = {
["安達曼-尼科巴群島"] = {placetype = "union territory", wp = "Andaman and Nicobar Islands"},
["安得拉邦"] = {wp = "Andhra Pradesh"},
["阿魯納恰爾邦"] = {wp = "Arunachal Pradesh"},
["阿薩姆"] = {wp = "Assam"},
["比哈爾邦"] = {wp = "Bihar"},
["昌迪加爾"] = {placetype = "union territory", wp = "Chandigarh"},
["恰蒂斯加爾邦"] = {wp = "Chhattisgarh"},
["達德拉-納加爾哈維利和達曼-第烏"] = {placetype = "union territory", wp = "Dadra and Nagar Haveli and Daman and Diu"},
["德里"] = {placetype = "union territory", wp = "Delhi"},
["果阿"] = {wp = "Goa"},
["古吉拉特邦"] = {wp = "Gujarat"},
["哈里亞納邦"] = {wp = "Haryana"},
["喜馬偕爾邦"] = {wp = "Himachal Pradesh"},
["查謨和克什米爾"] = {placetype = "union territory", wp = "Jammu and Kashmir (union territory)"},
["賈坎德邦"] = {wp = "Jharkhand"},
["卡納塔克邦"] = {wp = "Karnataka"},
["喀拉拉邦"] = {wp = "Kerala"},
["拉達克"] = {placetype = "union territory", wp = "Ladakh"},
["拉克沙群島"] = {placetype = "union territory", wp = "Lakshadweep"},
["中央邦"] = {wp = "Madhya Pradesh"},
["馬哈拉施特拉邦"] = {wp = "Maharashtra"},
["曼尼普爾邦"] = {wp = "Manipur"},
["梅加拉亞邦"] = {wp = "Meghalaya"},
["米佐拉姆邦"] = {wp = "Mizoram"},
["那加蘭邦"] = {wp = "Nagaland"},
["奧里薩邦"] = {wp = "Odisha"},
["本地治里"] = {placetype = "union territory", wp = "Puducherry"},
["旁遮普邦"] = {wp = "Punjab, India"},
["拉賈斯坦邦"] = {wp = "Rajasthan"},
["錫金"] = {wp = "Sikkim"},
["泰米爾納德邦"] = {wp = "Tamil Nadu"},
["特倫甘納邦"] = {wp = "Telangana"},
["特里普拉邦"] = {wp = "Tripura"},
["北方邦"] = {wp = "Uttar Pradesh"},
["北阿坎德邦"] = {wp = "Uttarakhand"},
["西孟加拉邦"] = {wp = "West Bengal"},
}
export.india_group = {
placename_to_key = false,
default_container = "印度",
default_placetype = "state",
default_divs = {"districts"},
data = export.india_states_and_union_territories,
}
-----------------------------------------------------------------------------------
-- Japan prefectures --
-----------------------------------------------------------------------------------
-- Note: export.japan_prefectures is accessed directly by place-placetypes.lua
-- using English-style keys (e.g. "Tokyo Prefecture, Japan"). Those lookups return
-- nil for Chinese keys, which is correct: no English "Prefecture" suffix is added.
export.japan_prefectures = {
["北海道"] = {placetype = {"prefecture"}, wp = "Hokkaido"},
["青森縣"] = {wp = "Aomori Prefecture"},
["岩手縣"] = {wp = "Iwate Prefecture"},
["宮城縣"] = {wp = "Miyagi Prefecture"},
["秋田縣"] = {wp = "Akita Prefecture"},
["山形縣"] = {wp = "Yamagata Prefecture"},
["福島縣"] = {wp = "Fukushima Prefecture"},
["茨城縣"] = {wp = "Ibaraki Prefecture"},
["栃木縣"] = {wp = "Tochigi Prefecture"},
["群馬縣"] = {wp = "Gunma Prefecture"},
["埼玉縣"] = {wp = "Saitama Prefecture"},
["千葉縣"] = {wp = "Chiba Prefecture"},
["東京都"] = {placetype = {"prefecture"}, wp = "Tokyo"},
["神奈川縣"] = {wp = "Kanagawa Prefecture"},
["新潟縣"] = {wp = "Niigata Prefecture"},
["富山縣"] = {wp = "Toyama Prefecture"},
["石川縣"] = {wp = "Ishikawa Prefecture"},
["福井縣"] = {wp = "Fukui Prefecture"},
["山梨縣"] = {wp = "Yamanashi Prefecture"},
["長野縣"] = {wp = "Nagano Prefecture"},
["岐阜縣"] = {wp = "Gifu Prefecture"},
["靜岡縣"] = {wp = "Shizuoka Prefecture"},
["愛知縣"] = {wp = "Aichi Prefecture"},
["三重縣"] = {wp = "Mie Prefecture"},
["滋賀縣"] = {wp = "Shiga Prefecture"},
["京都府"] = {placetype = {"prefecture"}, wp = "Kyoto Prefecture"},
["大阪府"] = {placetype = {"prefecture"}, wp = "Osaka Prefecture"},
["兵庫縣"] = {wp = "Hyogo Prefecture"},
["奈良縣"] = {wp = "Nara Prefecture"},
["和歌山縣"] = {wp = "Wakayama Prefecture"},
["鳥取縣"] = {wp = "Tottori Prefecture"},
["島根縣"] = {wp = "Shimane Prefecture"},
["岡山縣"] = {wp = "Okayama Prefecture"},
["廣島縣"] = {wp = "Hiroshima Prefecture"},
["山口縣"] = {wp = "Yamaguchi Prefecture"},
["德島縣"] = {wp = "Tokushima Prefecture"},
["香川縣"] = {wp = "Kagawa Prefecture"},
["愛媛縣"] = {wp = "Ehime Prefecture"},
["高知縣"] = {wp = "Kochi Prefecture"},
["福岡縣"] = {wp = "Fukuoka Prefecture"},
["佐賀縣"] = {wp = "Saga Prefecture"},
["長崎縣"] = {wp = "Nagasaki Prefecture"},
["熊本縣"] = {wp = "Kumamoto Prefecture"},
["大分縣"] = {wp = "Oita Prefecture"},
["宮崎縣"] = {wp = "Miyazaki Prefecture"},
["鹿兒島縣"] = {wp = "Kagoshima Prefecture"},
["沖繩縣"] = {wp = "Okinawa Prefecture"},
}
export.japan_group = {
placename_to_key = false,
default_container = "日本",
default_placetype = "prefecture",
default_divs = {"cities", "districts"},
data = export.japan_prefectures,
}
-----------------------------------------------------------------------------------
-- Germany states (Bundesländer) --
-----------------------------------------------------------------------------------
export.germany_states = {
["巴登-符騰堡"] = {wp = "Baden-Württemberg"},
["巴伐利亞"] = {wp = "Bavaria"},
["柏林"] = {wp = "Berlin"},
["布蘭登堡"] = {wp = "Brandenburg"},
["不來梅"] = {wp = "Bremen"},
["漢堡"] = {wp = "Hamburg"},
["黑森"] = {wp = "Hesse"},
["梅克倫堡-前波美拉尼亞"] = {wp = "Mecklenburg-Vorpommern"},
["下薩克森"] = {wp = "Lower Saxony"},
["北萊茵-威斯特法倫"] = {wp = "North Rhine-Westphalia"},
["萊茵蘭-普法爾茨"] = {wp = "Rhineland-Palatinate"},
["薩爾"] = {wp = "Saarland"},
["薩克森"] = {wp = "Saxony"},
["薩克森-安哈爾特"] = {wp = "Saxony-Anhalt"},
["石勒蘇益格-荷爾斯泰因"] = {wp = "Schleswig-Holstein"},
["圖林根"] = {wp = "Thuringia"},
}
export.germany_group = {
placename_to_key = false,
default_container = "德國",
default_placetype = "state",
data = export.germany_states,
}
-----------------------------------------------------------------------------------
-- Italy regions (Regioni) --
-----------------------------------------------------------------------------------
export.italy_regions = {
["阿布魯佐"] = {wp = "Abruzzo"},
["巴西利卡塔"] = {wp = "Basilicata"},
["卡拉布里亞"] = {wp = "Calabria"},
["坎帕尼亞"] = {wp = "Campania"},
["艾米利亞-羅馬涅"] = {wp = "Emilia-Romagna"},
["弗留利-威尼斯朱利亞"] = {wp = "Friuli-Venezia Giulia"},
["拉齊奧"] = {wp = "Lazio"},
["利古里亞"] = {wp = "Liguria"},
["倫巴第"] = {wp = "Lombardy"},
["倫巴底"] = {alias_of = "倫巴第"},
["馬爾凱"] = {wp = "Marche"},
["莫利塞"] = {wp = "Molise"},
["皮埃蒙特"] = {wp = "Piedmont"},
["普利亞"] = {wp = "Apulia"},
["阿普利亞"] = {alias_of = "普利亞"},
["薩丁尼亞"] = {wp = "Sardinia"},
["西西里"] = {wp = "Sicily"},
["托斯卡納"] = {wp = "Tuscany"},
["特倫蒂諾-上阿迪傑"] = {wp = "Trentino-Alto Adige/Südtirol"},
["翁布里亞"] = {wp = "Umbria"},
["奧斯塔谷"] = {wp = "Aosta Valley"},
["威尼托"] = {wp = "Veneto"},
}
export.italy_group = {
placename_to_key = false,
default_container = "意大利",
default_placetype = "region",
data = export.italy_regions,
}
-----------------------------------------------------------------------------------
-- Spain autonomous communities (Comunidades autónomas) --
-----------------------------------------------------------------------------------
export.spain_autonomous_communities = {
["安達盧西亞"] = {wp = "Andalusia"},
["安達魯西亞"] = {alias_of = "安達盧西亞"},
["阿拉貢"] = {wp = "Aragon"},
["阿斯圖里亞斯"] = {wp = "Asturias"},
["巴利阿里群島"] = {wp = "Balearic Islands"},
["巴斯克"] = {wp = "Basque Country (autonomous community)"},
["加那利群島"] = {wp = "Canary Islands"},
["坎塔布里亞"] = {wp = "Cantabria"},
["卡斯蒂利亞-拉曼恰"] = {wp = "Castilla-La Mancha"},
["卡斯蒂利亞-萊昂"] = {wp = "Castilla y León"},
["加泰羅尼亞"] = {wp = "Catalonia"},
["加泰隆尼亞"] = {alias_of = "加泰羅尼亞"},
["埃斯特雷馬杜拉"] = {wp = "Extremadura"},
["加利西亞"] = {wp = "Galicia (Spain)"},
["拉里奧哈"] = {wp = "La Rioja (autonomous community)"},
["馬德里自治區"] = {wp = "Community of Madrid"},
["穆爾西亞"] = {wp = "Region of Murcia"},
["納瓦拉"] = {wp = "Navarre"},
["巴倫西亞"] = {wp = "Valencian Community"},
["巴倫西亞自治區"] = {alias_of = "巴倫西亞"},
}
export.spain_group = {
placename_to_key = false,
default_container = "西班牙",
default_placetype = "autonomous community",
data = export.spain_autonomous_communities,
}
-----------------------------------------------------------------------------------
-- Stub tables required by place-placetypes.lua for suffix-detection lookups --
-- These are accessed as m_locations.X[english_key]; all lookups return nil, --
-- which is correct: Chinese holonyms do not get English suffix auto-detection. --
-----------------------------------------------------------------------------------
export.new_york_boroughs = {}
export.romania_counties = {}
export.bulgaria_provinces = {}
export.iran_provinces = {}
export.laos_provinces = {}
export.north_korea_provinces = {}
export.south_korea_provinces = {}
export.thailand_provinces = {}
export.turkey_provinces = {}
export.vietnam_provinces = {}
export.nigeria_states = {}
-----------------------------------------------------------------------------------
-- Selected city groups --
-----------------------------------------------------------------------------------
-- Key world cities frequently used as holonyms
export.misc_cities = {
-- Americas
["紐約市"] = {container = "紐約", placetype = "city", is_city = true, wp = "New York City"},
["洛杉磯"] = {container = "加利福尼亞", placetype = "city", is_city = true, wp = "Los Angeles"},
["芝加哥"] = {container = "伊利諾伊", placetype = "city", is_city = true, wp = "Chicago"},
["休士頓"] = {container = "德克薩斯", placetype = "city", is_city = true, wp = "Houston"},
["費城"] = {container = "賓夕法尼亞", placetype = "city", is_city = true, wp = "Philadelphia"},
["匹茲堡"] = {container = "賓夕法尼亞", placetype = "city", is_city = true, wp = "Pittsburgh"},
["費爾法克斯"] = {container = "弗吉尼亞", placetype = "city", is_city = true, wp = "Fairfax, Virginia"},
["斯克蘭頓"] = {container = "賓夕法尼亞", placetype = "city", is_city = true, wp = "Scranton, Pennsylvania"},
["多倫多"] = {container = "安大略", placetype = "city", is_city = true, wp = "Toronto"},
["蒙特婁"] = {container = "魁北克", placetype = "city", is_city = true, wp = "Montreal"},
["墨西哥城"] = {container = "墨西哥", placetype = "city", is_city = true, wp = "Mexico City"},
["聖保羅"] = {container = "巴西", placetype = "city", is_city = true, wp = "São Paulo"},
["里約熱內盧市"] = {container = "巴西", placetype = "city", is_city = true, wp = "Rio de Janeiro"},
["布宜諾斯艾利斯"] = {container = "阿根廷", placetype = "city", is_city = true, wp = "Buenos Aires"},
["聖地牙哥"] = {container = "智利", placetype = "city", is_city = true, wp = "Santiago"},
["波哥大"] = {container = "哥倫比亞", placetype = "city", is_city = true, wp = "Bogotá"},
["利馬"] = {container = "秘魯", placetype = "city", is_city = true, wp = "Lima"},
-- Europe
["倫敦"] = {container = "英格蘭", placetype = "city", is_city = true, wp = "London"},
["巴黎"] = {container = "法國", placetype = "city", is_city = true, wp = "Paris"},
["柏林"] = {container = "德國", placetype = "city", is_city = true, wp = "Berlin"},
["馬德里"] = {container = "西班牙", placetype = "city", is_city = true, wp = "Madrid"},
["羅馬"] = {container = "意大利", placetype = "city", is_city = true, wp = "Rome"},
["阿姆斯特丹"] = {container = "荷蘭", placetype = "city", is_city = true, wp = "Amsterdam"},
["布魯塞爾"] = {container = "比利時", placetype = "city", is_city = true, wp = "Brussels"},
["維也納"] = {container = "奧地利", placetype = "city", is_city = true, wp = "Vienna"},
["莫斯科"] = {container = "俄羅斯", placetype = "city", is_city = true, wp = "Moscow"},
["伊斯坦布爾"] = {container = "土耳其", placetype = "city", is_city = true, wp = "Istanbul"},
["基輔"] = {container = "烏克蘭", placetype = "city", is_city = true, wp = "Kyiv"},
["華沙"] = {container = "波蘭", placetype = "city", is_city = true, wp = "Warsaw"},
["布拉格"] = {container = "捷克", placetype = "city", is_city = true, wp = "Prague"},
["布達佩斯"] = {container = "匈牙利", placetype = "city", is_city = true, wp = "Budapest"},
["斯德哥爾摩"] = {container = "瑞典", placetype = "city", is_city = true, wp = "Stockholm"},
["赫爾辛基"] = {container = "芬蘭", placetype = "city", is_city = true, wp = "Helsinki"},
["奧斯陸"] = {container = "挪威", placetype = "city", is_city = true, wp = "Oslo"},
["哥本哈根"] = {container = "丹麥", placetype = "city", is_city = true, wp = "Copenhagen"},
["里斯本"] = {container = "葡萄牙", placetype = "city", is_city = true, wp = "Lisbon"},
["雅典"] = {container = "希臘", placetype = "city", is_city = true, wp = "Athens"},
["蘇黎世"] = {container = "瑞士", placetype = "city", is_city = true, wp = "Zurich"},
["日內瓦"] = {container = "瑞士", placetype = "city", is_city = true, wp = "Geneva"},
["第比利斯"] = {container = "格魯吉亞", placetype = "city", is_city = true, wp = "Tbilisi"},
["貝爾格勒"] = {container = "塞爾維亞", placetype = "city", is_city = true, wp = "Belgrade"},
["薩格勒布"] = {container = "克羅埃西亞", placetype = "city", is_city = true, wp = "Zagreb"},
["愛丁堡"] = {container = "蘇格蘭", placetype = "city", is_city = true, wp = "Edinburgh"},
["格拉斯哥"] = {container = "蘇格蘭", placetype = "city", is_city = true, wp = "Glasgow"},
["都柏林"] = {container = "愛爾蘭", placetype = "city", is_city = true, wp = "Dublin"},
-- Asia
["北京市"] = {container = "北京", placetype = "city", is_city = true, wp = "Beijing"},
["上海市"] = {container = "上海", placetype = "city", is_city = true, wp = "Shanghai"},
["東京"] = {container = "東京都", placetype = "city", is_city = true, wp = "Tokyo"},
["大阪"] = {container = "大阪府", placetype = "city", is_city = true, wp = "Osaka"},
["首爾"] = {container = "南韓", placetype = "city", is_city = true, wp = "Seoul"},
["孟買"] = {container = "馬哈拉施特拉邦", placetype = "city", is_city = true, wp = "Mumbai"},
["德里市"] = {container = "德里", placetype = "city", is_city = true, wp = "Delhi"},
["加爾各答"] = {container = "西孟加拉邦", placetype = "city", is_city = true, wp = "Kolkata"},
["雅加達"] = {container = "印度尼西亞", placetype = "city", is_city = true, wp = "Jakarta"},
["曼谷"] = {container = "泰國", placetype = "city", is_city = true, wp = "Bangkok"},
["吉隆坡"] = {container = "馬來西亞", placetype = "city", is_city = true, wp = "Kuala Lumpur"},
["河內"] = {container = "越南", placetype = "city", is_city = true, wp = "Hanoi"},
["胡志明市"] = {container = "越南", placetype = "city", is_city = true, wp = "Ho Chi Minh City"},
["開羅"] = {container = "埃及", placetype = "city", is_city = true, wp = "Cairo"},
["德黑蘭"] = {container = "伊朗", placetype = "city", is_city = true, wp = "Tehran"},
["利雅得"] = {container = "沙烏地阿拉伯", placetype = "city", is_city = true, wp = "Riyadh"},
["安卡拉"] = {container = "土耳其", placetype = "city", is_city = true, wp = "Ankara"},
-- Oceania
["悉尼"] = {container = "新南威爾斯", placetype = "city", is_city = true, wp = "Sydney"},
["雪梨"] = {alias_of = "悉尼"},
["墨爾本"] = {container = "維多利亞州", placetype = "city", is_city = true, wp = "Melbourne"},
["奧克蘭"] = {container = "紐西蘭", placetype = "city", is_city = true, wp = "Auckland"},
-- Africa
["開普敦"] = {container = "南非", placetype = "city", is_city = true, wp = "Cape Town"},
["約翰尼斯堡"] = {container = "南非", placetype = "city", is_city = true, wp = "Johannesburg"},
["拉各斯"] = {container = "奈及利亞", placetype = "city", is_city = true, wp = "Lagos"},
["奈洛比"] = {container = "肯亞", placetype = "city", is_city = true, wp = "Nairobi"},
}
export.misc_cities_group = {
placename_to_key = false,
default_placetype = "city",
default_is_city = true,
data = export.misc_cities,
}
-----------------------------------------------------------------------------------
-- Brazil states (for testcase coverage) --
-----------------------------------------------------------------------------------
export.brazil_states = {
["里約熱內盧州"] = {wp = "Rio de Janeiro (state)"},
["里約熱內盧"] = {alias_of = "里約熱內盧州"},
["聖保羅州"] = {wp = "São Paulo (state)"},
["米納斯吉拉斯"] = {wp = "Minas Gerais"},
["巴伊亞"] = {wp = "Bahia"},
["亞馬遜州"] = {wp = "Amazonas (Brazilian state)"},
["帕拉州"] = {wp = "Pará"},
}
export.brazil_group = {
placename_to_key = false,
default_container = "巴西",
default_placetype = "state",
data = export.brazil_states,
}
-----------------------------------------------------------------------------------
-- France regions --
-----------------------------------------------------------------------------------
export.france_administrative_regions = {
["奧弗涅-隆河-阿爾卑斯大區"] = {wp = "Auvergne-Rhône-Alpes"},
["勃艮第-弗朗什-孔泰大區"] = {wp = "Bourgogne-Franche-Comté"},
["布列塔尼大區"] = {wp = "Brittany (administrative region)"},
["中央-羅亞爾河谷大區"] = {wp = "Centre-Val de Loire"},
["科西嘉大區"] = {wp = "Corsica"},
["大東部大區"] = {wp = "Grand Est"},
["上法蘭西大區"] = {wp = "Hauts-de-France"},
["法蘭西島大區"] = {wp = "Île-de-France"},
["諾曼底大區"] = {wp = "Normandy"},
["新阿基坦大區"] = {wp = "Nouvelle-Aquitaine"},
["奧克西塔尼大區"] = {wp = "Occitanie"},
["盧瓦爾河地區大區"] = {wp = "Pays de la Loire"},
["普羅旺斯-阿爾卑斯-蔚藍海岸大區"] = {wp = "Provence-Alpes-Côte d'Azur"},
-- Old region names (pre-2016) as aliases
["北部-加萊海峽大區"] = {wp = "Nord-Pas-de-Calais"},
["加來海峽大區"] = {alias_of = "北部-加萊海峽大區"},
}
export.france_group = {
placename_to_key = false,
default_container = "法國",
default_placetype = "region",
data = export.france_administrative_regions,
}
-- France departments (abbreviated list)
export.france_departments = {
["北部省"] = {wp = "Nord (department)", container = "上法蘭西大區"},
["加來海峽省"] = {wp = "Pas-de-Calais", container = "上法蘭西大區"},
["巴黎市"] = {wp = "Paris", container = "法蘭西島大區"},
["上塞納省"] = {wp = "Hauts-de-Seine", container = "法蘭西島大區"},
}
export.france_departments_group = {
placename_to_key = false,
default_container = "法國",
default_placetype = "department",
data = export.france_departments,
}
-----------------------------------------------------------------------------------
-- locations list --
-----------------------------------------------------------------------------------
export.locations = {
export.continents_group,
export.countries_group,
export.country_like_entities_group,
export.former_countries_group,
export.united_states_group,
export.united_kingdom_group,
export.scotland_group,
export.england_group,
export.northern_ireland_group,
export.ireland_group,
export.china_group,
export.taiwan_group,
export.canada_group,
export.australia_group,
export.india_group,
export.japan_group,
export.brazil_group,
export.france_group,
export.france_departments_group,
export.germany_group,
export.italy_group,
export.spain_group,
export.misc_cities_group,
}
return export
afheb7vdj29wugyc8oxi6u25ghj2u65
9758643
9758136
2026-05-13T09:48:15Z
TongcyDai
53191
9758643
Scribunto
text/plain
local export = {}
export.force_cat = false
local m_table = require("Module:table")
local insert = table.insert
local concat = table.concat
local dump = mw.dumpObject
local unpack = unpack or table.unpack
--[==[
Chinese Wiktionary localization of [[Module:place/locations]].
All canonical location keys are in Chinese, matching what editors write in holonym parameters
(e.g. {{place|zh|城市|s/中央邦|c/印度}}). English Wikipedia article names are stored in the
`wp` field for cross-reference. The `the`, `british_spelling` and English-suffix-detection
fields from enwikt are omitted as they are not applicable in Chinese.
The helper functions (process_error through construct_linked_placename) are kept intact from
enwikt's Module:place/locations to maintain API compatibility with Module:place/placetypes.
]==]
-----------------------------------------------------------------------------------
-- Helper functions --
-----------------------------------------------------------------------------------
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
function export.internal_error(fmt, ...)
export.process_error("Internal error: " .. fmt, ...)
end
local internal_error = export.internal_error
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
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
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 == "city" 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 == "country" or
defcon.placetype == "constituent country") then
return placename .. ", " .. defcon.key
else
return placename
end
end
end
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 = "country"}
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", "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
spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city")
spec.initialized = true
end
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
local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype
if not placetype then
internal_error("No placetype found for key %s", key)
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
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
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
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
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
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
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
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)
-- Chinese has no articles; `the` field is unused but kept for API compatibility.
return linked_placename
end
-----------------------------------------------------------------------------------
-- Local data helper factories --
-----------------------------------------------------------------------------------
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 _, pat in ipairs(container_patterns) do
local nsubs
full_placename, nsubs = full_placename:gsub(pat, "")
if nsubs > 0 then break end
end
end
local elliptical_placename = full_placename
if divtype_patterns then
for _, pat in ipairs(divtype_patterns) do
local nsubs
elliptical_placename, nsubs = elliptical_placename:gsub(pat, "")
if nsubs > 0 then break end
end
end
return full_placename, elliptical_placename
end
end
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
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
-- Canonicalize a continent container key (string) to canonical container form.
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_container`", key)
end
-----------------------------------------------------------------------------------
-- Top-level tables --
-----------------------------------------------------------------------------------
export.continents = {
["地球"] = {placetype = "planet", addl_parents = {"nature"},
fulldesc = "=the planet [[Earth]] and the features found on it", wp = "Earth"},
["非洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"}, wp = "Africa"},
["美洲"] = {placetype = {"supercontinent", "continent"}, container = {key = "地球", placetype = "planet"},
wp = "Americas"},
["北美洲"] = {placetype = "continent", container = {key = "美洲", placetype = "supercontinent"}, wp = "North America"},
["加勒比地區"] = {placetype = {"continental region", "region"}, container = {key = "北美洲", placetype = "continent"}, wp = "Caribbean"},
["中美洲"] = {placetype = {"continental region", "region"}, container = {key = "北美洲", placetype = "continent"}, wp = "Central America"},
["南美洲"] = {placetype = "continent", container = {key = "美洲", placetype = "supercontinent"}, wp = "South America"},
["南極洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"},
fulldesc = "=the territory of [[Antarctica]]", wp = "Antarctica"},
["歐亞大陸"] = {placetype = {"supercontinent", "continent"}, container = {key = "地球", placetype = "planet"}, wp = "Eurasia"},
["亞洲"] = {placetype = "continent", container = {key = "歐亞大陸", placetype = "supercontinent"}, wp = "Asia"},
["中東"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Middle East"},
["東南亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Southeast Asia"},
["南亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "South Asia"},
["東亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "East Asia"},
["中亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Central Asia"},
["歐洲"] = {placetype = "continent", container = {key = "歐亞大陸", placetype = "supercontinent"}, wp = "Europe"},
["西歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Western Europe"},
["東歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Eastern Europe"},
["北歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Northern Europe"},
["南歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Southern Europe"},
["中歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Central Europe"},
["大洋洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"}, wp = "Oceania"},
["美拉尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Melanesia"},
["密克羅尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Micronesia"},
["玻里尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Polynesia"},
}
export.continents_group = {
default_overriding_bare_label_parents = {},
default_divs = {{type = "countries", prep = "in"}},
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,
default_no_check_holonym_mismatch = true,
data = export.continents,
}
-----------------------------------------------------------------------------------
-- Countries --
-----------------------------------------------------------------------------------
export.countries = {
-- Africa
["阿爾及利亞"] = {container = "非洲", divs = {"provinces", "communes", "districts"}, wp = "Algeria"},
["安哥拉"] = {container = "非洲", divs = {"provinces", "municipalities"}, wp = "Angola"},
["貝南"] = {container = "非洲", wp = "Benin"},
["波札那"] = {container = "非洲", wp = "Botswana"},
["博茨瓦納"] = {alias_of = "波札那"},
["布吉納法索"] = {container = "非洲", wp = "Burkina Faso"},
["布基納法索"] = {alias_of = "布吉納法索"},
["蒲隆地"] = {container = "非洲", wp = "Burundi"},
["布隆迪"] = {alias_of = "蒲隆地"},
["維德角"] = {container = "非洲", wp = "Cape Verde"},
["佛得角"] = {alias_of = "維德角"},
["中非共和國"] = {container = "非洲", wp = "Central African Republic"},
["查德"] = {container = "非洲", wp = "Chad"},
["科摩羅"] = {container = "非洲", wp = "Comoros"},
["葛摩"] = {alias_of = "科摩羅"},
["剛果共和國"] = {container = "非洲", wp = "Republic of the Congo"},
["剛果(布)"] = {alias_of = "剛果共和國"},
["剛果民主共和國"] = {container = "非洲", divs = {"provinces"}, wp = "Democratic Republic of the Congo"},
["剛果(金)"] = {alias_of = "剛果民主共和國"},
["吉布地"] = {container = "非洲", wp = "Djibouti"},
["吉布提"] = {alias_of = "吉布地"},
["埃及"] = {container = "非洲", divs = {"governorates"}, wp = "Egypt"},
["赤道幾內亞"] = {container = "非洲", wp = "Equatorial Guinea"},
["厄利垂亞"] = {container = "非洲", wp = "Eritrea"},
["厄立特里亞"] = {alias_of = "厄利垂亞"},
["史瓦帝尼"] = {container = "非洲", wp = "Eswatini"},
["衣索比亞"] = {container = "非洲", divs = {"regions"}, wp = "Ethiopia"},
["埃塞俄比亞"] = {alias_of = "衣索比亞"},
["加彭"] = {container = "非洲", wp = "Gabon"},
["加蓬"] = {alias_of = "加彭"},
["甘比亞"] = {container = "非洲", wp = "Gambia"},
["岡比亞"] = {alias_of = "甘比亞"},
["迦納"] = {container = "非洲", wp = "Ghana"},
["加納"] = {alias_of = "迦納"},
["幾內亞"] = {container = "非洲", wp = "Guinea"},
["幾內亞比索"] = {container = "非洲", wp = "Guinea-Bissau"},
["象牙海岸"] = {container = "非洲", wp = "Ivory Coast"},
["科特迪瓦"] = {alias_of = "象牙海岸"},
["肯亞"] = {container = "非洲", divs = {"counties"}, wp = "Kenya"},
["肯尼亞"] = {alias_of = "肯亞"},
["賴索托"] = {container = "非洲", wp = "Lesotho"},
["莱索托"] = {alias_of = "賴索托"},
["賴比瑞亞"] = {container = "非洲", wp = "Liberia"},
["利比里亞"] = {alias_of = "賴比瑞亞"},
["利比亞"] = {container = "非洲", wp = "Libya"},
["馬達加斯加"] = {container = "非洲", wp = "Madagascar"},
["馬拉威"] = {container = "非洲", wp = "Malawi"},
["馬拉維"] = {alias_of = "馬拉威"},
["馬利"] = {container = "非洲", wp = "Mali"},
["馬里"] = {alias_of = "馬利"},
["茅利塔尼亞"] = {container = "非洲", wp = "Mauritania"},
["毛里塔尼亞"] = {alias_of = "茅利塔尼亞"},
["模里西斯"] = {container = "非洲", wp = "Mauritius"},
["毛里求斯"] = {alias_of = "模里西斯"},
["摩洛哥"] = {container = "非洲", wp = "Morocco"},
["莫三比克"] = {container = "非洲", wp = "Mozambique"},
["莫桑比克"] = {alias_of = "莫三比克"},
["納米比亞"] = {container = "非洲", wp = "Namibia"},
["尼日"] = {container = "非洲", wp = "Niger"},
["尼日爾"] = {alias_of = "尼日"},
["奈及利亞"] = {container = "非洲", divs = {
{type = "states", cat_as = "states and FCT"},
"local government areas",
}, wp = "Nigeria"},
["尼日利亞"] = {alias_of = "奈及利亞"},
["盧安達"] = {container = "非洲", wp = "Rwanda"},
["盧旺達"] = {alias_of = "盧安達"},
["聖多美和普林西比"] = {container = "非洲", wp = "São Tomé and Príncipe"},
["塞內加爾"] = {container = "非洲", wp = "Senegal"},
["塞席爾"] = {container = "非洲", wp = "Seychelles"},
["塞舌爾"] = {alias_of = "塞席爾"},
["獅子山"] = {container = "非洲", wp = "Sierra Leone"},
["塞拉利昂"] = {alias_of = "獅子山"},
["索馬利亞"] = {container = "非洲", wp = "Somalia"},
["索馬里"] = {alias_of = "索馬利亞"},
["南非"] = {container = "非洲", divs = {"provinces"}, wp = "South Africa"},
["南蘇丹"] = {container = "非洲", wp = "South Sudan"},
["蘇丹"] = {container = "非洲", wp = "Sudan"},
["坦尚尼亞"] = {container = "非洲", wp = "Tanzania"},
["坦桑尼亞"] = {alias_of = "坦尚尼亞"},
["多哥"] = {container = "非洲", wp = "Togo"},
["突尼西亞"] = {container = "非洲", wp = "Tunisia"},
["突尼斯"] = {alias_of = "突尼西亞"},
["烏干達"] = {container = "非洲", wp = "Uganda"},
["尚比亞"] = {container = "非洲", wp = "Zambia"},
["贊比亞"] = {alias_of = "尚比亞"},
["辛巴威"] = {container = "非洲", wp = "Zimbabwe"},
["津巴布韋"] = {alias_of = "辛巴威"},
-- Asia
["阿富汗"] = {container = "亞洲", wp = "Afghanistan"},
["亞美尼亞"] = {container = {"歐洲", "亞洲"}, wp = "Armenia"},
["亞塞拜然"] = {container = {"歐洲", "亞洲"}, wp = "Azerbaijan"},
["阿塞拜疆"] = {alias_of = "亞塞拜然"},
["巴林"] = {container = "亞洲", wp = "Bahrain"},
["孟加拉"] = {container = "亞洲", divs = {"divisions", "districts"}, wp = "Bangladesh"},
["孟加拉國"] = {alias_of = "孟加拉"},
["不丹"] = {container = "亞洲", wp = "Bhutan"},
["汶萊"] = {container = "亞洲", wp = "Brunei"},
["文萊"] = {alias_of = "汶萊"},
["柬埔寨"] = {container = "亞洲", wp = "Cambodia"},
["中國"] = {container = "亞洲", divs = {
{type = "provinces", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "autonomous regions", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "direct-administered municipalities", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "special administrative regions", cat_as = "special administrative regions"},
}, wp = "China"},
["東帝汶"] = {container = "亞洲", wp = "East Timor"},
["帝汶島"] = {alias_of = "東帝汶"},
["印度"] = {container = "亞洲", divs = {
{type = "states", cat_as = "states and union territories"},
{type = "union territories", cat_as = "states and union territories"},
}, wp = "India"},
["印度尼西亞"] = {container = "亞洲", divs = {"provinces"}, wp = "Indonesia"},
["印尼"] = {alias_of = "印度尼西亞"},
["伊朗"] = {container = "亞洲", wp = "Iran"},
["伊拉克"] = {container = "亞洲", wp = "Iraq"},
["以色列"] = {container = "亞洲", wp = "Israel"},
["日本"] = {container = "亞洲", divs = {"prefectures"}, wp = "Japan"},
["約旦"] = {container = "亞洲", wp = "Jordan"},
["哈薩克"] = {container = {"歐洲", "亞洲"}, wp = "Kazakhstan"},
["哈薩克斯坦"] = {alias_of = "哈薩克"},
["北韓"] = {container = "亞洲", wp = "North Korea"},
["朝鮮"] = {alias_of = "北韓"},
["南韓"] = {container = "亞洲", divs = {"provinces", "special cities", "metropolitan cities"}, wp = "South Korea"},
["韓國"] = {alias_of = "南韓"},
["科威特"] = {container = "亞洲", wp = "Kuwait"},
["吉爾吉斯"] = {container = "亞洲", wp = "Kyrgyzstan"},
["吉爾吉斯斯坦"] = {alias_of = "吉爾吉斯"},
["寮國"] = {container = "亞洲", wp = "Laos"},
["老撾"] = {alias_of = "寮國"},
["黎巴嫩"] = {container = "亞洲", wp = "Lebanon"},
["馬來西亞"] = {container = "亞洲", divs = {"states"}, wp = "Malaysia"},
["馬爾地夫"] = {container = "亞洲", wp = "Maldives"},
["馬爾代夫"] = {alias_of = "馬爾地夫"},
["蒙古"] = {container = "亞洲", wp = "Mongolia"},
["緬甸"] = {container = "亞洲", wp = "Myanmar"},
["尼泊爾"] = {container = "亞洲", wp = "Nepal"},
["阿曼"] = {container = "亞洲", wp = "Oman"},
["巴基斯坦"] = {container = "亞洲", divs = {"provinces"}, wp = "Pakistan"},
["菲律賓"] = {container = "亞洲", divs = {"regions"}, wp = "Philippines"},
["菲律宾"] = {alias_of = "菲律賓"},
["卡達"] = {container = "亞洲", wp = "Qatar"},
["卡塔爾"] = {alias_of = "卡達"},
["俄羅斯"] = {container = {"歐洲", "亞洲"}, divs = {"federal subjects"}, wp = "Russia"},
["俄國"] = {alias_of = "俄羅斯"},
["沙烏地阿拉伯"] = {container = "亞洲", wp = "Saudi Arabia"},
["沙特阿拉伯"] = {alias_of = "沙烏地阿拉伯"},
["新加坡"] = {container = "亞洲", is_city = true, wp = "Singapore"},
["斯里蘭卡"] = {container = "亞洲", wp = "Sri Lanka"},
["敘利亞"] = {container = "亞洲", wp = "Syria"},
["叙利亞"] = {alias_of = "敘利亞"},
["臺灣"] = {container = "亞洲", divs = {
{type = "special municipalities", cat_as = "special municipalities and counties"},
{type = "counties", cat_as = "special municipalities and counties"},
}, wp = "Taiwan"},
["台灣"] = {alias_of = "臺灣"},
["塔吉克"] = {container = "亞洲", wp = "Tajikistan"},
["塔吉克斯坦"] = {alias_of = "塔吉克"},
["泰國"] = {container = "亞洲", divs = {"provinces"}, wp = "Thailand"},
["泰国"] = {alias_of = "泰國"},
["土耳其"] = {container = {"歐洲", "亞洲"}, wp = "Turkey"},
["土庫曼"] = {container = "亞洲", wp = "Turkmenistan"},
["土庫曼斯坦"] = {alias_of = "土庫曼"},
["阿拉伯聯合大公國"] = {container = "亞洲", wp = "United Arab Emirates"},
["阿聯酋"] = {alias_of = "阿拉伯聯合大公國"},
["烏茲別克"] = {container = "亞洲", wp = "Uzbekistan"},
["烏茲別克斯坦"] = {alias_of = "烏茲別克"},
["越南"] = {container = "亞洲", divs = {"provinces", "municipalities"}, wp = "Vietnam"},
["葉門"] = {container = "亞洲", wp = "Yemen"},
["也門"] = {alias_of = "葉門"},
-- Europe
["阿爾巴尼亞"] = {container = "歐洲", wp = "Albania"},
["安道爾"] = {container = "歐洲", wp = "Andorra"},
["奧地利"] = {container = "歐洲", divs = {"states"}, wp = "Austria"},
["白俄羅斯"] = {container = "歐洲", divs = {"regions"}, wp = "Belarus"},
["比利時"] = {container = "歐洲", divs = {"regions", "provinces"}, wp = "Belgium"},
["波士尼亞與赫塞哥維納"] = {container = "歐洲", wp = "Bosnia and Herzegovina"},
["波斯尼亞和黑塞哥維那"] = {alias_of = "波士尼亞與赫塞哥維納"},
["保加利亞"] = {container = "歐洲", wp = "Bulgaria"},
["克羅埃西亞"] = {container = "歐洲", wp = "Croatia"},
["克羅地亞"] = {alias_of = "克羅埃西亞"},
["賽普勒斯"] = {container = "亞洲", addl_parents = {"歐洲"}, wp = "Cyprus"},
["塞浦路斯"] = {alias_of = "賽普勒斯"},
["捷克"] = {container = "歐洲", wp = "Czech Republic"},
["丹麥"] = {container = "歐洲", wp = "Denmark"},
["愛沙尼亞"] = {container = "歐洲", wp = "Estonia"},
["芬蘭"] = {container = "歐洲", divs = {"regions"}, wp = "Finland"},
["法國"] = {container = "歐洲", divs = {
{type = "regions", cat_as = "metropolitan regions"},
"departments",
"communes",
}, wp = "France"},
["格魯吉亞"] = {container = {"歐洲", "亞洲"}, wp = "Georgia (country)"},
["喬治亞"] = {alias_of = "格魯吉亞"},
["德國"] = {container = "歐洲", divs = {"states"}, wp = "Germany"},
["希臘"] = {container = "歐洲", divs = {"regions"}, wp = "Greece"},
["匈牙利"] = {container = "歐洲", wp = "Hungary"},
["冰島"] = {container = "歐洲", wp = "Iceland"},
["愛爾蘭"] = {container = "歐洲", divs = {"provinces", "counties"}, wp = "Ireland"},
["意大利"] = {container = "歐洲", divs = {"regions"}, wp = "Italy"},
["義大利"] = {alias_of = "意大利"},
["科索沃"] = {container = "歐洲", wp = "Kosovo"},
["拉脫維亞"] = {container = "歐洲", wp = "Latvia"},
["拉托維亞"] = {alias_of = "拉脫維亞"},
["列支敦斯登"] = {container = "歐洲", wp = "Liechtenstein"},
["立陶宛"] = {container = "歐洲", wp = "Lithuania"},
["盧森堡"] = {container = "歐洲", wp = "Luxembourg"},
["北馬其頓"] = {container = "歐洲", wp = "North Macedonia"},
["馬爾他"] = {container = "歐洲", wp = "Malta"},
["馬耳他"] = {alias_of = "馬爾他"},
["摩爾多瓦"] = {container = "歐洲", wp = "Moldova"},
["摩納哥"] = {container = "歐洲", is_city = true, wp = "Monaco"},
["蒙特內哥羅"] = {container = "歐洲", wp = "Montenegro"},
["黑山"] = {alias_of = "蒙特內哥羅"},
["荷蘭"] = {container = "歐洲", divs = {"provinces"}, wp = "Netherlands"},
["尼德蘭"] = {alias_of = "荷蘭"},
["挪威"] = {container = "歐洲", wp = "Norway"},
["波蘭"] = {container = "歐洲", divs = {"voivodeships"}, wp = "Poland"},
["葡萄牙"] = {container = "歐洲", divs = {"districts"}, wp = "Portugal"},
["羅馬尼亞"] = {container = "歐洲", wp = "Romania"},
["聖馬利諾"] = {container = "歐洲", wp = "San Marino"},
["塞爾維亞"] = {container = "歐洲", wp = "Serbia"},
["斯洛伐克"] = {container = "歐洲", wp = "Slovakia"},
["斯洛維尼亞"] = {container = "歐洲", wp = "Slovenia"},
["斯洛文尼亞"] = {alias_of = "斯洛維尼亞"},
["西班牙"] = {container = "歐洲", divs = {"autonomous communities"}, wp = "Spain"},
["瑞典"] = {container = "歐洲", wp = "Sweden"},
["瑞士"] = {container = "歐洲", divs = {"cantons"}, wp = "Switzerland"},
["烏克蘭"] = {container = "歐洲", divs = {"oblasts"}, wp = "Ukraine"},
["英國"] = {container = "歐洲", divs = {
{type = "constituent countries", cat_as = "constituent countries"},
}, wp = "United Kingdom"},
-- North America
["加拿大"] = {container = "北美洲", divs = {
{type = "provinces", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
}, wp = "Canada"},
["墨西哥"] = {container = "北美洲", divs = {"states"}, wp = "Mexico"},
["美國"] = {container = "北美洲", divs = {"states"}, wp = "United States"},
-- Central America
["貝里斯"] = {container = "中美洲", wp = "Belize"},
["伯利茲"] = {alias_of = "貝里斯"},
["哥斯大黎加"] = {container = "中美洲", wp = "Costa Rica"},
["哥斯達黎加"] = {alias_of = "哥斯大黎加"},
["薩爾瓦多"] = {container = "中美洲", wp = "El Salvador"},
["瓜地馬拉"] = {container = "中美洲", wp = "Guatemala"},
["危地馬拉"] = {alias_of = "瓜地馬拉"},
["宏都拉斯"] = {container = "中美洲", wp = "Honduras"},
["洪都拉斯"] = {alias_of = "宏都拉斯"},
["尼加拉瓜"] = {container = "中美洲", wp = "Nicaragua"},
["巴拿馬"] = {container = "中美洲", wp = "Panama"},
-- Caribbean
["安地卡及巴布達"] = {container = "加勒比地區", wp = "Antigua and Barbuda"},
["安提瓜和巴布達"] = {alias_of = "安地卡及巴布達"},
["巴哈馬"] = {container = "加勒比地區", wp = "Bahamas"},
["巴貝多"] = {container = "加勒比地區", wp = "Barbados"},
["巴巴多斯"] = {alias_of = "巴貝多"},
["古巴"] = {container = "加勒比地區", wp = "Cuba"},
["多米尼克"] = {container = "加勒比地區", wp = "Dominica"},
["多明尼加共和國"] = {container = "加勒比地區", wp = "Dominican Republic"},
["格瑞那達"] = {container = "加勒比地區", wp = "Grenada"},
["格林納達"] = {alias_of = "格瑞那達"},
["海地"] = {container = "加勒比地區", wp = "Haiti"},
["牙買加"] = {container = "加勒比地區", wp = "Jamaica"},
["牙买加"] = {alias_of = "牙買加"},
["聖克里斯多福及尼維斯"] = {container = "加勒比地區", wp = "Saint Kitts and Nevis"},
["聖基茨和尼維斯"] = {alias_of = "聖克里斯多福及尼維斯"},
["聖露西亞"] = {container = "加勒比地區", wp = "Saint Lucia"},
["聖文森及格瑞那丁"] = {container = "加勒比地區", wp = "Saint Vincent and the Grenadines"},
["千里達及托巴哥"] = {container = "加勒比地區", wp = "Trinidad and Tobago"},
["特立尼達和多巴哥"] = {alias_of = "千里達及托巴哥"},
-- South America
["阿根廷"] = {container = "南美洲", divs = {"provinces"}, wp = "Argentina"},
["玻利維亞"] = {container = "南美洲", wp = "Bolivia"},
["玻利维亚"] = {alias_of = "玻利維亞"},
["巴西"] = {container = "南美洲", divs = {"states"}, wp = "Brazil"},
["智利"] = {container = "南美洲", wp = "Chile"},
["哥倫比亞"] = {container = "南美洲", wp = "Colombia"},
["哥伦比亚"] = {alias_of = "哥倫比亞"},
["厄瓜多"] = {container = "南美洲", wp = "Ecuador"},
["厄瓜多爾"] = {alias_of = "厄瓜多"},
["蓋亞那"] = {container = "南美洲", wp = "Guyana"},
["圭亞那"] = {alias_of = "蓋亞那"},
["巴拉圭"] = {container = "南美洲", wp = "Paraguay"},
["秘魯"] = {container = "南美洲", wp = "Peru"},
["秘鲁"] = {alias_of = "秘魯"},
["蘇利南"] = {container = "南美洲", wp = "Suriname"},
["蘇里南"] = {alias_of = "蘇利南"},
["烏拉圭"] = {container = "南美洲", wp = "Uruguay"},
["委內瑞拉"] = {container = "南美洲", wp = "Venezuela"},
["委内瑞拉"] = {alias_of = "委內瑞拉"},
-- Oceania
["澳大利亞"] = {container = "大洋洲", divs = {
{type = "states", cat_as = "states and territories"},
{type = "territories", cat_as = "states and territories"},
}, wp = "Australia"},
["澳洲"] = {alias_of = "澳大利亞"},
["斐濟"] = {container = "大洋洲", wp = "Fiji"},
["吉里巴斯"] = {container = "大洋洲", wp = "Kiribati"},
["馬紹爾群島"] = {container = "大洋洲", wp = "Marshall Islands"},
["密克羅尼西亞聯邦"] = {container = "大洋洲", wp = "Federated States of Micronesia"},
["諾魯"] = {container = "大洋洲", wp = "Nauru"},
["瑙魯"] = {alias_of = "諾魯"},
["紐西蘭"] = {container = "大洋洲", wp = "New Zealand"},
["新西蘭"] = {alias_of = "紐西蘭"},
["帛琉"] = {container = "大洋洲", wp = "Palau"},
["帕勞"] = {alias_of = "帛琉"},
["巴布亞紐幾內亞"] = {container = "大洋洲", wp = "Papua New Guinea"},
["巴布亚新几内亚"] = {alias_of = "巴布亞紐幾內亞"},
["薩摩亞"] = {container = "大洋洲", wp = "Samoa"},
["萨摩亚"] = {alias_of = "薩摩亞"},
["所羅門群島"] = {container = "大洋洲", wp = "Solomon Islands"},
["東加"] = {container = "大洋洲", wp = "Tonga"},
["湯加"] = {alias_of = "東加"},
["吐瓦魯"] = {container = "大洋洲", wp = "Tuvalu"},
["圖瓦盧"] = {alias_of = "吐瓦魯"},
["萬那杜"] = {container = "大洋洲", wp = "Vanuatu"},
["瓦努阿圖"] = {alias_of = "萬那杜"},
}
export.countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_overriding_bare_label_parents = {"+++", "countries"},
default_placetype = "country",
default_no_container_cat = true,
default_no_container_parent = true,
default_no_auto_augment_container = true,
placename_to_key = false,
data = export.countries,
}
-----------------------------------------------------------------------------------
-- Country-like entities --
-----------------------------------------------------------------------------------
export.country_like_entities = {
-- Special administrative regions of China
["香港"] = {
placetype = {"special administrative region", "region"},
container = "中國",
addl_parents = {"亞洲"},
is_city = true,
divs = {"districts"},
wp = "Hong Kong",
},
["澳門"] = {
placetype = {"special administrative region", "region"},
container = "中國",
addl_parents = {"亞洲"},
is_city = true,
wp = "Macau",
},
-- Western Sahara
["西撒哈拉"] = {
placetype = {"territory", "country"},
container = "非洲",
wp = "Western Sahara",
},
-- Kosovo (disputed)
["科索沃(部分承認)"] = {alias_of = "科索沃"},
-- Palestinian territories
["巴勒斯坦"] = {
placetype = {"country", "territory"},
container = "亞洲",
wp = "State of Palestine",
},
-- Key overseas territories
["波多黎各"] = {
placetype = {"commonwealth", "territory"},
container = "美國",
addl_parents = {"加勒比地區"},
wp = "Puerto Rico",
},
["關島"] = {
placetype = {"territory"},
container = "美國",
addl_parents = {"密克羅尼西亞"},
wp = "Guam",
},
["新喀里多尼亞"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"大洋洲"},
wp = "New Caledonia",
},
["法屬圭亞那"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"南美洲"},
wp = "French Guiana",
},
["留尼旺"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"非洲"},
wp = "Réunion",
},
["馬丁尼克"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"加勒比地區"},
wp = "Martinique",
},
["瓜德羅普"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"加勒比地區"},
wp = "Guadeloupe",
},
["格陵蘭"] = {
placetype = {"territory"},
container = "丹麥",
addl_parents = {"北美洲"},
wp = "Greenland",
},
["法羅群島"] = {
placetype = {"territory"},
container = "丹麥",
addl_parents = {"歐洲"},
wp = "Faroe Islands",
},
}
export.country_like_entities_group = {
canonicalize_key_container = make_canonicalize_key_container(nil, "country"),
default_placetype = "territory",
placename_to_key = false,
data = export.country_like_entities,
}
-----------------------------------------------------------------------------------
-- Former countries --
-----------------------------------------------------------------------------------
export.former_countries = {
["蘇聯"] = {
placetype = {"country"},
container = {"歐洲", "亞洲"},
is_former_place = true,
wp = "Soviet Union",
},
["南斯拉夫"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Yugoslavia",
},
["捷克斯洛伐克"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Czechoslovakia",
},
["東德"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "East Germany",
},
["西德"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "West Germany",
},
["奧匈帝國"] = {
placetype = {"empire"},
container = "歐洲",
is_former_place = true,
wp = "Austria-Hungary",
},
["鄂圖曼帝國"] = {
placetype = {"empire"},
container = {"歐洲", "亞洲"},
is_former_place = true,
wp = "Ottoman Empire",
},
["奧斯曼帝國"] = {alias_of = "鄂圖曼帝國"},
["羅馬帝國"] = {
placetype = {"empire"},
container = {"歐洲", "亞洲", "非洲"},
is_former_place = true,
wp = "Roman Empire",
},
["大英帝國"] = {
placetype = {"empire"},
is_former_place = true,
wp = "British Empire",
},
["普魯士"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Prussia",
},
}
export.former_countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_placetype = "country",
default_is_former_place = true,
placename_to_key = false,
data = export.former_countries,
}
-----------------------------------------------------------------------------------
-- United States states --
-----------------------------------------------------------------------------------
export.united_states_states = {
["阿拉巴馬"] = {wp = "Alabama"},
["阿拉斯加"] = {wp = "Alaska"},
["亞利桑那"] = {wp = "Arizona"},
["阿肯色"] = {wp = "Arkansas"},
["加利福尼亞"] = {wp = "California"},
["加州"] = {alias_of = "加利福尼亞"},
["科羅拉多"] = {wp = "Colorado"},
["康乃狄克"] = {wp = "Connecticut"},
["康涅狄格"] = {alias_of = "康乃狄克"},
["德拉瓦"] = {wp = "Delaware"},
["佛羅里達"] = {wp = "Florida"},
["佛罗里达"] = {alias_of = "佛羅里達"},
["佐治亞"] = {wp = "Georgia (U.S. state)"},
["夏威夷"] = {addl_parents = {"玻里尼西亞"}, wp = "Hawaii"},
["愛達荷"] = {wp = "Idaho"},
["伊利諾伊"] = {wp = "Illinois"},
["伊利诺伊"] = {alias_of = "伊利諾伊"},
["印地安那"] = {wp = "Indiana"},
["印第安納"] = {alias_of = "印地安那"},
["愛荷華"] = {wp = "Iowa"},
["堪薩斯"] = {wp = "Kansas"},
["肯塔基"] = {wp = "Kentucky"},
["路易斯安那"] = {wp = "Louisiana"},
["緬因"] = {wp = "Maine"},
["馬里蘭"] = {wp = "Maryland"},
["麻薩諸塞"] = {wp = "Massachusetts"},
["麻薩诸塞"] = {alias_of = "麻薩諸塞"},
["密西根"] = {wp = "Michigan"},
["密歇根"] = {alias_of = "密西根"},
["明尼蘇達"] = {wp = "Minnesota"},
["明尼苏达"] = {alias_of = "明尼蘇達"},
["密西西比"] = {wp = "Mississippi"},
["密蘇里"] = {wp = "Missouri"},
["蒙大拿"] = {wp = "Montana"},
["內布拉斯加"] = {wp = "Nebraska"},
["內華達"] = {wp = "Nevada"},
["新罕布什爾"] = {wp = "New Hampshire"},
["新澤西"] = {wp = "New Jersey"},
["新泽西"] = {alias_of = "新澤西"},
["新墨西哥"] = {wp = "New Mexico"},
["紐約"] = {wp = "New York (state)"},
["纽约"] = {alias_of = "紐約"},
["北卡羅來納"] = {wp = "North Carolina"},
["北达科他"] = {alias_of = "北達科他"},
["北達科他"] = {wp = "North Dakota"},
["俄亥俄"] = {wp = "Ohio"},
["奧克拉荷馬"] = {wp = "Oklahoma"},
["奧勒岡"] = {wp = "Oregon"},
["俄勒冈"] = {alias_of = "奧勒岡"},
["賓夕法尼亞"] = {wp = "Pennsylvania"},
["宾夕法尼亚"] = {alias_of = "賓夕法尼亞"},
["羅德島"] = {wp = "Rhode Island"},
["南卡羅來納"] = {wp = "South Carolina"},
["南達科他"] = {wp = "South Dakota"},
["田納西"] = {wp = "Tennessee"},
["田纳西"] = {alias_of = "田納西"},
["德克薩斯"] = {wp = "Texas"},
["德州"] = {alias_of = "德克薩斯"},
["猶他"] = {wp = "Utah"},
["佛蒙特"] = {wp = "Vermont"},
["弗吉尼亞"] = {wp = "Virginia"},
["弗吉尼亚"] = {alias_of = "弗吉尼亞"},
["維吉尼亞"] = {alias_of = "弗吉尼亞"},
["華盛頓州"] = {wp = "Washington (state)"},
["华盛顿州"] = {alias_of = "華盛頓州"},
["西維吉尼亞"] = {wp = "West Virginia"},
["西弗吉尼亞"] = {alias_of = "西維吉尼亞"},
["威斯康辛"] = {wp = "Wisconsin"},
["懷俄明"] = {wp = "Wyoming"},
-- Washington D.C. (federal district, treated like a state in holonym context)
["華盛頓特區"] = {placetype = {"federal district", "district"}, wp = "Washington, D.C."},
}
export.united_states_group = {
placename_to_key = false,
default_container = "美國",
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,
}
-----------------------------------------------------------------------------------
-- United Kingdom constituent countries --
-----------------------------------------------------------------------------------
export.united_kingdom_constituent_countries = {
["英格蘭"] = {divs = {"counties", "districts"}, wp = "England"},
["北愛爾蘭"] = {
placetype = {"constituent country", "province", "country"},
divs = {"counties", "districts"},
wp = "Northern Ireland",
},
["蘇格蘭"] = {divs = {{type = "council areas", container_parent_type = false}}, wp = "Scotland"},
["威爾斯"] = {divs = {"counties"}, wp = "Wales"},
["威尔士"] = {alias_of = "威爾斯"},
}
export.united_kingdom_group = {
placename_to_key = false,
default_container = "英國",
default_placetype = {"constituent country", "country"},
default_no_container_cat = true,
data = export.united_kingdom_constituent_countries,
}
-- Scotland council areas
export.scotland_council_areas = {
["Aberdeen市"] = {wp = "Aberdeen"},
["Aberdeenshire"] = {wp = "Aberdeenshire"},
["Angus"] = {wp = "Angus, Scotland"},
["Argyll and Bute"] = {wp = "Argyll and Bute"},
["Clackmannanshire"] = {wp = "Clackmannanshire"},
["Dumfries and Galloway"] = {wp = "Dumfries and Galloway"},
["Dundee市"] = {wp = "Dundee"},
["East Ayrshire"] = {wp = "East Ayrshire"},
["East Dunbartonshire"] = {wp = "East Dunbartonshire"},
["East Lothian"] = {wp = "East Lothian"},
["East Renfrewshire"] = {wp = "East Renfrewshire"},
["Edinburgh市"] = {wp = "Edinburgh"},
["Eilean Siar"] = {wp = "Outer Hebrides"},
["Falkirk"] = {wp = "Falkirk"},
["Fife"] = {wp = "Fife"},
["Glasgow市"] = {wp = "Glasgow"},
["高地"] = {wp = "Highland council area"},
["Highland"] = {alias_of = "高地", display = true},
["Inverclyde"] = {wp = "Inverclyde"},
["Midlothian"] = {wp = "Midlothian"},
["Moray"] = {wp = "Moray"},
["North Ayrshire"] = {wp = "North Ayrshire"},
["North Lanarkshire"] = {wp = "North Lanarkshire"},
["Orkney群島"] = {wp = "Orkney"},
["Perth and Kinross"] = {wp = "Perth and Kinross"},
["Renfrewshire"] = {wp = "Renfrewshire"},
["Scottish Borders"] = {wp = "Scottish Borders"},
["Shetland群島"] = {wp = "Shetland"},
["South Ayrshire"] = {wp = "South Ayrshire"},
["South Lanarkshire"] = {wp = "South Lanarkshire"},
["Stirling"] = {wp = "Stirling (council area)"},
["West Dunbartonshire"] = {wp = "West Dunbartonshire"},
["West Lothian"] = {wp = "West Lothian"},
}
export.scotland_group = {
placename_to_key = false,
default_container = "蘇格蘭",
default_placetype = "council area",
data = export.scotland_council_areas,
}
-- England counties (selected)
export.england_counties = {
["德文郡"] = {wp = "Devon"},
["薩默塞特郡"] = {wp = "Somerset"},
["肯特郡"] = {wp = "Kent"},
["薩里郡"] = {wp = "Surrey"},
["埃塞克斯郡"] = {wp = "Essex"},
["約克郡"] = {wp = "Yorkshire"},
["蘭開夏郡"] = {wp = "Lancashire"},
["諾福克郡"] = {wp = "Norfolk"},
}
export.england_group = {
placename_to_key = false,
default_container = "英格蘭",
default_placetype = "county",
data = export.england_counties,
}
-- Northern Ireland counties (stub table required by place-placetypes.lua)
export.northern_ireland_counties = {}
export.northern_ireland_group = {
placename_to_key = false,
default_container = "北愛爾蘭",
default_placetype = "county",
data = export.northern_ireland_counties,
}
-- Ireland counties (stub table required by place-placetypes.lua)
export.ireland_counties = {}
export.ireland_group = {
placename_to_key = false,
default_container = "愛爾蘭",
default_placetype = "county",
data = export.ireland_counties,
}
-----------------------------------------------------------------------------------
-- China provinces --
-----------------------------------------------------------------------------------
export.china_provinces = {
-- Provinces
["安徽"] = {wp = "Anhui"},
["福建"] = {wp = "Fujian"},
["甘肅"] = {wp = "Gansu"},
["廣東"] = {wp = "Guangdong"},
["貴州"] = {wp = "Guizhou"},
["海南"] = {wp = "Hainan"},
["河北"] = {wp = "Hebei"},
["黑龍江"] = {wp = "Heilongjiang"},
["河南"] = {wp = "Henan"},
["湖北"] = {wp = "Hubei"},
["湖南"] = {wp = "Hunan"},
["江蘇"] = {wp = "Jiangsu"},
["江西"] = {wp = "Jiangxi"},
["吉林"] = {wp = "Jilin"},
["遼寧"] = {wp = "Liaoning"},
["青海"] = {wp = "Qinghai"},
["陝西"] = {wp = "Shaanxi"},
["山東"] = {wp = "Shandong"},
["山西"] = {wp = "Shanxi"},
["四川"] = {wp = "Sichuan"},
["雲南"] = {wp = "Yunnan"},
["浙江"] = {wp = "Zhejiang"},
-- Autonomous regions
["廣西壯族自治區"] = {placetype = "autonomous region", wp = "Guangxi"},
["廣西"] = {alias_of = "廣西壯族自治區"},
["內蒙古自治區"] = {placetype = "autonomous region", wp = "Inner Mongolia"},
["內蒙古"] = {alias_of = "內蒙古自治區"},
["寧夏回族自治區"] = {placetype = "autonomous region", wp = "Ningxia"},
["寧夏"] = {alias_of = "寧夏回族自治區"},
["西藏自治區"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"},
["西藏"] = {alias_of = "西藏自治區"},
["新疆維吾爾自治區"] = {placetype = "autonomous region", wp = "Xinjiang"},
["新疆"] = {alias_of = "新疆維吾爾自治區"},
-- Direct-administered municipalities (treated as province-level for holonym purposes)
["北京"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Beijing"},
["北京市"] = {alias_of = "北京"},
["上海"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Shanghai"},
["上海市"] = {alias_of = "上海"},
["天津"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Tianjin"},
["天津市"] = {alias_of = "天津"},
["重慶"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Chongqing"},
["重慶市"] = {alias_of = "重慶"},
}
export.china_group = {
placename_to_key = false,
default_container = "中國",
default_placetype = "province",
default_divs = {
"prefecture-level cities",
"districts",
{type = "counties", cat_as = "counties and county-level cities"},
{type = "county-level cities", cat_as = "counties and county-level cities"},
},
data = export.china_provinces,
}
-----------------------------------------------------------------------------------
-- Taiwan counties --
-----------------------------------------------------------------------------------
-- Note: In zhwikt, Taiwan county keys use Chinese names directly.
-- The enwikt-style lookup `taiwan_counties["Chiayi County, Taiwan"]` will return nil
-- (correct: no English suffix auto-detection for Chinese holonym names).
export.taiwan_counties = {
["彰化縣"] = {wp = "Changhua County"},
["嘉義縣"] = {wp = "Chiayi County"},
["新竹縣"] = {wp = "Hsinchu County"},
["花蓮縣"] = {wp = "Hualien County"},
["金門縣"] = {wp = "Kinmen County"},
["連江縣"] = {wp = "Lienchiang County"},
["苗栗縣"] = {wp = "Miaoli County"},
["南投縣"] = {wp = "Nantou County"},
["澎湖縣"] = {wp = "Penghu County"},
["屏東縣"] = {wp = "Pingtung County"},
["臺東縣"] = {wp = "Taitung County"},
["宜蘭縣"] = {wp = "Yilan County"},
["雲林縣"] = {wp = "Yunlin County"},
-- Special municipalities (province-level)
["臺北市"] = {placetype = "special municipality", wp = "Taipei"},
["新北市"] = {placetype = "special municipality", wp = "New Taipei"},
["桃園市"] = {placetype = "special municipality", wp = "Taoyuan City"},
["臺中市"] = {placetype = "special municipality", wp = "Taichung"},
["臺南市"] = {placetype = "special municipality", wp = "Tainan"},
["高雄市"] = {placetype = "special municipality", wp = "Kaohsiung"},
["嘉義市"] = {placetype = "city", wp = "Chiayi City"},
["新竹市"] = {placetype = "city", wp = "Hsinchu City"},
["基隆市"] = {placetype = "city", wp = "Keelung"},
}
export.taiwan_group = {
placename_to_key = false,
default_container = "臺灣",
default_placetype = "county",
default_divs = {"districts", "townships"},
data = export.taiwan_counties,
}
-----------------------------------------------------------------------------------
-- Canada provinces and territories --
-----------------------------------------------------------------------------------
export.canada_provinces_and_territories = {
["亞伯達"] = {wp = "Alberta"},
["艾伯塔"] = {alias_of = "亞伯達"},
["英屬哥倫比亞"] = {wp = "British Columbia"},
["卑詩省"] = {alias_of = "英屬哥倫比亞"},
["馬尼托巴"] = {wp = "Manitoba"},
["新不倫瑞克"] = {wp = "New Brunswick"},
["紐芬蘭與拉布拉多"] = {wp = "Newfoundland and Labrador"},
["西北地區"] = {placetype = "territory", wp = "Northwest Territories"},
["新斯科舍"] = {wp = "Nova Scotia"},
["努納武特"] = {placetype = "territory", wp = "Nunavut"},
["安大略"] = {divs = {"counties", "regional municipalities"}, wp = "Ontario"},
["愛德華王子島"] = {wp = "Prince Edward Island"},
["魁北克"] = {wp = "Quebec"},
["薩斯喀徹溫"] = {wp = "Saskatchewan"},
["育空"] = {placetype = "territory", wp = "Yukon"},
}
export.canada_group = {
placename_to_key = false,
default_container = "加拿大",
default_placetype = "province",
data = export.canada_provinces_and_territories,
}
-----------------------------------------------------------------------------------
-- Australia states and territories --
-----------------------------------------------------------------------------------
export.australia_states_and_territories = {
["新南威爾斯"] = {wp = "New South Wales"},
["維多利亞州"] = {wp = "Victoria (Australia)"},
["昆士蘭"] = {wp = "Queensland"},
["南澳大利亞"] = {wp = "South Australia"},
["西澳大利亞"] = {wp = "Western Australia"},
["塔斯馬尼亞"] = {wp = "Tasmania"},
["澳大利亞首都領地"] = {placetype = "territory", wp = "Australian Capital Territory"},
["北領地"] = {placetype = "territory", wp = "Northern Territory"},
}
export.australia_group = {
placename_to_key = false,
default_container = "澳大利亞",
default_placetype = "state",
data = export.australia_states_and_territories,
}
-----------------------------------------------------------------------------------
-- India states and union territories --
-----------------------------------------------------------------------------------
export.india_states_and_union_territories = {
["安達曼-尼科巴群島"] = {placetype = "union territory", wp = "Andaman and Nicobar Islands"},
["安得拉邦"] = {wp = "Andhra Pradesh"},
["阿魯納恰爾邦"] = {wp = "Arunachal Pradesh"},
["阿薩姆"] = {wp = "Assam"},
["比哈爾邦"] = {wp = "Bihar"},
["昌迪加爾"] = {placetype = "union territory", wp = "Chandigarh"},
["恰蒂斯加爾邦"] = {wp = "Chhattisgarh"},
["達德拉-納加爾哈維利和達曼-第烏"] = {placetype = "union territory", wp = "Dadra and Nagar Haveli and Daman and Diu"},
["德里"] = {placetype = "union territory", wp = "Delhi"},
["果阿"] = {wp = "Goa"},
["古吉拉特邦"] = {wp = "Gujarat"},
["哈里亞納邦"] = {wp = "Haryana"},
["喜馬偕爾邦"] = {wp = "Himachal Pradesh"},
["查謨和克什米爾"] = {placetype = "union territory", wp = "Jammu and Kashmir (union territory)"},
["賈坎德邦"] = {wp = "Jharkhand"},
["卡納塔克邦"] = {wp = "Karnataka"},
["喀拉拉邦"] = {wp = "Kerala"},
["拉達克"] = {placetype = "union territory", wp = "Ladakh"},
["拉克沙群島"] = {placetype = "union territory", wp = "Lakshadweep"},
["中央邦"] = {wp = "Madhya Pradesh"},
["馬哈拉施特拉邦"] = {wp = "Maharashtra"},
["曼尼普爾邦"] = {wp = "Manipur"},
["梅加拉亞邦"] = {wp = "Meghalaya"},
["米佐拉姆邦"] = {wp = "Mizoram"},
["那加蘭邦"] = {wp = "Nagaland"},
["奧里薩邦"] = {wp = "Odisha"},
["本地治里"] = {placetype = "union territory", wp = "Puducherry"},
["旁遮普邦"] = {wp = "Punjab, India"},
["拉賈斯坦邦"] = {wp = "Rajasthan"},
["錫金"] = {wp = "Sikkim"},
["泰米爾納德邦"] = {wp = "Tamil Nadu"},
["特倫甘納邦"] = {wp = "Telangana"},
["特里普拉邦"] = {wp = "Tripura"},
["北方邦"] = {wp = "Uttar Pradesh"},
["北阿坎德邦"] = {wp = "Uttarakhand"},
["西孟加拉邦"] = {wp = "West Bengal"},
}
export.india_group = {
placename_to_key = false,
default_container = "印度",
default_placetype = "state",
default_divs = {"districts"},
data = export.india_states_and_union_territories,
}
-----------------------------------------------------------------------------------
-- Japan prefectures --
-----------------------------------------------------------------------------------
-- Note: export.japan_prefectures is accessed directly by place-placetypes.lua
-- using English-style keys (e.g. "Tokyo Prefecture, Japan"). Those lookups return
-- nil for Chinese keys, which is correct: no English "Prefecture" suffix is added.
export.japan_prefectures = {
["北海道"] = {placetype = {"prefecture"}, wp = "Hokkaido"},
["青森縣"] = {wp = "Aomori Prefecture"},
["岩手縣"] = {wp = "Iwate Prefecture"},
["宮城縣"] = {wp = "Miyagi Prefecture"},
["秋田縣"] = {wp = "Akita Prefecture"},
["山形縣"] = {wp = "Yamagata Prefecture"},
["福島縣"] = {wp = "Fukushima Prefecture"},
["茨城縣"] = {wp = "Ibaraki Prefecture"},
["栃木縣"] = {wp = "Tochigi Prefecture"},
["群馬縣"] = {wp = "Gunma Prefecture"},
["埼玉縣"] = {wp = "Saitama Prefecture"},
["千葉縣"] = {wp = "Chiba Prefecture"},
["東京都"] = {placetype = {"prefecture"}, wp = "Tokyo"},
["神奈川縣"] = {wp = "Kanagawa Prefecture"},
["新潟縣"] = {wp = "Niigata Prefecture"},
["富山縣"] = {wp = "Toyama Prefecture"},
["石川縣"] = {wp = "Ishikawa Prefecture"},
["福井縣"] = {wp = "Fukui Prefecture"},
["山梨縣"] = {wp = "Yamanashi Prefecture"},
["長野縣"] = {wp = "Nagano Prefecture"},
["岐阜縣"] = {wp = "Gifu Prefecture"},
["靜岡縣"] = {wp = "Shizuoka Prefecture"},
["愛知縣"] = {wp = "Aichi Prefecture"},
["三重縣"] = {wp = "Mie Prefecture"},
["滋賀縣"] = {wp = "Shiga Prefecture"},
["京都府"] = {placetype = {"prefecture"}, wp = "Kyoto Prefecture"},
["大阪府"] = {placetype = {"prefecture"}, wp = "Osaka Prefecture"},
["兵庫縣"] = {wp = "Hyogo Prefecture"},
["奈良縣"] = {wp = "Nara Prefecture"},
["和歌山縣"] = {wp = "Wakayama Prefecture"},
["鳥取縣"] = {wp = "Tottori Prefecture"},
["島根縣"] = {wp = "Shimane Prefecture"},
["岡山縣"] = {wp = "Okayama Prefecture"},
["廣島縣"] = {wp = "Hiroshima Prefecture"},
["山口縣"] = {wp = "Yamaguchi Prefecture"},
["德島縣"] = {wp = "Tokushima Prefecture"},
["香川縣"] = {wp = "Kagawa Prefecture"},
["愛媛縣"] = {wp = "Ehime Prefecture"},
["高知縣"] = {wp = "Kochi Prefecture"},
["福岡縣"] = {wp = "Fukuoka Prefecture"},
["佐賀縣"] = {wp = "Saga Prefecture"},
["長崎縣"] = {wp = "Nagasaki Prefecture"},
["熊本縣"] = {wp = "Kumamoto Prefecture"},
["大分縣"] = {wp = "Oita Prefecture"},
["宮崎縣"] = {wp = "Miyazaki Prefecture"},
["鹿兒島縣"] = {wp = "Kagoshima Prefecture"},
["沖繩縣"] = {wp = "Okinawa Prefecture"},
}
export.japan_group = {
placename_to_key = false,
default_container = "日本",
default_placetype = "prefecture",
default_divs = {"cities", "districts"},
data = export.japan_prefectures,
}
-----------------------------------------------------------------------------------
-- Germany states (Bundesländer) --
-----------------------------------------------------------------------------------
export.germany_states = {
["巴登-符騰堡"] = {wp = "Baden-Württemberg"},
["巴伐利亞"] = {wp = "Bavaria"},
["柏林"] = {wp = "Berlin"},
["布蘭登堡"] = {wp = "Brandenburg"},
["不來梅"] = {wp = "Bremen"},
["漢堡"] = {wp = "Hamburg"},
["黑森"] = {wp = "Hesse"},
["梅克倫堡-前波美拉尼亞"] = {wp = "Mecklenburg-Vorpommern"},
["下薩克森"] = {wp = "Lower Saxony"},
["北萊茵-威斯特法倫"] = {wp = "North Rhine-Westphalia"},
["萊茵蘭-普法爾茨"] = {wp = "Rhineland-Palatinate"},
["薩爾"] = {wp = "Saarland"},
["薩克森"] = {wp = "Saxony"},
["薩克森-安哈爾特"] = {wp = "Saxony-Anhalt"},
["石勒蘇益格-荷爾斯泰因"] = {wp = "Schleswig-Holstein"},
["圖林根"] = {wp = "Thuringia"},
}
export.germany_group = {
placename_to_key = false,
default_container = "德國",
default_placetype = "state",
data = export.germany_states,
}
-----------------------------------------------------------------------------------
-- Italy regions (Regioni) --
-----------------------------------------------------------------------------------
export.italy_regions = {
["阿布魯佐"] = {wp = "Abruzzo"},
["巴西利卡塔"] = {wp = "Basilicata"},
["卡拉布里亞"] = {wp = "Calabria"},
["坎帕尼亞"] = {wp = "Campania"},
["艾米利亞-羅馬涅"] = {wp = "Emilia-Romagna"},
["弗留利-威尼斯朱利亞"] = {wp = "Friuli-Venezia Giulia"},
["拉齊奧"] = {wp = "Lazio"},
["利古里亞"] = {wp = "Liguria"},
["倫巴第"] = {wp = "Lombardy"},
["倫巴底"] = {alias_of = "倫巴第"},
["馬爾凱"] = {wp = "Marche"},
["莫利塞"] = {wp = "Molise"},
["皮埃蒙特"] = {wp = "Piedmont"},
["普利亞"] = {wp = "Apulia"},
["阿普利亞"] = {alias_of = "普利亞"},
["薩丁尼亞"] = {wp = "Sardinia"},
["西西里"] = {wp = "Sicily"},
["托斯卡納"] = {wp = "Tuscany"},
["特倫蒂諾-上阿迪傑"] = {wp = "Trentino-Alto Adige/Südtirol"},
["翁布里亞"] = {wp = "Umbria"},
["奧斯塔谷"] = {wp = "Aosta Valley"},
["威尼托"] = {wp = "Veneto"},
}
export.italy_group = {
placename_to_key = false,
default_container = "意大利",
default_placetype = "region",
data = export.italy_regions,
}
-----------------------------------------------------------------------------------
-- Spain autonomous communities (Comunidades autónomas) --
-----------------------------------------------------------------------------------
export.spain_autonomous_communities = {
["安達盧西亞"] = {wp = "Andalusia"},
["安達魯西亞"] = {alias_of = "安達盧西亞"},
["阿拉貢"] = {wp = "Aragon"},
["阿斯圖里亞斯"] = {wp = "Asturias"},
["巴利阿里群島"] = {wp = "Balearic Islands"},
["巴斯克"] = {wp = "Basque Country (autonomous community)"},
["加那利群島"] = {wp = "Canary Islands"},
["坎塔布里亞"] = {wp = "Cantabria"},
["卡斯蒂利亞-拉曼恰"] = {wp = "Castilla-La Mancha"},
["卡斯蒂利亞-萊昂"] = {wp = "Castilla y León"},
["加泰羅尼亞"] = {wp = "Catalonia"},
["加泰隆尼亞"] = {alias_of = "加泰羅尼亞"},
["埃斯特雷馬杜拉"] = {wp = "Extremadura"},
["加利西亞"] = {wp = "Galicia (Spain)"},
["拉里奧哈"] = {wp = "La Rioja (autonomous community)"},
["馬德里自治區"] = {wp = "Community of Madrid"},
["穆爾西亞"] = {wp = "Region of Murcia"},
["納瓦拉"] = {wp = "Navarre"},
["巴倫西亞"] = {wp = "Valencian Community"},
["巴倫西亞自治區"] = {alias_of = "巴倫西亞"},
}
export.spain_group = {
placename_to_key = false,
default_container = "西班牙",
default_placetype = "autonomous community",
data = export.spain_autonomous_communities,
}
-----------------------------------------------------------------------------------
-- China prefecture-level cities --
-- Mirrors enwikt china_prefecture_level_cities (168 entries) and --
-- china_prefecture_level_cities_2 (4 entries, merged here since Chinese names --
-- are unambiguous: 台州/泰州, 蘇州/宿州 do not clash). --
-----------------------------------------------------------------------------------
export.china_prefecture_level_cities = {
-- Guangdong
["廣州"] = {container = "廣東", wp = "Guangzhou"},
["東莞"] = {container = "廣東", wp = "Dongguan"},
["佛山"] = {container = "廣東", wp = "Foshan"},
["惠州"] = {container = "廣東", wp = "Huizhou"},
["江門"] = {container = "廣東", wp = "Jiangmen"},
["深圳"] = {container = "廣東", wp = "Shenzhen"},
["中山"] = {container = "廣東", wp = "Zhongshan"},
["汕頭"] = {container = "廣東", wp = "Shantou"},
["潮州"] = {container = "廣東", wp = "Chaozhou"},
["揭陽"] = {container = "廣東", wp = "Jieyang"},
["珠海"] = {container = "廣東", wp = "Zhuhai"},
["湛江"] = {container = "廣東", wp = "Zhanjiang"},
["茂名"] = {container = "廣東", wp = "Maoming"},
["清遠"] = {container = "廣東", wp = "Qingyuan"},
["肇慶"] = {container = "廣東", wp = "Zhaoqing"},
-- Direct-administered municipalities (also in china_provinces; duplicated here for division categorisation)
["上海"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Shanghai"},
["北京"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Beijing"},
["重慶"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Chongqing"},
["天津"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Tianjin"},
-- Jiangsu
["常熟"] = {container = "江蘇", wp = "Changshu"},
["常州"] = {container = "江蘇", wp = "Changzhou"},
["蘇州"] = {container = "江蘇", wp = "Suzhou"},
["無錫"] = {container = "江蘇", wp = "Wuxi"},
["南京"] = {container = "江蘇", wp = "Nanjing"},
["南通"] = {container = "江蘇", wp = "Nantong"},
["江陰"] = {container = "江蘇", wp = "Jiangyin"},
["張家港"] = {container = "江蘇", wp = "Zhangjiagang"},
["徐州"] = {container = "江蘇", wp = "Xuzhou"},
["揚州"] = {container = "江蘇", wp = "Yangzhou"},
["鹽城"] = {container = "江蘇", wp = "Yancheng"},
["淮安"] = {container = "江蘇", wp = "Huai'an"},
["連雲港"] = {container = "江蘇", wp = "Lianyungang"},
["宿遷"] = {container = "江蘇", wp = "Suqian"},
["鎮江"] = {container = "江蘇", wp = "Zhenjiang"},
["崑山"] = {container = "江蘇", wp = "Kunshan"},
["泰州"] = {container = "江蘇", wp = "Taizhou, Jiangsu"}, -- distinct from 台州 (Zhejiang)
-- Zhejiang
["杭州"] = {container = "浙江", wp = "Hangzhou"},
["紹興"] = {container = "浙江", wp = "Shaoxing"},
["寧波"] = {container = "浙江", wp = "Ningbo"},
["慈溪"] = {container = "浙江", wp = "Cixi"},
["余姚"] = {container = "浙江", wp = "Yuyao"},
["溫州"] = {container = "浙江", wp = "Wenzhou"},
["瑞安"] = {placetype = "county-level city", container = {key = "溫州", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Rui'an"},
["台州"] = {container = "浙江", wp = "Taizhou, Zhejiang"},
["義烏"] = {container = "浙江", wp = "Yiwu"},
["嘉興"] = {container = "浙江", wp = "Jiaxing"},
["金華"] = {container = "浙江", wp = "Jinhua"},
["湖州"] = {container = "浙江", wp = "Huzhou"},
["永康"] = {placetype = "county-level city", container = {key = "金華", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Yongkang, Zhejiang"},
-- Fujian
["廈門"] = {container = "福建", wp = "Xiamen"},
["晉江"] = {container = "福建", wp = "Jinjiang"},
["泉州"] = {container = "福建", wp = "Quanzhou"},
["莆田"] = {container = "福建", wp = "Putian"},
["福州"] = {container = "福建", wp = "Fuzhou"},
-- Shandong
["青島"] = {container = "山東", wp = "Qingdao"},
["臨沂"] = {container = "山東", wp = "Linyi"},
["淄博"] = {container = "山東", wp = "Zibo"},
["濟南"] = {container = "山東", wp = "Jinan"},
["濰坊"] = {container = "山東", wp = "Weifang"},
["煙台"] = {container = "山東", wp = "Yantai"},
["濟寧"] = {container = "山東", wp = "Jining"},
["泰安"] = {container = "山東", wp = "Tai'an"},
["威海"] = {container = "山東", wp = "Weihai"},
["菏澤"] = {container = "山東", wp = "Heze"},
["德州"] = {container = "山東", wp = "Dezhou"},
["日照"] = {container = "山東", wp = "Rizhao"},
["聊城"] = {container = "山東", wp = "Liaocheng"},
["棗莊"] = {container = "山東", wp = "Zaozhuang"},
["滕州"] = {placetype = "county-level city", container = {key = "棗莊", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Tengzhou"},
["東營"] = {container = "山東", wp = "Dongying"},
-- Henan
["鄭州"] = {container = "河南", wp = "Zhengzhou"},
["洛陽"] = {container = "河南", wp = "Luoyang"},
["新鄉"] = {container = "河南", wp = "Xinxiang"},
["信陽"] = {container = "河南", wp = "Xinyang"},
["安陽"] = {container = "河南", wp = "Anyang"},
["開封"] = {container = "河南", wp = "Kaifeng"},
["許昌"] = {container = "河南", wp = "Xuchang"},
["濮陽"] = {container = "河南", wp = "Puyang"},
["商丘"] = {container = "河南", wp = "Shangqiu"},
["南陽"] = {container = "河南", wp = "Nanyang, Henan"},
["焦作"] = {container = "河南", wp = "Jiaozuo"},
["平頂山"] = {container = "河南", wp = "Pingdingshan"},
["周口"] = {container = "河南", wp = "Zhoukou"},
["駐馬店"] = {container = "河南", wp = "Zhumadian"},
-- Hubei
["武漢"] = {container = "湖北", wp = "Wuhan"},
["襄陽"] = {container = "湖北", wp = "Xiangyang"},
["宜昌"] = {container = "湖北", wp = "Yichang"},
["鄂州"] = {container = "湖北", wp = "Ezhou"},
["十堰"] = {container = "湖北", wp = "Shiyan"},
-- Hunan
["長沙"] = {container = "湖南", wp = "Changsha"},
["株洲"] = {container = "湖南", wp = "Zhuzhou"},
["衡陽"] = {container = "湖南", wp = "Hengyang"},
["邵陽"] = {container = "湖南", wp = "Shaoyang"},
["岳陽"] = {container = "湖南", wp = "Yueyang"},
["常德"] = {container = "湖南", wp = "Changde"},
["瀏陽"] = {placetype = "county-level city", container = {key = "長沙", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Liuyang"},
-- Sichuan
["成都"] = {container = "四川", wp = "Chengdu"},
["綿陽"] = {container = "四川", wp = "Mianyang"},
["南充"] = {container = "四川", wp = "Nanchong"},
["達州"] = {container = "四川", wp = "Dazhou"},
["瀘州"] = {container = "四川", wp = "Luzhou"},
["宜賓"] = {container = "四川", wp = "Yibin"},
-- Yunnan
["昆明"] = {container = "雲南", wp = "Kunming"},
["曲靖"] = {container = "雲南", wp = "Qujing"},
-- Guizhou
["貴陽"] = {container = "貴州", wp = "Guiyang"},
["遵義"] = {container = "貴州", wp = "Zunyi"},
["六盤水"] = {container = "貴州", wp = "Liupanshui"},
["畢節"] = {container = "貴州", wp = "Bijie"},
-- Shaanxi
["西安"] = {container = "陝西", wp = "Xi'an"},
["咸陽"] = {container = "陝西", wp = "Xianyang"},
["寶雞"] = {container = "陝西", wp = "Baoji"},
-- Heilongjiang
["哈爾濱"] = {container = "黑龍江", wp = "Harbin"},
["大慶"] = {container = "黑龍江", wp = "Daqing"},
["齊齊哈爾"] = {container = "黑龍江", wp = "Qiqihar"},
-- Liaoning
["瀋陽"] = {container = "遼寧", wp = "Shenyang"},
["撫順"] = {container = "遼寧", wp = "Fushun"},
["大連"] = {container = "遼寧", wp = "Dalian"},
["鞍山"] = {container = "遼寧", wp = "Anshan"},
["錦州"] = {container = "遼寧", wp = "Jinzhou"},
["葫蘆島"] = {container = "遼寧", wp = "Huludao"},
["盤錦"] = {container = "遼寧", wp = "Panjin"},
-- Jilin
["長春"] = {container = "吉林", wp = "Changchun"},
["吉林市"] = {container = "吉林", wp = "Jilin City"}, -- distinct from 吉林 (province)
-- Anhui
["合肥"] = {container = "安徽", wp = "Hefei"},
["蚌埠"] = {container = "安徽", wp = "Bengbu"},
["淮南"] = {container = "安徽", wp = "Huainan"},
["蕪湖"] = {container = "安徽", wp = "Wuhu"},
["淮北"] = {container = "安徽", wp = "Huaibei"},
["滁州"] = {container = "安徽", wp = "Chuzhou"},
["六安"] = {container = "安徽", wp = "Lu'an"},
["阜陽"] = {container = "安徽", wp = "Fuyang, Anhui"},
["宿州"] = {container = "安徽", wp = "Suzhou, Anhui"}, -- distinct from 蘇州 (Jiangsu)
-- Hebei
["石家莊"] = {container = "河北", wp = "Shijiazhuang"},
["邯鄲"] = {container = "河北", wp = "Handan"},
["唐山"] = {container = "河北", wp = "Tangshan"},
["秦皇島"] = {container = "河北", wp = "Qinhuangdao"},
["邢台"] = {container = "河北", wp = "Xingtai"},
["保定"] = {container = "河北", wp = "Baoding"},
["張家口"] = {container = "河北", wp = "Zhangjiakou"},
["衡水"] = {container = "河北", wp = "Hengshui"},
["滄州"] = {container = "河北", wp = "Cangzhou"},
-- Shanxi
["太原"] = {container = "山西", wp = "Taiyuan"},
["大同"] = {container = "山西", wp = "Datong"},
["長治"] = {container = "山西", wp = "Changzhi"},
["臨汾"] = {container = "山西", wp = "Linfen"},
-- Jiangxi
["南昌"] = {container = "江西", wp = "Nanchang"},
["贛州"] = {container = "江西", wp = "Ganzhou"},
["上饒"] = {container = "江西", wp = "Shangrao"},
["九江"] = {container = "江西", wp = "Jiujiang"},
-- Guangxi (autonomous region)
["南寧"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Nanning"},
["柳州"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Liuzhou"},
["桂林"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Guilin"},
["玉林"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Yulin, Guangxi"},
["北海"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Beihai"},
["貴港"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Guigang"},
-- Inner Mongolia (autonomous region)
["呼和浩特"] = {container = {key = "內蒙古", placetype = "autonomous region"}, wp = "Hohhot"},
["包頭"] = {container = {key = "內蒙古", placetype = "autonomous region"}, wp = "Baotou"},
["赤峰"] = {container = {key = "內蒙古", placetype = "autonomous region"}, wp = "Chifeng"},
-- Xinjiang (autonomous region)
["烏魯木齊"] = {container = {key = "新疆", placetype = "autonomous region"}, wp = "Ürümqi"},
-- Ningxia (autonomous region)
["銀川"] = {container = {key = "寧夏", placetype = "autonomous region"}, wp = "Yinchuan"},
-- Hainan
["海口"] = {container = "海南", wp = "Haikou"},
-- Qinghai
["西寧"] = {container = "青海", wp = "Xining"},
-- Gansu
["蘭州"] = {container = "甘肅", wp = "Lanzhou"},
-- Chongqing subdivision (district 142 miles from Chongqing proper)
["萬州"] = {placetype = "district", container = {key = "重慶", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "Wanzhou"},
-- County within Suqian prefecture-level city
["沭陽"] = {placetype = "county", container = {key = "宿遷", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Shuyang County"},
}
export.china_prefecture_level_cities_group = {
placename_to_key = false,
default_placetype = {"prefecture-level city", "city"},
default_divs = {
"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,
}
-----------------------------------------------------------------------------------
-- New York City boroughs --
-----------------------------------------------------------------------------------
export.new_york_boroughs = {
["布朗克斯"] = {the = true, wp = "The Bronx"},
["布魯克林"] = {wp = "Brooklyn"},
["曼哈頓"] = {wp = "Manhattan"},
["皇后區"] = {wp = "Queens"},
["史泰登島"] = {wp = "Staten Island"},
}
export.new_york_boroughs_group = {
placename_to_key = false,
default_container = {key = "紐約市", placetype = "city"},
default_placetype = "borough",
default_is_city = true,
data = export.new_york_boroughs,
}
-----------------------------------------------------------------------------------
-- Romania counties --
-----------------------------------------------------------------------------------
export.romania_counties = {
["阿爾巴縣"] = {wp = "Alba County"},
["阿拉德縣"] = {wp = "Arad County"},
["阿爾傑什縣"] = {wp = "Argeș County"},
["巴考縣"] = {wp = "Bacău County"},
["比霍爾縣"] = {wp = "Bihor County"},
["比斯特里察-訥瑟烏德縣"] = {wp = "Bistrița-Năsăud County"},
["博托沙尼縣"] = {wp = "Botoșani County"},
["布拉索夫縣"] = {wp = "Brașov County"},
["布勒伊拉縣"] = {wp = "Brăila County"},
["布澤烏縣"] = {wp = "Buzău County"},
["卡拉什-塞韋林縣"] = {wp = "Caraș-Severin County"},
["克盧日縣"] = {wp = "Cluj County"},
["康斯坦察縣"] = {wp = "Constanța County"},
["科瓦斯納縣"] = {wp = "Covasna County"},
["克勒拉希縣"] = {wp = "Călărași County"},
["多爾日縣"] = {wp = "Dolj County"},
["登博維察縣"] = {wp = "Dâmbovița County"},
["加拉茨縣"] = {wp = "Galați County"},
["久爾久縣"] = {wp = "Giurgiu County"},
["戈爾日縣"] = {wp = "Gorj County"},
["哈爾吉塔縣"] = {wp = "Harghita County"},
["胡內多阿拉縣"] = {wp = "Hunedoara County"},
["雅洛米察縣"] = {wp = "Ialomița County"},
["雅西縣"] = {wp = "Iași County"},
["伊爾福夫縣"] = {wp = "Ilfov County"},
["馬拉穆列什縣"] = {wp = "Maramureș County"},
["梅赫丁茨縣"] = {wp = "Mehedinți County"},
["穆列什縣"] = {wp = "Mureș County"},
["尼亞姆茨縣"] = {wp = "Neamț County"},
["奧爾特縣"] = {wp = "Olt County"},
["普拉霍瓦縣"] = {wp = "Prahova County"},
["薩圖馬雷縣"] = {wp = "Satu Mare County"},
["錫比烏縣"] = {wp = "Sibiu County"},
["蘇恰瓦縣"] = {wp = "Suceava County"},
["瑟拉日縣"] = {wp = "Sălaj County"},
["特列奧爾曼縣"] = {wp = "Teleorman County"},
["蒂米什縣"] = {wp = "Timiș County"},
["圖爾恰縣"] = {wp = "Tulcea County"},
["瓦斯盧伊縣"] = {wp = "Vaslui County"},
["弗蘭恰縣"] = {wp = "Vrancea County"},
["沃爾恰縣"] = {wp = "Vâlcea County"},
}
export.romania_group = {
placename_to_key = false,
default_container = "羅馬尼亞",
default_placetype = "county",
data = export.romania_counties,
}
-----------------------------------------------------------------------------------
-- Bulgaria provinces --
-----------------------------------------------------------------------------------
export.bulgaria_provinces = {
["布拉戈耶夫格勒省"] = {wp = "Blagoevgrad Province"},
["布爾加斯省"] = {wp = "Burgas Province"},
["多布里奇省"] = {wp = "Dobrich Province"},
["加布羅沃省"] = {wp = "Gabrovo Province"},
["哈斯科沃省"] = {wp = "Haskovo Province"},
["卡爾扎利省"] = {wp = "Kardzhali Province"},
["屈斯滕迪爾省"] = {wp = "Kyustendil Province"},
["洛維奇省"] = {wp = "Lovech Province"},
["蒙塔納省"] = {wp = "Montana Province"},
["帕扎爾吉克省"] = {wp = "Pazardzhik Province"},
["佩爾尼克省"] = {wp = "Pernik Province"},
["普萊文省"] = {wp = "Pleven Province"},
["普羅夫迪夫省"] = {wp = "Plovdiv Province"},
["拉茲格勒省"] = {wp = "Razgrad Province"},
["魯塞省"] = {wp = "Ruse Province"},
["舒門省"] = {wp = "Shumen Province"},
["錫利斯特拉省"] = {wp = "Silistra Province"},
["斯利文省"] = {wp = "Sliven Province"},
["斯莫梁省"] = {wp = "Smolyan Province"},
["索非亞市省"] = {wp = "Sofia City Province"},
["索非亞省"] = {wp = "Sofia Province"},
["斯塔拉扎戈拉省"] = {wp = "Stara Zagora Province"},
["特爾戈維什泰省"] = {wp = "Targovishte Province"},
["瓦爾納省"] = {wp = "Varna Province"},
["大特爾諾沃省"] = {wp = "Veliko Tarnovo Province"},
["維丁省"] = {wp = "Vidin Province"},
["弗拉察省"] = {wp = "Vratsa Province"},
["揚博爾省"] = {wp = "Yambol Province"},
}
export.bulgaria_group = {
placename_to_key = false,
default_container = "保加利亞",
default_placetype = "province",
data = export.bulgaria_provinces,
}
-----------------------------------------------------------------------------------
-- Iran provinces --
-----------------------------------------------------------------------------------
export.iran_provinces = {
["阿爾博爾茲省"] = {wp = "Alborz Province"},
["阿爾達比勒省"] = {wp = "Ardabil Province"},
["布什爾省"] = {wp = "Bushehr Province"},
["恰哈爾馬哈勒-巴赫蒂亞里省"] = {wp = "Chaharmahal and Bakhtiari Province"},
["東阿塞拜疆省"] = {wp = "East Azerbaijan Province"},
["法爾斯省"] = {wp = "Fars Province"},
["帕爾斯省"] = {alias_of = "法爾斯省"},
["吉蘭省"] = {wp = "Gilan Province"},
["戈勒斯坦省"] = {wp = "Golestan Province"},
["哈馬丹省"] = {wp = "Hamadan Province"},
["霍爾木茲甘省"] = {wp = "Hormozgan Province"},
["伊拉姆省"] = {wp = "Ilam Province"},
["伊斯法罕省"] = {wp = "Isfahan Province"},
["克爾曼省"] = {wp = "Kerman Province"},
["克爾曼沙赫省"] = {wp = "Kermanshah Province"},
["胡齊斯坦省"] = {wp = "Khuzestan Province"},
["科吉盧耶-博亞赫邁德省"] = {wp = "Kohgiluyeh and Boyer-Ahmad Province"},
["庫爾德斯坦省"] = {wp = "Kurdistan Province"},
["洛雷斯坦省"] = {wp = "Lorestan Province"},
["馬爾卡齊省"] = {wp = "Markazi Province"},
["馬贊達蘭省"] = {wp = "Mazandaran Province"},
["北呼羅珊省"] = {wp = "North Khorasan Province"},
["加茲溫省"] = {wp = "Qazvin Province"},
["庫姆省"] = {wp = "Qom Province"},
["拉扎維呼羅珊省"] = {wp = "Razavi Khorasan Province"},
["森南省"] = {wp = "Semnan Province"},
["錫斯坦-俾路支斯坦省"] = {wp = "Sistan and Baluchestan Province"},
["南呼羅珊省"] = {wp = "South Khorasan Province"},
["德黑蘭省"] = {wp = "Tehran Province"},
["西阿塞拜疆省"] = {wp = "West Azerbaijan Province"},
["亞茲德省"] = {wp = "Yazd Province"},
["贊詹省"] = {wp = "Zanjan Province"},
}
export.iran_group = {
placename_to_key = false,
default_container = "伊朗",
default_placetype = "province",
data = export.iran_provinces,
}
-----------------------------------------------------------------------------------
-- Laos provinces --
-----------------------------------------------------------------------------------
export.laos_provinces = {
["阿塔坡省"] = {wp = "Attapeu Province"},
["博膠省"] = {wp = "Bokeo Province"},
["波里坎賽省"] = {wp = "Bolikhamxai Province"},
["占巴塞省"] = {wp = "Champasak Province"},
["華潘省"] = {wp = "Houaphanh Province"},
["甘蒙省"] = {wp = "Khammouane Province"},
["南塔省"] = {wp = "Luang Namtha Province"},
["琅勃拉邦省"] = {wp = "Luang Prabang Province"},
["烏多姆賽省"] = {wp = "Oudomxay Province"},
["豐沙里省"] = {wp = "Phongsaly Province"},
["沙拉灣省"] = {wp = "Salavan Province"},
["沙灣拿吉省"] = {wp = "Savannakhet Province"},
["萬象省"] = {wp = "Vientiane Province"},
["萬象直轄市"] = {placetype = "prefecture", wp = "Vientiane Prefecture"},
["賽亞武里省"] = {wp = "Sainyabuli Province"},
["塞公省"] = {wp = "Sekong Province"},
["賽頌本省"] = {wp = "Xaisomboun Province"},
["川壙省"] = {wp = "Xiangkhouang Province"},
}
export.laos_group = {
placename_to_key = false,
default_container = "寮國",
default_placetype = "province",
data = export.laos_provinces,
}
-----------------------------------------------------------------------------------
-- North Korea provinces --
-----------------------------------------------------------------------------------
export.north_korea_provinces = {
["慈江道"] = {wp = "Chagang Province"},
["咸鏡北道"] = {wp = "North Hamgyong Province"},
["咸鏡南道"] = {wp = "South Hamgyong Province"},
["黃海北道"] = {wp = "North Hwanghae Province"},
["黃海南道"] = {wp = "South Hwanghae Province"},
["江原道(北韓)"] = {wp = "Kangwon Province (North Korea)"},
["平安北道"] = {wp = "North Pyongan Province"},
["平安南道"] = {wp = "South Pyongan Province"},
["兩江道"] = {wp = "Ryanggang Province"},
}
export.north_korea_group = {
placename_to_key = false,
default_container = "北韓",
default_placetype = "province",
data = export.north_korea_provinces,
}
-----------------------------------------------------------------------------------
-- South Korea provinces --
-----------------------------------------------------------------------------------
export.south_korea_provinces = {
["忠清北道"] = {wp = "North Chungcheong Province"},
["忠清南道"] = {wp = "South Chungcheong Province"},
["江原道(南韓)"] = {wp = "Gangwon Province, South Korea"},
["京畿道"] = {wp = "Gyeonggi Province"},
["慶尚北道"] = {wp = "North Gyeongsang Province"},
["慶尚南道"] = {wp = "South Gyeongsang Province"},
["全羅北道"] = {wp = "North Jeolla Province"},
["全羅南道"] = {wp = "South Jeolla Province"},
["濟州道"] = {wp = "Jeju Province"},
}
export.south_korea_group = {
placename_to_key = false,
default_container = "南韓",
default_placetype = "province",
data = export.south_korea_provinces,
}
-----------------------------------------------------------------------------------
-- Thailand provinces --
-----------------------------------------------------------------------------------
export.thailand_provinces = {
["阿姆納特坤府"] = {wp = "Amnat Charoen Province"},
["紅統府"] = {wp = "Ang Thong Province"},
["彭侃府"] = {wp = "Bueng Kan Province"},
["武里南府"] = {wp = "Buriram Province"},
["北柳府"] = {wp = "Chachoengsao Province"},
["猜納府"] = {wp = "Chai Nat Province"},
["猜耶奔府"] = {wp = "Chaiyaphum Province"},
["尖竹汶府"] = {wp = "Chanthaburi Province"},
["清邁府"] = {wp = "Chiang Mai Province"},
["清萊府"] = {wp = "Chiang Rai Province"},
["春武里府"] = {wp = "Chonburi Province"},
["春蓬府"] = {wp = "Chumphon Province"},
["加拉信府"] = {wp = "Kalasin Province"},
["甘烹碧府"] = {wp = "Kamphaeng Phet Province"},
["北碧府"] = {wp = "Kanchanaburi Province"},
["孔敬府"] = {wp = "Khon Kaen Province"},
["甲米府"] = {wp = "Krabi Province"},
["南邦府"] = {wp = "Lampang Province"},
["南奔府"] = {wp = "Lamphun Province"},
["黎府"] = {wp = "Loei Province"},
["華富里府"] = {wp = "Lopburi Province"},
["夜豐頌府"] = {wp = "Mae Hong Son Province"},
["瑪哈沙拉堪府"] = {wp = "Maha Sarakham Province"},
["莫達罕府"] = {wp = "Mukdahan Province"},
["那空那育府"] = {wp = "Nakhon Nayok Province"},
["佛統府"] = {wp = "Nakhon Pathom Province"},
["那空帕農府"] = {wp = "Nakhon Phanom Province"},
["呵叻府"] = {wp = "Nakhon Ratchasima Province"},
["那空沙旺府"] = {wp = "Nakhon Sawan Province"},
["洛坤府"] = {wp = "Nakhon Si Thammarat Province"},
["難府"] = {wp = "Nan Province"},
["那拉提瓦府"] = {wp = "Narathiwat Province"},
["農布瓦蘭普府"] = {wp = "Nong Bua Lamphu Province"},
["廊開府"] = {wp = "Nong Khai Province"},
["暖武里府"] = {wp = "Nonthaburi Province"},
["巴吞他尼府"] = {wp = "Pathum Thani Province"},
["北大年府"] = {wp = "Pattani Province"},
["攀牙府"] = {wp = "Phang Nga Province"},
["博他侖府"] = {wp = "Phatthalung Province"},
["帕堯府"] = {wp = "Phayao Province"},
["碧差汶府"] = {wp = "Phetchabun Province"},
["碧武里府"] = {wp = "Phetchaburi Province"},
["披集府"] = {wp = "Phichit Province"},
["彭世洛府"] = {wp = "Phitsanulok Province"},
["大城府"] = {wp = "Phra Nakhon Si Ayutthaya Province"},
["帕府"] = {wp = "Phrae Province"},
["普吉府"] = {wp = "Phuket Province"},
["巴真府"] = {wp = "Prachinburi Province"},
["巴蜀府"] = {wp = "Prachuap Khiri Khan Province"},
["拉廊府"] = {wp = "Ranong Province"},
["叻丕府"] = {wp = "Ratchaburi Province"},
["羅勇府"] = {wp = "Rayong Province"},
["黎逸府"] = {wp = "Roi Et Province"},
["沙繳府"] = {wp = "Sa Kaeo Province"},
["色軍府"] = {wp = "Sakon Nakhon Province"},
["北欖府"] = {wp = "Samut Prakan Province"},
["沙沒沙空府"] = {wp = "Samut Sakhon Province"},
["沙沒頌堪府"] = {wp = "Samut Songkhram Province"},
["沙拉武里府"] = {wp = "Saraburi Province"},
["沙敦府"] = {wp = "Satun Province"},
["信武里府"] = {wp = "Sing Buri Province"},
["四色菊府"] = {wp = "Sisaket Province"},
["宋卡府"] = {wp = "Songkhla Province"},
["素可泰府"] = {wp = "Sukhothai Province"},
["素攀武里府"] = {wp = "Suphan Buri Province"},
["素叻他尼府"] = {wp = "Surat Thani Province"},
["素林府"] = {wp = "Surin Province"},
["達府"] = {wp = "Tak Province"},
["董里府"] = {wp = "Trang Province"},
["達叻府"] = {wp = "Trat Province"},
["烏汶府"] = {wp = "Ubon Ratchathani Province"},
["烏隆府"] = {wp = "Udon Thani Province"},
["烏泰他尼府"] = {wp = "Uthai Thani Province"},
["烏達拉勐府"] = {wp = "Uttaradit Province"},
["惹拉府"] = {wp = "Yala Province"},
["耶梭通府"] = {wp = "Yasothon Province"},
}
export.thailand_group = {
placename_to_key = false,
default_container = "泰國",
default_placetype = "province",
data = export.thailand_provinces,
}
-----------------------------------------------------------------------------------
-- Turkey provinces --
-----------------------------------------------------------------------------------
export.turkey_provinces = {
["阿達納省"] = {wp = "Adana Province"},
["阿德亞曼省"] = {wp = "Adıyaman Province"},
["阿菲永卡拉希薩爾省"] = {wp = "Afyonkarahisar Province"},
["阿里省"] = {wp = "Ağrı Province"},
["阿馬西亞省"] = {wp = "Amasya Province"},
["安卡拉省"] = {wp = "Ankara Province"},
["安塔利亞省"] = {wp = "Antalya Province"},
["阿爾特溫省"] = {wp = "Artvin Province"},
["艾登省"] = {wp = "Aydın Province"},
["巴勒克埃西爾省"] = {wp = "Balıkesir Province"},
["比萊吉克省"] = {wp = "Bilecik Province"},
["賓格爾省"] = {wp = "Bingöl Province"},
["比特利斯省"] = {wp = "Bitlis Province"},
["博盧省"] = {wp = "Bolu Province"},
["布爾杜爾省"] = {wp = "Burdur Province"},
["布爾薩省"] = {wp = "Bursa Province"},
["恰納卡萊省"] = {wp = "Çanakkale Province"},
["昌克勒省"] = {wp = "Çankırı Province"},
["喬魯姆省"] = {wp = "Çorum Province"},
["代尼茲利省"] = {wp = "Denizli Province"},
["迪亞巴克爾省"] = {wp = "Diyarbakır Province"},
["埃迪爾內省"] = {wp = "Edirne Province"},
["埃拉澤省"] = {wp = "Elazığ Province"},
["埃爾津詹省"] = {wp = "Erzincan Province"},
["埃爾祖魯姆省"] = {wp = "Erzurum Province"},
["埃斯基謝希爾省"] = {wp = "Eskişehir Province"},
["加濟安泰普省"] = {wp = "Gaziantep Province"},
["吉雷松省"] = {wp = "Giresun Province"},
["居米什哈內省"] = {wp = "Gümüşhane Province"},
["哈卡里省"] = {wp = "Hakkâri Province"},
["哈塔伊省"] = {wp = "Hatay Province"},
["伊斯帕爾塔省"] = {wp = "Isparta Province"},
["梅爾辛省"] = {wp = "Mersin Province"},
["伊茲密爾省"] = {wp = "İzmir Province"},
["卡爾斯省"] = {wp = "Kars Province"},
["卡斯塔莫努省"] = {wp = "Kastamonu Province"},
["開塞利省"] = {wp = "Kayseri Province"},
["柯克拉雷利省"] = {wp = "Kırklareli Province"},
["克爾謝希爾省"] = {wp = "Kırşehir Province"},
["科賈埃利省"] = {wp = "Kocaeli Province"},
["科尼亞省"] = {wp = "Konya Province"},
["屈塔希亞省"] = {wp = "Kütahya Province"},
["馬拉蒂亞省"] = {wp = "Malatya Province"},
["馬尼薩省"] = {wp = "Manisa Province"},
["卡赫拉曼馬拉什省"] = {wp = "Kahramanmaraş Province"},
["馬爾丁省"] = {wp = "Mardin Province"},
["穆拉省"] = {wp = "Muğla Province"},
["穆什省"] = {wp = "Muş Province"},
["內夫謝希爾省"] = {wp = "Nevşehir Province"},
["尼代省"] = {wp = "Niğde Province"},
["奧爾杜省"] = {wp = "Ordu Province"},
["里澤省"] = {wp = "Rize Province"},
["薩卡里亞省"] = {wp = "Sakarya Province"},
["薩姆松省"] = {wp = "Samsun Province"},
["錫爾特省"] = {wp = "Siirt Province"},
["錫諾普省"] = {wp = "Sinop Province"},
["錫瓦斯省"] = {wp = "Sivas Province"},
["泰基爾達省"] = {wp = "Tekirdağ Province"},
["托卡特省"] = {wp = "Tokat Province"},
["特拉布宗省"] = {wp = "Trabzon Province"},
["通傑利省"] = {wp = "Tunceli Province"},
["尚勒烏爾法省"] = {wp = "Şanlıurfa Province"},
["烏沙克省"] = {wp = "Uşak Province"},
["凡省"] = {wp = "Van Province"},
["約茲加特省"] = {wp = "Yozgat Province"},
["宗古爾達克省"] = {wp = "Zonguldak Province"},
["阿克薩賴省"] = {wp = "Aksaray Province"},
["拜布爾特省"] = {wp = "Bayburt Province"},
["卡拉曼省"] = {wp = "Karaman Province"},
["克勒克卡萊省"] = {wp = "Kırıkkale Province"},
["巴特曼省"] = {wp = "Batman Province"},
["蘇爾納克省"] = {wp = "Şırnak Province"},
["巴爾騰省"] = {wp = "Bartın Province"},
["阿爾達罕省"] = {wp = "Ardahan Province"},
["伊迪爾省"] = {wp = "Iğdır Province"},
["亞洛瓦省"] = {wp = "Yalova Province"},
["卡拉比克省"] = {wp = "Karabük Province"},
["基利斯省"] = {wp = "Kilis Province"},
["奧斯曼尼耶省"] = {wp = "Osmaniye Province"},
["迪茲傑省"] = {wp = "Düzce Province"},
}
export.turkey_group = {
placename_to_key = false,
default_container = "土耳其",
default_placetype = "province",
data = export.turkey_provinces,
}
-----------------------------------------------------------------------------------
-- Vietnam provinces --
-----------------------------------------------------------------------------------
export.vietnam_provinces = {
-- Northeast
["北江省"] = {wp = "Bắc Giang Province"},
["北件省"] = {wp = "Bắc Kạn Province"},
["高平省"] = {wp = "Cao Bằng Province"},
["河江省"] = {wp = "Hà Giang Province"},
["諒山省"] = {wp = "Lạng Sơn Province"},
["富壽省"] = {wp = "Phú Thọ Province"},
["廣寧省"] = {wp = "Quảng Ninh Province"},
["太原省"] = {wp = "Thái Nguyên Province"},
["宣光省"] = {wp = "Tuyên Quang Province"},
-- Northwest
["老街省"] = {wp = "Lào Cai Province"},
["安沛省"] = {wp = "Yên Bái Province"},
["奠邊省"] = {wp = "Điện Biên Province"},
["和平省"] = {wp = "Hoà Bình Province"},
["萊州省"] = {wp = "Lai Châu Province"},
["山羅省"] = {wp = "Sơn La Province"},
-- Red River Delta
["北寧省"] = {wp = "Bắc Ninh Province"},
["河南省"] = {wp = "Hà Nam Province"},
["海陽省"] = {wp = "Hải Dương Province"},
["興安省"] = {wp = "Hưng Yên Province"},
["南定省"] = {wp = "Nam Định Province"},
["寧平省"] = {wp = "Ninh Bình Province"},
["太平省"] = {wp = "Thái Bình Province"},
["永福省"] = {wp = "Vĩnh Phúc Province"},
-- North Central Coast
["河靜省"] = {wp = "Hà Tĩnh Province"},
["乂安省"] = {wp = "Nghệ An Province"},
["廣平省"] = {wp = "Quảng Bình Province"},
["廣治省"] = {wp = "Quảng Trị Province"},
["清化省"] = {wp = "Thanh Hoá Province"},
-- Central Highlands
["得樂省"] = {wp = "Đắk Lắk Province"},
["得農省"] = {wp = "Đăk Nông Province"},
["嘉萊省"] = {wp = "Gia Lai Province"},
["崑嵩省"] = {wp = "Kon Tum Province"},
["林同省"] = {wp = "Lâm Đồng Province"},
-- South Central Coast
["平定省"] = {wp = "Bình Định Province"},
["平順省"] = {wp = "Bình Thuận Province"},
["慶和省"] = {wp = "Khánh Hoà Province"},
["寧順省"] = {wp = "Ninh Thuận Province"},
["富安省"] = {wp = "Phú Yên Province"},
["廣南省"] = {wp = "Quảng Nam Province"},
["廣義省"] = {wp = "Quảng Ngãi Province"},
-- Southeast
["巴地-頭頓省"] = {wp = "Bà Rịa–Vũng Tàu Province"},
["平陽省"] = {wp = "Bình Dương Province"},
["平福省"] = {wp = "Bình Phước Province"},
["同奈省"] = {wp = "Đồng Nai Province"},
["西寧省"] = {wp = "Tây Ninh Province"},
-- Mekong Delta
["安江省"] = {wp = "An Giang Province"},
["薄寮省"] = {wp = "Bạc Liêu Province"},
["檳椥省"] = {wp = "Bến Tre Province"},
["金甌省"] = {wp = "Cà Mau Province"},
["同塔省"] = {wp = "Đồng Tháp Province"},
["後江省"] = {wp = "Hậu Giang Province"},
["堅江省"] = {wp = "Kiên Giang Province"},
["龍安省"] = {wp = "Long An Province"},
["朔莊省"] = {wp = "Sóc Trăng Province"},
["前江省"] = {wp = "Tiền Giang Province"},
["茶榮省"] = {wp = "Trà Vinh Province"},
["永隆省"] = {wp = "Vĩnh Long Province"},
}
export.vietnam_group = {
placename_to_key = false,
default_container = "越南",
default_placetype = "province",
data = export.vietnam_provinces,
}
-----------------------------------------------------------------------------------
-- Nigeria states --
-----------------------------------------------------------------------------------
export.nigeria_states = {
["阿比亞州"] = {wp = "Abia State"},
["阿達馬瓦州"] = {wp = "Adamawa State"},
["阿誇伊博姆州"] = {wp = "Akwa Ibom State"},
["阿南布拉州"] = {wp = "Anambra State"},
["包奇州"] = {wp = "Bauchi State"},
["貝耶薩州"] = {wp = "Bayelsa State"},
["貝努埃州"] = {wp = "Benue State"},
["博爾諾州"] = {wp = "Borno State"},
["跨河州"] = {wp = "Cross River State"},
["三角洲州"] = {wp = "Delta State"},
["埃博尼州"] = {wp = "Ebonyi State"},
["埃多州"] = {wp = "Edo State"},
["埃基蒂州"] = {wp = "Ekiti State"},
["埃努古州"] = {wp = "Enugu State"},
["阿布賈聯邦首都轄區"] = {placetype = {"federal territory", "territory", "state"}, the = true, wp = "Federal Capital Territory, Nigeria"},
["貢貝州"] = {wp = "Gombe State"},
["伊莫州"] = {wp = "Imo State"},
["吉加瓦州"] = {wp = "Jigawa State"},
["卡杜納州"] = {wp = "Kaduna State"},
["卡諾州"] = {wp = "Kano State"},
["卡齊納州"] = {wp = "Katsina State"},
["克比州"] = {wp = "Kebbi State"},
["科吉州"] = {wp = "Kogi State"},
["誇拉州"] = {wp = "Kwara State"},
["拉各斯州"] = {wp = "Lagos State"},
["納薩拉瓦州"] = {wp = "Nasarawa State"},
["尼日爾州"] = {wp = "Niger State"},
["奧貢州"] = {wp = "Ogun State"},
["翁多州"] = {wp = "Ondo State"},
["奧順州"] = {wp = "Osun State"},
["奧約州"] = {wp = "Oyo State"},
["高原州"] = {wp = "Plateau State"},
["河流州"] = {wp = "Rivers State"},
["索科托州"] = {wp = "Sokoto State"},
["塔拉巴州"] = {wp = "Taraba State"},
["約貝州"] = {wp = "Yobe State"},
["贊法拉州"] = {wp = "Zamfara State"},
}
export.nigeria_group = {
placename_to_key = false,
default_container = "奈及利亞",
default_placetype = "state",
data = export.nigeria_states,
}
-----------------------------------------------------------------------------------
-- Selected city groups --
-----------------------------------------------------------------------------------
-- Key world cities frequently used as holonyms (entries covered by dedicated city groups removed)
export.misc_cities = {
-- Americas
["費爾法克斯"] = {container = "弗吉尼亞", placetype = "city", is_city = true, wp = "Fairfax, Virginia"},
["斯克蘭頓"] = {container = "賓夕法尼亞", placetype = "city", is_city = true, wp = "Scranton, Pennsylvania"},
["里約熱內盧市"] = {container = "巴西", placetype = "city", is_city = true, wp = "Rio de Janeiro"},
["布宜諾斯艾利斯"] = {container = "阿根廷", placetype = "city", is_city = true, wp = "Buenos Aires"},
["聖地牙哥"] = {container = "智利", placetype = "city", is_city = true, wp = "Santiago"},
["波哥大"] = {container = "哥倫比亞", placetype = "city", is_city = true, wp = "Bogotá"},
["利馬"] = {container = "秘魯", placetype = "city", is_city = true, wp = "Lima"},
-- Europe
["阿姆斯特丹"] = {container = "荷蘭", placetype = "city", is_city = true, wp = "Amsterdam"},
["布魯塞爾"] = {container = "比利時", placetype = "city", is_city = true, wp = "Brussels"},
["維也納"] = {container = "奧地利", placetype = "city", is_city = true, wp = "Vienna"},
["伊斯坦布爾"] = {container = "土耳其", placetype = "city", is_city = true, wp = "Istanbul"},
["基輔"] = {container = "烏克蘭", placetype = "city", is_city = true, wp = "Kyiv"},
["華沙"] = {container = "波蘭", placetype = "city", is_city = true, wp = "Warsaw"},
["布拉格"] = {container = "捷克", placetype = "city", is_city = true, wp = "Prague"},
["布達佩斯"] = {container = "匈牙利", placetype = "city", is_city = true, wp = "Budapest"},
["斯德哥爾摩"] = {container = "瑞典", placetype = "city", is_city = true, wp = "Stockholm"},
["赫爾辛基"] = {container = "芬蘭", placetype = "city", is_city = true, wp = "Helsinki"},
["奧斯陸"] = {container = "挪威", placetype = "city", is_city = true, wp = "Oslo"},
["哥本哈根"] = {container = "丹麥", placetype = "city", is_city = true, wp = "Copenhagen"},
["里斯本"] = {container = "葡萄牙", placetype = "city", is_city = true, wp = "Lisbon"},
["雅典"] = {container = "希臘", placetype = "city", is_city = true, wp = "Athens"},
["蘇黎世"] = {container = "瑞士", placetype = "city", is_city = true, wp = "Zurich"},
["日內瓦"] = {container = "瑞士", placetype = "city", is_city = true, wp = "Geneva"},
["第比利斯"] = {container = "格魯吉亞", placetype = "city", is_city = true, wp = "Tbilisi"},
["貝爾格勒"] = {container = "塞爾維亞", placetype = "city", is_city = true, wp = "Belgrade"},
["薩格勒布"] = {container = "克羅埃西亞", placetype = "city", is_city = true, wp = "Zagreb"},
["都柏林"] = {container = "愛爾蘭", placetype = "city", is_city = true, wp = "Dublin"},
-- Asia
["北京市"] = {container = "北京", placetype = "city", is_city = true, wp = "Beijing"},
["上海市"] = {container = "上海", placetype = "city", is_city = true, wp = "Shanghai"},
["德里市"] = {container = "德里", placetype = "city", is_city = true, wp = "Delhi"},
["曼谷"] = {container = "泰國", placetype = "city", is_city = true, wp = "Bangkok"},
["吉隆坡"] = {container = "馬來西亞", placetype = "city", is_city = true, wp = "Kuala Lumpur"},
["開羅"] = {container = "埃及", placetype = "city", is_city = true, wp = "Cairo"},
["德黑蘭"] = {container = "伊朗", placetype = "city", is_city = true, wp = "Tehran"},
["安卡拉"] = {container = "土耳其", placetype = "city", is_city = true, wp = "Ankara"},
-- Oceania
["奧克蘭"] = {container = "紐西蘭", placetype = "city", is_city = true, wp = "Auckland"},
-- Africa
["開普敦"] = {container = "南非", placetype = "city", is_city = true, wp = "Cape Town"},
["約翰尼斯堡"] = {container = "南非", placetype = "city", is_city = true, wp = "Johannesburg"},
["奈洛比"] = {container = "肯亞", placetype = "city", is_city = true, wp = "Nairobi"},
}
export.misc_cities_group = {
placename_to_key = false,
default_placetype = "city",
default_is_city = true,
data = export.misc_cities,
}
-----------------------------------------------------------------------------------
-- Brazil states (for testcase coverage) --
-----------------------------------------------------------------------------------
export.brazil_states = {
["里約熱內盧州"] = {wp = "Rio de Janeiro (state)"},
["里約熱內盧"] = {alias_of = "里約熱內盧州"},
["聖保羅州"] = {wp = "São Paulo (state)"},
["米納斯吉拉斯"] = {wp = "Minas Gerais"},
["巴伊亞"] = {wp = "Bahia"},
["亞馬遜州"] = {wp = "Amazonas (Brazilian state)"},
["帕拉州"] = {wp = "Pará"},
["伯南布哥州"] = {wp = "Pernambuco"},
["南里奧格蘭德州"] = {wp = "Rio Grande do Sul"},
["巴西聯邦區"] = {wp = "Federal District (Brazil)"},
["塞阿拉州"] = {wp = "Ceará"},
["巴拉那州"] = {wp = "Paraná (state)"},
["戈亞斯州"] = {wp = "Goiás"},
["聖埃斯皮里圖州"] = {wp = "Espírito Santo"},
["馬拉尼昂州"] = {wp = "Maranhão"},
["北里奧格蘭德州"] = {wp = "Rio Grande do Norte"},
["聖卡塔琳娜州"] = {wp = "Santa Catarina (state)"},
["阿拉戈亞斯州"] = {wp = "Alagoas"},
["帕拉伊巴州"] = {wp = "Paraíba"},
["皮奧伊州"] = {wp = "Piauí"},
["阿克里州"] = {wp = "Acre (state)"},
["阿馬帕州"] = {wp = "Amapá"},
["馬托格羅索州"] = {wp = "Mato Grosso"},
["南馬托格羅索州"] = {wp = "Mato Grosso do Sul"},
["朗多尼亞州"] = {wp = "Rondônia"},
["羅賴馬州"] = {wp = "Roraima"},
["塞爾希培州"] = {wp = "Sergipe"},
["托坎廷斯州"] = {wp = "Tocantins"},
}
export.brazil_group = {
placename_to_key = false,
default_container = "巴西",
default_placetype = "state",
data = export.brazil_states,
}
-----------------------------------------------------------------------------------
-- France regions --
-----------------------------------------------------------------------------------
export.france_administrative_regions = {
["奧弗涅-隆河-阿爾卑斯大區"] = {wp = "Auvergne-Rhône-Alpes"},
["勃艮第-弗朗什-孔泰大區"] = {wp = "Bourgogne-Franche-Comté"},
["布列塔尼大區"] = {wp = "Brittany (administrative region)"},
["中央-羅亞爾河谷大區"] = {wp = "Centre-Val de Loire"},
["科西嘉大區"] = {wp = "Corsica"},
["大東部大區"] = {wp = "Grand Est"},
["上法蘭西大區"] = {wp = "Hauts-de-France"},
["法蘭西島大區"] = {wp = "Île-de-France"},
["諾曼底大區"] = {wp = "Normandy"},
["新阿基坦大區"] = {wp = "Nouvelle-Aquitaine"},
["奧克西塔尼大區"] = {wp = "Occitanie"},
["盧瓦爾河地區大區"] = {wp = "Pays de la Loire"},
["普羅旺斯-阿爾卑斯-蔚藍海岸大區"] = {wp = "Provence-Alpes-Côte d'Azur"},
-- Old region names (pre-2016) as aliases
["北部-加萊海峽大區"] = {wp = "Nord-Pas-de-Calais"},
["加來海峽大區"] = {alias_of = "北部-加萊海峽大區"},
}
export.france_group = {
placename_to_key = false,
default_container = "法國",
default_placetype = "region",
data = export.france_administrative_regions,
}
-- France departments (abbreviated list)
export.france_departments = {
["北部省"] = {wp = "Nord (department)", container = "上法蘭西大區"},
["加來海峽省"] = {wp = "Pas-de-Calais", container = "上法蘭西大區"},
["巴黎市"] = {wp = "Paris", container = "法蘭西島大區"},
["上塞納省"] = {wp = "Hauts-de-Seine", container = "法蘭西島大區"},
}
export.france_departments_group = {
placename_to_key = false,
default_container = "法國",
default_placetype = "department",
data = export.france_departments,
}
-----------------------------------------------------------------------------------
-- Austria states --
-----------------------------------------------------------------------------------
export.austria_states = {
["維也納州"] = {wp = "Vienna (state)"},
["下奧地利州"] = {wp = "Lower Austria"},
["上奧地利州"] = {wp = "Upper Austria"},
["施泰爾馬克州"] = {wp = "Styria"},
["蒂羅爾州"] = {wp = "Tyrol (state)"},
["克恩頓州"] = {wp = "Carinthia"},
["薩爾茨堡州"] = {wp = "Salzburg (state)"},
["福拉爾貝格州"] = {wp = "Vorarlberg"},
["布根蘭州"] = {wp = "Burgenland"},
}
export.austria_group = {
placename_to_key = false,
default_container = "奧地利",
default_placetype = "state",
data = export.austria_states,
}
-----------------------------------------------------------------------------------
-- Bangladesh divisions --
-----------------------------------------------------------------------------------
export.bangladesh_divisions = {
["巴里薩爾專區"] = {wp = "Barisal Division"},
["吉大港專區"] = {wp = "Chittagong Division"},
["達卡專區"] = {wp = "Dhaka Division"},
["庫爾納專區"] = {wp = "Khulna Division"},
["邁門辛專區"] = {wp = "Mymensingh Division"},
["拉吉沙希專區"] = {wp = "Rajshahi Division"},
["朗普爾專區"] = {wp = "Rangpur Division"},
["錫爾赫特專區"] = {wp = "Sylhet Division"},
}
export.bangladesh_group = {
placename_to_key = false,
default_container = "孟加拉國",
default_placetype = "division",
data = export.bangladesh_divisions,
}
-----------------------------------------------------------------------------------
-- Egypt governorates --
-----------------------------------------------------------------------------------
export.egypt_governorates = {
["開羅省"] = {wp = "Cairo Governorate"},
["吉薩省"] = {wp = "Giza Governorate"},
["夏爾基亞省"] = {wp = "Sharqia Governorate"},
["達卡利亞省"] = {wp = "Dakahlia Governorate"},
["貝海拉省"] = {wp = "Beheira Governorate"},
["明亞省"] = {wp = "Minya Governorate"},
["蓋柳比亞省"] = {wp = "Qalyubia Governorate"},
["索哈傑省"] = {wp = "Sohag Governorate"},
["亞歷山大省"] = {wp = "Alexandria Governorate"},
["加爾比亞省"] = {wp = "Gharbia Governorate"},
["艾斯尤特省"] = {wp = "Asyut Governorate"},
["莫諾菲亞省"] = {wp = "Monufia Governorate"},
["法尤姆省"] = {wp = "Faiyum Governorate"},
["卡夫爾謝赫省"] = {wp = "Kafr El Sheikh Governorate"},
["基納省"] = {wp = "Qena Governorate"},
["本尼蘇威夫省"] = {wp = "Beni Suef Governorate"},
["達米埃塔省"] = {wp = "Damietta Governorate"},
["阿斯旺省"] = {wp = "Aswan Governorate"},
["伊斯梅利亞省"] = {wp = "Ismailia Governorate"},
["盧克索省"] = {wp = "Luxor Governorate"},
["蘇伊士省"] = {wp = "Suez Governorate"},
["塞德港省"] = {wp = "Port Said Governorate"},
["馬特魯省"] = {wp = "Matrouh Governorate"},
["北西奈省"] = {wp = "North Sinai Governorate"},
["紅海省"] = {wp = "Red Sea Governorate"},
["新河谷省"] = {wp = "New Valley Governorate"},
["南西奈省"] = {wp = "South Sinai Governorate"},
}
export.egypt_group = {
placename_to_key = false,
default_container = "埃及",
default_placetype = "governorate",
data = export.egypt_governorates,
}
-----------------------------------------------------------------------------------
-- Finland regions --
-----------------------------------------------------------------------------------
export.finland_regions = {
["拉普蘭省"] = {wp = "Lapland (Finland)"},
["北奧斯特博滕省"] = {wp = "North Ostrobothnia"},
["卡亞尼省"] = {wp = "Kainuu"},
["北卡累利亞省"] = {wp = "North Karelia"},
["北薩沃省"] = {wp = "Northern Savonia"},
["南薩沃省"] = {wp = "Southern Savonia"},
["南卡累利亞省"] = {wp = "South Karelia"},
["中芬蘭省"] = {wp = "Central Finland"},
["南奧斯特博滕省"] = {wp = "South Ostrobothnia"},
["奧斯特博滕省"] = {wp = "Ostrobothnia (region)"},
["中奧斯特博滕省"] = {wp = "Central Ostrobothnia"},
["皮爾卡馬省"] = {wp = "Pirkanmaa"},
["薩塔昆塔省"] = {wp = "Satakunta"},
["派亞特哈米省"] = {wp = "Päijät-Häme"},
["坎塔哈米省"] = {wp = "Tavastia Proper"},
["屈米河谷省"] = {wp = "Kymenlaakso"},
["烏西馬省"] = {wp = "Uusimaa"},
["西南芬蘭省"] = {wp = "Southwest Finland"},
["奧蘭群島"] = {wp = "Åland", placetype = {"autonomous region", "region"}},
}
export.finland_group = {
placename_to_key = false,
default_container = "芬蘭",
default_placetype = "region",
data = export.finland_regions,
}
-----------------------------------------------------------------------------------
-- Greece regions --
-----------------------------------------------------------------------------------
export.greece_regions = {
["阿提卡大區"] = {wp = "Attica (region)"},
["中希臘大區"] = {wp = "Central Greece (administrative region)"},
["中馬其頓大區"] = {wp = "Central Macedonia"},
["克里特大區"] = {wp = "Crete"},
["東馬其頓和色雷斯大區"] = {wp = "Eastern Macedonia and Thrace"},
["伊庇魯斯大區"] = {wp = "Epirus (region)"},
["愛奧尼亞群島大區"] = {wp = "Ionian Islands (region)"},
["北愛琴大區"] = {wp = "North Aegean"},
["伯羅奔尼撒大區"] = {wp = "Peloponnese (region)"},
["南愛琴大區"] = {wp = "South Aegean"},
["塞薩利大區"] = {wp = "Thessaly"},
["西希臘大區"] = {wp = "Western Greece"},
["西馬其頓大區"] = {wp = "Western Macedonia"},
["阿托斯山"] = {wp = "Monastic community of Mount Athos", placetype = {"autonomous region", "region"}},
}
export.greece_group = {
placename_to_key = false,
default_container = "希臘",
default_placetype = "region",
data = export.greece_regions,
}
-----------------------------------------------------------------------------------
-- Indonesia provinces --
-----------------------------------------------------------------------------------
export.indonesia_provinces = {
["亞齊省"] = {wp = "Aceh"},
["峇里省"] = {wp = "Bali"},
["邦加勿里洞省"] = {wp = "Bangka Belitung Islands"},
["萬丹省"] = {wp = "Banten"},
["明古魯省"] = {wp = "Bengkulu"},
["中爪哇省"] = {wp = "Central Java"},
["中加里曼丹省"] = {wp = "Central Kalimantan"},
["中巴布亞省"] = {wp = "Central Papua"},
["中蘇拉威西省"] = {wp = "Central Sulawesi"},
["東爪哇省"] = {wp = "East Java"},
["東加里曼丹省"] = {wp = "East Kalimantan"},
["東努沙登加拉省"] = {wp = "East Nusa Tenggara"},
["哥倫打洛省"] = {wp = "Gorontalo"},
["巴布亞高地省"] = {wp = "Highland Papua"},
["雅加達首都特區"] = {wp = "Jakarta"},
["占碑省"] = {wp = "Jambi"},
["楠榜省"] = {wp = "Lampung"},
["馬魯古省"] = {wp = "Maluku"},
["北加里曼丹省"] = {wp = "North Kalimantan"},
["北馬魯古省"] = {wp = "North Maluku"},
["北蘇拉威西省"] = {wp = "North Sulawesi"},
["北巴布亞省"] = {wp = "North Papua"},
["北蘇門答臘省"] = {wp = "North Sumatra"},
["巴布亞省"] = {wp = "Papua (province)"},
["廖內省"] = {wp = "Riau"},
["廖內群島省"] = {wp = "Riau Islands"},
["東南蘇拉威西省"] = {wp = "Southeast Sulawesi"},
["南加里曼丹省"] = {wp = "South Kalimantan"},
["南巴布亞省"] = {wp = "South Papua"},
["南蘇拉威西省"] = {wp = "South Sulawesi"},
["南蘇門答臘省"] = {wp = "South Sumatra"},
["西南巴布亞省"] = {wp = "Southwest Papua"},
["西爪哇省"] = {wp = "West Java"},
["西加里曼丹省"] = {wp = "West Kalimantan"},
["西努沙登加拉省"] = {wp = "West Nusa Tenggara"},
["西巴布亞省"] = {wp = "West Papua (province)"},
["西蘇拉威西省"] = {wp = "West Sulawesi"},
["西蘇門答臘省"] = {wp = "West Sumatra"},
["日惹特區"] = {wp = "Special Region of Yogyakarta"},
}
export.indonesia_group = {
placename_to_key = false,
default_container = "印度尼西亞",
default_placetype = "province",
data = export.indonesia_provinces,
}
-----------------------------------------------------------------------------------
-- Lebanon governorates --
-----------------------------------------------------------------------------------
export.lebanon_governorates = {
["阿卡爾省"] = {wp = "Akkar Governorate"},
["巴勒貝克-赫爾梅勒省"] = {wp = "Baalbek-Hermel Governorate"},
["貝魯特省"] = {wp = "Beirut Governorate"},
["貝卡省"] = {wp = "Beqaa Governorate"},
["克塞旺-裘拜勒省"] = {wp = "Keserwan-Jbeil Governorate"},
["黎巴嫩山省"] = {wp = "Mount Lebanon Governorate"},
["納巴蒂耶省"] = {wp = "Nabatieh Governorate"},
["北部省(黎巴嫩)"] = {wp = "North Governorate (Lebanon)", no_auto_augment_container = true},
["南部省(黎巴嫩)"] = {wp = "South Governorate (Lebanon)", no_auto_augment_container = true},
}
export.lebanon_group = {
placename_to_key = false,
default_container = "黎巴嫩",
default_placetype = "governorate",
data = export.lebanon_governorates,
}
-----------------------------------------------------------------------------------
-- Malaysia states --
-----------------------------------------------------------------------------------
export.malaysia_states = {
["柔佛州"] = {wp = "Johor"},
["吉打州"] = {wp = "Kedah"},
["吉蘭丹州"] = {wp = "Kelantan"},
["馬六甲州"] = {wp = "Malacca"},
["森美蘭州"] = {wp = "Negeri Sembilan"},
["彭亨州"] = {wp = "Pahang"},
["檳城州"] = {wp = "Penang"},
["霹靂州"] = {wp = "Perak"},
["玻璃市州"] = {wp = "Perlis"},
["沙巴州"] = {wp = "Sabah"},
["砂拉越州"] = {wp = "Sarawak"},
["雪蘭莪州"] = {wp = "Selangor"},
["登嘉樓州"] = {wp = "Terengganu"},
}
export.malaysia_group = {
placename_to_key = false,
default_container = "馬來西亞",
default_placetype = "state",
data = export.malaysia_states,
}
-----------------------------------------------------------------------------------
-- Malta regions --
-----------------------------------------------------------------------------------
export.malta_regions = {
["東部區(馬爾他)"] = {wp = "Eastern Region, Malta", no_auto_augment_container = true},
["戈佐區"] = {wp = "Gozo Region"},
["北部區(馬爾他)"] = {wp = "Northern Region, Malta", no_auto_augment_container = true},
["港口區"] = {wp = "Port Region, Malta"},
["南部區(馬爾他)"] = {wp = "Southern Region, Malta", no_auto_augment_container = true},
["西部區(馬爾他)"] = {wp = "Western Region, Malta", no_auto_augment_container = true},
}
export.malta_group = {
placename_to_key = false,
default_container = "馬爾他",
default_placetype = "region",
data = export.malta_regions,
}
-----------------------------------------------------------------------------------
-- Mexico states --
-----------------------------------------------------------------------------------
export.mexico_states = {
["阿瓜斯卡連特斯州"] = {wp = "Aguascalientes"},
["下加利福尼亞州"] = {wp = "Baja California"},
["南下加利福尼亞州"] = {wp = "Baja California Sur"},
["坎佩切州"] = {wp = "Campeche"},
["恰帕斯州"] = {wp = "Chiapas"},
["奇瓦瓦州"] = {wp = "Chihuahua (state)"},
["科阿韋拉州"] = {wp = "Coahuila"},
["科利馬州"] = {wp = "Colima"},
["杜蘭戈州"] = {wp = "Durango"},
["瓜納華托州"] = {wp = "Guanajuato"},
["格雷羅州"] = {wp = "Guerrero"},
["伊達爾戈州"] = {wp = "Hidalgo (state)"},
["哈利斯科州"] = {wp = "Jalisco"},
["墨西哥州"] = {wp = "State of Mexico"},
["米卻肯州"] = {wp = "Michoacán"},
["莫雷洛斯州"] = {wp = "Morelos"},
["納亞里特州"] = {wp = "Nayarit"},
["新萊昂州"] = {wp = "Nuevo León"},
["瓦哈卡州"] = {wp = "Oaxaca"},
["普埃布拉州"] = {wp = "Puebla"},
["克雷塔羅州"] = {wp = "Querétaro"},
["金塔納羅奧州"] = {wp = "Quintana Roo"},
["聖路易斯波托西州"] = {wp = "San Luis Potosí"},
["錫那羅亞州"] = {wp = "Sinaloa"},
["索諾拉州"] = {wp = "Sonora"},
["塔巴斯科州"] = {wp = "Tabasco (state)"},
["塔毛利帕斯州"] = {wp = "Tamaulipas"},
["特拉斯卡拉州"] = {wp = "Tlaxcala"},
["韋拉克魯斯州"] = {wp = "Veracruz"},
["尤卡坦州"] = {wp = "Yucatán"},
["薩卡特卡斯州"] = {wp = "Zacatecas"},
}
export.mexico_group = {
placename_to_key = false,
default_container = "墨西哥",
default_placetype = "state",
data = export.mexico_states,
}
-----------------------------------------------------------------------------------
-- Moldova districts and ATUs --
-----------------------------------------------------------------------------------
export.moldova_districts = {
["阿內尼諾伊區"] = {wp = "Anenii Noi District"},
["巴薩拉比亞斯卡區"] = {wp = "Basarabeasca District"},
["布里切尼區"] = {wp = "Briceni District"},
["卡胡爾區"] = {wp = "Cahul District"},
["坎特米爾區"] = {wp = "Cantemir District"},
["克勒拉希區"] = {wp = "Călărași District"},
["考沙尼區"] = {wp = "Căușeni District"},
["奇米什利亞區"] = {wp = "Cimișlia District"},
["克里烏列尼區"] = {wp = "Criuleni District"},
["東杜沙尼區"] = {wp = "Dondușeni District"},
["德羅基亞區"] = {wp = "Drochia District"},
["杜巴薩里區"] = {wp = "Dubăsari District"},
["埃迪涅茨區"] = {wp = "Edineț District"},
["法勒什蒂區"] = {wp = "Fălești District"},
["弗洛雷什蒂區"] = {wp = "Florești District"},
["格洛德尼區"] = {wp = "Glodeni District"},
["欣切什蒂區"] = {wp = "Hîncești District"},
["亞洛韋尼區"] = {wp = "Ialoveni District"},
["萊奧瓦區"] = {wp = "Leova District"},
["尼斯波雷尼區"] = {wp = "Nisporeni District"},
["奧克尼察區"] = {wp = "Ocnița District"},
["奧爾海伊區"] = {wp = "Orhei District"},
["雷齊納區"] = {wp = "Rezina District"},
["雷什卡尼區"] = {wp = "Rîșcani District"},
["辛格雷伊區"] = {wp = "Sîngerei District"},
["索羅卡區"] = {wp = "Soroca District"},
["斯特拉沙尼區"] = {wp = "Strășeni District"},
["紹爾達涅什蒂區"] = {wp = "Șoldănești District"},
["斯蒂凡沃達區"] = {wp = "Ștefan Vodă District"},
["塔拉克利亞區"] = {wp = "Taraclia District"},
["泰萊涅什蒂區"] = {wp = "Telenești District"},
["翁格尼區"] = {wp = "Ungheni District"},
["基希訥烏市"] = {wp = "Chișinău", placetype = "municipality"},
["巴爾茨市"] = {wp = "Bălți", placetype = "municipality"},
["加告茲自治領土"] = {wp = "Gagauzia", placetype = {"autonomous territorial unit", "autonomous region", "region"}},
["本德爾市"] = {wp = "Bender, Moldova", placetype = "municipality"},
["德涅斯特河沿岸"] = {wp = "Transnistria", placetype = {"autonomous territorial unit", "autonomous region", "region"}},
}
export.moldova_group = {
placename_to_key = false,
default_container = "摩爾多瓦",
default_placetype = {"district", "raion"},
data = export.moldova_districts,
}
-----------------------------------------------------------------------------------
-- Morocco regions --
-----------------------------------------------------------------------------------
export.morocco_regions = {
["丹吉爾-得土安-霍賽馬大區"] = {wp = "Tangier-Tetouan-Al Hoceima"},
["東方大區(摩洛哥)"] = {wp = "Oriental, Morocco"},
["非斯-梅克內斯大區"] = {wp = "Fez-Meknes"},
["拉巴特-薩累-肯尼特拉大區"] = {wp = "Rabat-Salé-Kénitra"},
["貝尼梅拉勒-赫尼夫拉大區"] = {wp = "Béni Mellal-Khénifra"},
["卡薩布蘭卡-塞塔特大區"] = {wp = "Casablanca-Settat"},
["馬拉喀什-薩菲大區"] = {wp = "Marrakesh-Safi"},
["德拉阿-塔菲拉勒特大區"] = {wp = "Drâa-Tafilalet"},
["蘇斯-馬薩大區"] = {wp = "Souss-Massa"},
["蓋勒明-烏德農大區"] = {wp = "Guelmim-Oued Noun"},
["拉阿永-薩基亞-哈姆拉大區"] = {wp = "Laâyoune-Sakia El Hamra"},
["達赫拉-奧以德達赫卜大區"] = {wp = "Dakhla-Oued Ed-Dahab"},
}
export.morocco_group = {
placename_to_key = false,
default_container = "摩洛哥",
default_placetype = "region",
data = export.morocco_regions,
}
-----------------------------------------------------------------------------------
-- Netherlands provinces --
-----------------------------------------------------------------------------------
export.netherlands_provinces = {
["德倫特省"] = {wp = "Drenthe"},
["弗萊福蘭省"] = {wp = "Flevoland"},
["弗里斯蘭省"] = {wp = "Friesland"},
["格爾德蘭省"] = {wp = "Gelderland"},
["格羅寧根省"] = {wp = "Groningen (province)"},
["林堡省(荷蘭)"] = {wp = "Limburg (Netherlands)"},
["北布拉班特省"] = {wp = "North Brabant"},
["北荷蘭省"] = {wp = "North Holland"},
["上艾瑟爾省"] = {wp = "Overijssel"},
["南荷蘭省"] = {wp = "South Holland"},
["烏特勒支省"] = {wp = "Utrecht (province)"},
["澤蘭省"] = {wp = "Zeeland"},
}
export.netherlands_group = {
placename_to_key = false,
default_container = "荷蘭",
default_placetype = "province",
data = export.netherlands_provinces,
}
-----------------------------------------------------------------------------------
-- New Zealand regions --
-----------------------------------------------------------------------------------
export.new_zealand_regions = {
["北地大區"] = {wp = "Northland Region"},
["奧克蘭大區"] = {wp = "Auckland Region"},
["懷卡托大區"] = {wp = "Waikato Region"},
["豐盛灣大區"] = {wp = "Bay of Plenty Region"},
["吉斯伯恩大區"] = {wp = "Gisborne District", placetype = {"region", "district"}},
["霍克斯灣大區"] = {wp = "Hawke's Bay Region"},
["塔拉納基大區"] = {wp = "Taranaki Region"},
["馬納瓦圖-旺阿努伊大區"] = {wp = "Manawatū-Whanganui Region"},
["惠靈頓大區"] = {wp = "Wellington Region"},
["塔斯曼大區"] = {wp = "Tasman District", placetype = {"region", "district"}},
["納爾遜大區"] = {wp = "Nelson, New Zealand", placetype = {"region", "city"}, is_city = true},
["馬爾堡大區"] = {wp = "Marlborough District", placetype = {"region", "district"}},
["西海岸大區"] = {wp = "West Coast Region"},
["坎特伯雷大區"] = {wp = "Canterbury Region"},
["奧塔哥大區"] = {wp = "Otago Region"},
["南地大區"] = {wp = "Southland Region"},
}
export.new_zealand_group = {
placename_to_key = false,
default_container = "紐西蘭",
default_placetype = "region",
data = export.new_zealand_regions,
}
-----------------------------------------------------------------------------------
-- Norway counties --
-----------------------------------------------------------------------------------
export.norwegian_counties = {
["奧斯陸縣"] = {wp = "Oslo"},
["羅加蘭縣"] = {wp = "Rogaland"},
["莫雷-羅姆斯達爾縣"] = {wp = "Møre og Romsdal"},
["諾爾蘭縣"] = {wp = "Nordland"},
["東福爾縣"] = {wp = "Østfold"},
["阿克斯胡斯縣"] = {wp = "Akershus"},
["布斯克呂縣"] = {wp = "Buskerud"},
["因蘭德縣"] = {wp = "Innlandet"},
["西福爾縣"] = {wp = "Vestfold"},
["泰勒馬克縣"] = {wp = "Telemark"},
["阿格德爾縣"] = {wp = "Agder"},
["西地縣"] = {wp = "Vestland"},
["特倫德拉格縣"] = {wp = "Trøndelag"},
["特羅姆斯縣"] = {wp = "Troms"},
["芬馬克縣"] = {wp = "Finnmark"},
}
export.norway_group = {
placename_to_key = false,
default_container = "挪威",
default_placetype = "county",
data = export.norwegian_counties,
}
-----------------------------------------------------------------------------------
-- Pakistan provinces and territories --
-----------------------------------------------------------------------------------
export.pakistan_provinces_and_territories = {
["自由克什米爾"] = {wp = "Azad Kashmir", placetype = {"administrative territory", "autonomous territory", "territory"}},
["俾路支省"] = {wp = "Balochistan, Pakistan"},
["吉爾吉特-巴爾蒂斯坦"] = {wp = "Gilgit-Baltistan", placetype = {"administrative territory", "territory"}},
["伊斯蘭馬巴德首都直轄區"] = {wp = "Islamabad Capital Territory", placetype = {"federal territory", "administrative territory", "territory"}},
["開伯爾-普赫圖赫瓦省"] = {wp = "Khyber Pakhtunkhwa"},
["旁遮普省(巴基斯坦)"] = {wp = "Punjab, Pakistan"},
["信德省"] = {wp = "Sindh"},
}
export.pakistan_group = {
placename_to_key = false,
default_container = "巴基斯坦",
default_placetype = "province",
data = export.pakistan_provinces_and_territories,
}
-----------------------------------------------------------------------------------
-- Philippines provinces --
-----------------------------------------------------------------------------------
export.philippines_provinces = {
["阿布拉省"] = {wp = "Abra (province)"},
["北阿古桑省"] = {wp = "Agusan del Norte"},
["南阿古桑省"] = {wp = "Agusan del Sur"},
["阿克蘭省"] = {wp = "Aklan"},
["阿爾拜省"] = {wp = "Albay"},
["安蒂克省"] = {wp = "Antique (province)"},
["阿帕亞沃省"] = {wp = "Apayao"},
["奧羅拉省"] = {wp = "Aurora (province)"},
["巴西蘭省"] = {wp = "Basilan"},
["巴丹省"] = {wp = "Bataan"},
["巴達內斯省"] = {wp = "Batanes"},
["八打雁省"] = {wp = "Batangas"},
["本格特省"] = {wp = "Benguet"},
["比利蘭省"] = {wp = "Biliran"},
["保和省"] = {wp = "Bohol"},
["布基農省"] = {wp = "Bukidnon"},
["布拉干省"] = {wp = "Bulacan"},
["卡加延省"] = {wp = "Cagayan"},
["北甲馬仁省"] = {wp = "Camarines Norte"},
["南甲馬仁省"] = {wp = "Camarines Sur"},
["卡米金省"] = {wp = "Camiguin"},
["卡皮斯省"] = {wp = "Capiz"},
["卡坦端內斯省"] = {wp = "Catanduanes"},
["甲米地省"] = {wp = "Cavite"},
["宿霧省"] = {wp = "Cebu"},
["哥打巴托省"] = {wp = "Cotabato"},
["達沃德奧羅省"] = {wp = "Davao de Oro"},
["北達沃省"] = {wp = "Davao del Norte"},
["南達沃省"] = {wp = "Davao del Sur"},
["西達沃省"] = {wp = "Davao Occidental"},
["東達沃省"] = {wp = "Davao Oriental"},
["迪納加特群島省"] = {wp = "Dinagat Islands"},
["東薩馬省"] = {wp = "Eastern Samar"},
["吉馬拉斯省"] = {wp = "Guimaras"},
["伊富高省"] = {wp = "Ifugao"},
["北伊羅科斯省"] = {wp = "Ilocos Norte"},
["南伊羅科斯省"] = {wp = "Ilocos Sur"},
["伊洛伊洛省"] = {wp = "Iloilo"},
["伊莎貝拉省"] = {wp = "Isabela (province)"},
["卡林加省"] = {wp = "Kalinga (province)"},
["拉烏尼翁省"] = {wp = "La Union"},
["拉古納省"] = {wp = "Laguna (province)"},
["北拉瑙省"] = {wp = "Lanao del Norte"},
["南拉瑙省"] = {wp = "Lanao del Sur"},
["萊特省"] = {wp = "Leyte (province)"},
["北馬京達瑙省"] = {wp = "Maguindanao del Norte"},
["南馬京達瑙省"] = {wp = "Maguindanao del Sur"},
["馬林杜克省"] = {wp = "Marinduque"},
["馬斯巴特省"] = {wp = "Masbate"},
["西米薩米斯省"] = {wp = "Misamis Occidental"},
["東米薩米斯省"] = {wp = "Misamis Oriental"},
["山岳省"] = {wp = "Mountain Province"},
["西內格羅斯省"] = {wp = "Negros Occidental"},
["東內格羅斯省"] = {wp = "Negros Oriental"},
["北薩馬省"] = {wp = "Northern Samar"},
["新怡詩夏省"] = {wp = "Nueva Ecija"},
["新比斯開省"] = {wp = "Nueva Vizcaya"},
["西民都洛省"] = {wp = "Occidental Mindoro"},
["東民都洛省"] = {wp = "Oriental Mindoro"},
["巴拉望省"] = {wp = "Palawan"},
["邦板牙省"] = {wp = "Pampanga"},
["邦阿西楠省"] = {wp = "Pangasinan"},
["奎松省"] = {wp = "Quezon"},
["基里諾省"] = {wp = "Quirino"},
["黎剎省"] = {wp = "Rizal (province)"},
["朗布隆省"] = {wp = "Romblon"},
["薩馬省"] = {wp = "Samar (province)"},
["薩蘭加尼省"] = {wp = "Sarangani"},
["錫基霍爾省"] = {wp = "Siquijor"},
["索索貢省"] = {wp = "Sorsogon"},
["南哥打巴托省"] = {wp = "South Cotabato"},
["南萊特省"] = {wp = "Southern Leyte"},
["蘇丹庫達拉省"] = {wp = "Sultan Kudarat"},
["蘇祿省"] = {wp = "Sulu"},
["北蘇里高省"] = {wp = "Surigao del Norte"},
["南蘇里高省"] = {wp = "Surigao del Sur"},
["塔拉克省"] = {wp = "Tarlac"},
["塔威塔威省"] = {wp = "Tawi-Tawi"},
["三描禮士省"] = {wp = "Zambales"},
["北三寶顏省"] = {wp = "Zamboanga del Norte"},
["南三寶顏省"] = {wp = "Zamboanga del Sur"},
["三寶顏錫布蓋省"] = {wp = "Zamboanga Sibugay"},
["馬尼拉都會區"] = {wp = "Metro Manila", placetype = {"region", "province"}},
}
export.philippines_group = {
placename_to_key = false,
default_container = "菲律賓",
default_placetype = "province",
data = export.philippines_provinces,
}
-----------------------------------------------------------------------------------
-- Poland voivodeships --
-----------------------------------------------------------------------------------
export.poland_voivodeships = {
["下西里西亞省"] = {wp = "Lower Silesian Voivodeship"},
["庫亞維-波美拉尼亞省"] = {wp = "Kuyavian-Pomeranian Voivodeship"},
["盧布林省"] = {wp = "Lublin Voivodeship"},
["盧布斯省"] = {wp = "Lubusz Voivodeship"},
["羅茲省"] = {wp = "Łódź Voivodeship"},
["小波蘭省"] = {wp = "Lesser Poland Voivodeship"},
["馬佐夫舍省"] = {wp = "Masovian Voivodeship"},
["奧波萊省"] = {wp = "Opole Voivodeship"},
["喀爾巴阡山省"] = {wp = "Subcarpathian Voivodeship"},
["波德拉謝省"] = {wp = "Podlaskie Voivodeship"},
["波美拉尼亞省"] = {wp = "Pomeranian Voivodeship"},
["西里西亞省"] = {wp = "Silesian Voivodeship"},
["神聖十字省"] = {wp = "Świętokrzyskie Voivodeship"},
["瓦爾米亞-馬祖里省"] = {wp = "Warmian-Masurian Voivodeship"},
["大波蘭省"] = {wp = "Greater Poland Voivodeship"},
["西波美拉尼亞省"] = {wp = "West Pomeranian Voivodeship"},
}
export.poland_group = {
placename_to_key = false,
default_container = "波蘭",
default_placetype = "voivodeship",
data = export.poland_voivodeships,
}
-----------------------------------------------------------------------------------
-- Portugal districts and autonomous regions --
-----------------------------------------------------------------------------------
export.portugal_districts_and_autonomous_regions = {
["亞速爾群島"] = {wp = "Azores", placetype = {"autonomous region", "region"}},
["阿維羅區"] = {wp = "Aveiro District"},
["貝雅區"] = {wp = "Beja District"},
["布拉加區"] = {wp = "Braga District"},
["布拉干薩區"] = {wp = "Bragança District"},
["卡斯特洛布蘭科區"] = {wp = "Castelo Branco District"},
["科英布拉區"] = {wp = "Coimbra District"},
["埃武拉區"] = {wp = "Évora District"},
["法魯區"] = {wp = "Faro District"},
["瓜達區"] = {wp = "Guarda District"},
["萊里亞區"] = {wp = "Leiria District"},
["里斯本區"] = {wp = "Lisbon District"},
["馬德拉島"] = {wp = "Madeira", placetype = {"autonomous region", "region"}},
["波塔萊格里區"] = {wp = "Portalegre District"},
["波爾圖區"] = {wp = "Porto District"},
["聖塔倫區"] = {wp = "Santarém District"},
["塞圖巴爾區"] = {wp = "Setúbal District"},
["維亞納堡區"] = {wp = "Viana do Castelo District"},
["維拉雷亞爾區"] = {wp = "Vila Real District"},
["維塞烏區"] = {wp = "Viseu District"},
}
export.portugal_group = {
placename_to_key = false,
default_container = "葡萄牙",
default_placetype = "district",
data = export.portugal_districts_and_autonomous_regions,
}
-----------------------------------------------------------------------------------
-- Russia federal subjects --
-----------------------------------------------------------------------------------
local russia_oblast = {placetype = "oblast"}
local russia_krai = {placetype = "krai"}
local russia_republic = {placetype = "republic"}
local russia_autonomous_okrug = {placetype = {"autonomous okrug", "okrug"}}
export.russia_federal_subjects = {
-- autonomous oblast
["猶太自治州"] = {placetype = {"autonomous oblast", "oblast"}, wp = "Jewish Autonomous Oblast"},
-- autonomous okrugs
["楚科奇自治區"] = {wp = "Chukotka Autonomous Okrug", placetype = {"autonomous okrug", "okrug"}},
["漢特-曼西自治區"] = {wp = "Khanty-Mansi Autonomous Okrug", placetype = {"autonomous okrug", "okrug"}},
["漢特-曼西亞"] = {alias_of = "漢特-曼西自治區"},
["涅涅茨自治區"] = {wp = "Nenets Autonomous Okrug", placetype = {"autonomous okrug", "okrug"}},
["亞馬洛-涅涅茨自治區"] = {wp = "Yamalo-Nenets Autonomous Okrug", placetype = {"autonomous okrug", "okrug"}},
-- krais
["阿爾泰邊疆區"] = {wp = "Altai Krai", placetype = "krai"},
["堪察加邊疆區"] = {wp = "Kamchatka Krai", placetype = "krai"},
["哈巴羅夫斯克邊疆區"] = {wp = "Khabarovsk Krai", placetype = "krai"},
["克拉斯諾達爾邊疆區"] = {wp = "Krasnodar Krai", placetype = "krai"},
["克拉斯諾亞爾斯克邊疆區"] = {wp = "Krasnoyarsk Krai", placetype = "krai"},
["彼爾姆邊疆區"] = {wp = "Perm Krai", placetype = "krai"},
["濱海邊疆區"] = {wp = "Primorsky Krai", placetype = "krai"},
["斯塔夫羅波爾邊疆區"] = {wp = "Stavropol Krai", placetype = "krai"},
["外貝加爾邊疆區"] = {wp = "Zabaykalsky Krai", placetype = "krai"},
-- oblasts
["阿穆爾州"] = russia_oblast,
["阿爾漢格爾斯克州"] = russia_oblast,
["阿斯特拉罕州"] = russia_oblast,
["別爾哥羅德州"] = russia_oblast,
["布良斯克州"] = russia_oblast,
["車裡雅賓斯克州"] = russia_oblast,
["伊爾庫茨克州"] = russia_oblast,
["伊萬諾沃州"] = russia_oblast,
["加里寧格勒州"] = russia_oblast,
["卡盧加州"] = russia_oblast,
["克麥羅沃州"] = russia_oblast,
["基洛夫州"] = russia_oblast,
["科斯特羅馬州"] = russia_oblast,
["庫爾干州"] = russia_oblast,
["庫爾斯克州"] = russia_oblast,
["列寧格勒州"] = russia_oblast,
["利佩茨克州"] = russia_oblast,
["馬加丹州"] = russia_oblast,
["莫斯科州"] = russia_oblast,
["摩爾曼斯克州"] = russia_oblast,
["下諾夫哥羅德州"] = russia_oblast,
["諾夫哥羅德州"] = russia_oblast,
["新西伯利亞州"] = russia_oblast,
["鄂木斯克州"] = russia_oblast,
["奧倫堡州"] = russia_oblast,
["奧廖爾州"] = russia_oblast,
["奔薩州"] = russia_oblast,
["普斯科夫州"] = russia_oblast,
["羅斯托夫州"] = russia_oblast,
["梁贊州"] = russia_oblast,
["薩哈林州"] = {wp = "Sakhalin Oblast", placetype = "oblast"},
["薩馬拉州"] = russia_oblast,
["薩拉托夫州"] = russia_oblast,
["斯摩棱斯克州"] = russia_oblast,
["斯維爾德洛夫斯克州"] = russia_oblast,
["坦波夫州"] = russia_oblast,
["托木斯克州"] = russia_oblast,
["圖拉州"] = russia_oblast,
["特維爾州"] = russia_oblast,
["秋明州"] = russia_oblast,
["烏里揚諾夫斯克州"] = russia_oblast,
["弗拉基米爾州"] = russia_oblast,
["伏爾加格勒州"] = russia_oblast,
["沃洛格達州"] = russia_oblast,
["沃羅涅日州"] = russia_oblast,
["雅羅斯拉夫爾州"] = russia_oblast,
-- republics
["阿迪格共和國"] = russia_republic,
["巴什科爾托斯坦共和國"] = russia_republic,
["布里亞特共和國"] = russia_republic,
["達吉斯坦共和國"] = russia_republic,
["印古什共和國"] = russia_republic,
["卡爾梅克共和國"] = russia_republic,
["卡累利亞共和國"] = {wp = "Republic of Karelia", placetype = "republic"},
["哈卡斯共和國"] = russia_republic,
["莫爾多瓦共和國"] = russia_republic,
["北奧塞梯-阿蘭尼亞共和國"] = {wp = "North Ossetia–Alania", placetype = "republic"},
["北奧塞梯"] = {alias_of = "北奧塞梯-阿蘭尼亞共和國"},
["韃靼斯坦共和國"] = russia_republic,
["阿爾泰共和國"] = {wp = "Altai Republic", placetype = "republic"},
["車臣共和國"] = russia_republic,
["楚瓦什共和國"] = russia_republic,
["卡巴爾達-巴爾卡爾共和國"] = russia_republic,
["卡拉恰伊-切爾克斯共和國"] = russia_republic,
["科米共和國"] = {wp = "Komi Republic", placetype = "republic"},
["馬里埃爾共和國"] = russia_republic,
["薩哈共和國"] = {wp = "Sakha Republic", placetype = "republic"},
["雅庫特"] = {alias_of = "薩哈共和國"},
["圖瓦共和國"] = russia_republic,
["烏德穆爾特共和國"] = russia_republic,
}
export.russia_group = {
placename_to_key = false,
default_container = "俄羅斯",
default_placetype = "oblast",
data = export.russia_federal_subjects,
}
-----------------------------------------------------------------------------------
-- Saudi Arabia provinces --
-----------------------------------------------------------------------------------
export.saudi_arabia_provinces = {
["利雅得省"] = {wp = "Riyadh Province"},
["麥加省"] = {wp = "Mecca Province"},
["東部省(沙特)"] = {wp = "Eastern Province, Saudi Arabia", no_auto_augment_container = true},
["麥地那省"] = {wp = "Medina Province"},
["阿西爾省"] = {wp = "Asir"},
["吉贊省"] = {wp = "Jazan Province"},
["卡西姆省"] = {wp = "Al-Qassim Province"},
["塔布克省"] = {wp = "Tabuk Province"},
["哈伊爾省"] = {wp = "Ha'il Province"},
["焦夫省"] = {wp = "Al-Jawf Province"},
["納季蘭省"] = {wp = "Najran Province"},
["北部邊界省"] = {wp = "Northern Borders Province"},
["巴哈省"] = {wp = "Al-Bahah Province"},
}
export.saudi_arabia_group = {
placename_to_key = false,
default_container = "沙烏地阿拉伯",
default_placetype = "province",
data = export.saudi_arabia_provinces,
}
-----------------------------------------------------------------------------------
-- South Africa provinces --
-----------------------------------------------------------------------------------
export.south_africa_provinces = {
["東開普省"] = {wp = "Eastern Cape"},
["自由邦省"] = {wp = "Free State (South African province)"},
["豪登省"] = {wp = "Gauteng"},
["夸祖魯-納塔爾省"] = {wp = "KwaZulu-Natal"},
["林波波省"] = {wp = "Limpopo"},
["姆普馬蘭加省"] = {wp = "Mpumalanga"},
["西北省(南非)"] = {wp = "North West (South African province)"},
["北開普省"] = {wp = "Northern Cape"},
["西開普省"] = {wp = "Western Cape"},
}
export.south_africa_group = {
placename_to_key = false,
default_container = "南非",
default_placetype = "province",
data = export.south_africa_provinces,
}
-----------------------------------------------------------------------------------
-- Ukraine oblasts --
-----------------------------------------------------------------------------------
export.ukraine_oblasts = {
["切爾卡瑟州"] = {wp = "Cherkasy Oblast"},
["切爾尼戈夫州"] = {wp = "Chernihiv Oblast"},
["切爾諾夫策州"] = {wp = "Chernivtsi Oblast"},
["第聶伯羅彼得羅夫斯克州"] = {wp = "Dnipropetrovsk Oblast"},
["頓涅茨克州"] = {wp = "Donetsk Oblast"},
["伊萬諾-弗蘭科夫斯克州"] = {wp = "Ivano-Frankivsk Oblast"},
["哈爾科夫州"] = {wp = "Kharkiv Oblast"},
["赫爾松州"] = {wp = "Kherson Oblast"},
["赫梅利尼茨基州"] = {wp = "Khmelnytskyi Oblast"},
["基洛夫格勒州"] = {wp = "Kirovohrad Oblast"},
["基輔州"] = {wp = "Kyiv Oblast"},
["盧甘斯克州"] = {wp = "Luhansk Oblast"},
["利沃夫州"] = {wp = "Lviv Oblast"},
["尼古拉耶夫州"] = {wp = "Mykolaiv Oblast"},
["敖德薩州"] = {wp = "Odesa Oblast"},
["波爾塔瓦州"] = {wp = "Poltava Oblast"},
["羅夫諾州"] = {wp = "Rivne Oblast"},
["蘇梅州"] = {wp = "Sumy Oblast"},
["捷爾諾波爾州"] = {wp = "Ternopil Oblast"},
["文尼察州"] = {wp = "Vinnytsia Oblast"},
["沃里尼亞州"] = {wp = "Volyn Oblast"},
["外喀爾巴阡州"] = {wp = "Zakarpattia Oblast"},
["扎波羅熱州"] = {wp = "Zaporizhzhia Oblast"},
["日托米爾州"] = {wp = "Zhytomyr Oblast"},
}
export.ukraine_group = {
placename_to_key = false,
default_container = "烏克蘭",
default_placetype = "oblast",
data = export.ukraine_oblasts,
}
-----------------------------------------------------------------------------------
-- Wales principal areas --
-----------------------------------------------------------------------------------
export.wales_principal_areas = {
["布拉艾諾格溫特"] = {wp = "Blaenau Gwent"},
["布里真德"] = {wp = "Bridgend County Borough"},
["卡菲利"] = {wp = "Caerphilly County Borough"},
["卡馬森郡"] = {wp = "Carmarthenshire", placetype = "county"},
["克雷地基昂"] = {wp = "Ceredigion", placetype = "county"},
["科溫"] = {wp = "Conwy County Borough"},
["登比郡"] = {wp = "Denbighshire", placetype = "county"},
["弗林特郡"] = {wp = "Flintshire", placetype = "county"},
["格溫內德"] = {wp = "Gwynedd", placetype = "county"},
["安格爾西島"] = {wp = "Isle of Anglesey", placetype = "county"},
["默瑟蒂德菲爾"] = {wp = "Merthyr Tydfil County Borough"},
["蒙茅斯郡"] = {wp = "Monmouthshire", placetype = "county"},
["尼斯-波特塔爾博特"] = {wp = "Neath Port Talbot"},
["彭布羅克郡"] = {wp = "Pembrokeshire", placetype = "county"},
["波伊斯"] = {wp = "Powys", placetype = "county"},
["朗達坎農塔夫"] = {wp = "Rhondda Cynon Taf"},
["托爾范"] = {wp = "Torfaen"},
["格拉摩根谷"] = {wp = "Vale of Glamorgan"},
["雷克瑟姆"] = {wp = "Wrexham County Borough"},
}
export.wales_group = {
placename_to_key = false,
default_container = {key = "威爾斯", placetype = "constituent country"},
default_placetype = "county borough",
data = export.wales_principal_areas,
}
-----------------------------------------------------------------------------------
-- City groups --
-----------------------------------------------------------------------------------
export.australia_cities = {
["阿德萊德"] = {container = "南澳大利亞", wp = "Adelaide"},
["布里斯班"] = {container = "昆士蘭", wp = "Brisbane"},
["坎培拉"] = {container = "澳大利亞首都領地", wp = "Canberra"},
["墨爾本"] = {container = "維多利亞州", wp = "Melbourne"},
["紐卡素"] = {container = "新南威爾斯", wp = "Newcastle, New South Wales"},
["伯斯"] = {container = "西澳大利亞", wp = "Perth"},
["悉尼"] = {container = "新南威爾斯", wp = "Sydney"},
}
export.australia_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "澳大利亞",
default_placetype = "city",
default_is_city = true,
data = export.australia_cities,
}
export.brazil_cities = {
["聖保羅"] = {container = "聖保羅州", wp = "São Paulo"},
["里約熱內盧"] = {container = "里約熱內盧州", wp = "Rio de Janeiro"},
["貝洛奧里藏特"] = {container = "米納斯吉拉斯", wp = "Belo Horizonte"},
["累西腓"] = {container = "伯南布哥州", wp = "Recife"},
["阿雷格里港"] = {container = "南里奧格蘭德州", wp = "Porto Alegre"},
["巴西利亞"] = {container = "巴西聯邦區", wp = "Brasília"},
["福塔萊薩"] = {container = "塞阿拉州", wp = "Fortaleza"},
["薩爾瓦多"] = {container = "巴伊亞", wp = "Salvador, Bahia"},
["庫里蒂巴"] = {container = "巴拉那州", wp = "Curitiba"},
["坎皮納斯"] = {container = "聖保羅州", wp = "Campinas"},
["戈亞尼亞"] = {container = "戈亞斯州", wp = "Goiânia"},
["瑪瑙斯"] = {container = "亞馬遜州", wp = "Manaus"},
["伯利恆"] = {container = "帕拉州", wp = "Belém, Pará"},
["維多利亞"] = {container = "聖埃斯皮里圖州", wp = "Vitória, Espírito Santo"},
["聖路易斯"] = {container = "馬拉尼昂州", wp = "São Luís"},
["納塔爾"] = {container = "北里奧格蘭德州", wp = "Natal, Rio Grande do Norte"},
["弗洛里亞諾波利斯"] = {container = "聖卡塔琳娜州", wp = "Florianópolis"},
["馬塞約"] = {container = "阿拉戈亞斯州", wp = "Maceió"},
["若昂佩索阿"] = {container = "帕拉伊巴州", wp = "João Pessoa"},
["特雷齊納"] = {container = "皮奧伊州", wp = "Teresina"},
["隆德里納"] = {container = "巴拉那州", wp = "Londrina"},
}
export.brazil_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "巴西",
default_placetype = "city",
default_is_city = true,
data = export.brazil_cities,
}
export.canada_cities = {
["多倫多"] = {container = "安大略", wp = "Toronto"},
["蒙特婁"] = {container = "魁北克", wp = "Montreal"},
["溫哥華"] = {container = "英屬哥倫比亞", wp = "Vancouver"},
["卡加里"] = {container = "亞伯達", wp = "Calgary"},
["愛民頓"] = {container = "亞伯達", wp = "Edmonton"},
["渥太華"] = {container = "安大略", wp = "Ottawa"},
["魁北克城"] = {container = "魁北克", wp = "Quebec City"},
["溫尼伯"] = {container = "馬尼托巴", wp = "Winnipeg"},
["漢密爾頓"] = {container = "安大略", wp = "Hamilton, Ontario"},
}
export.canada_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "加拿大",
default_placetype = "city",
default_is_city = true,
data = export.canada_cities,
}
export.france_cities = {
["巴黎"] = {container = "法蘭西島大區", wp = "Paris"},
["里昂"] = {container = "奧弗涅-隆河-阿爾卑斯大區", wp = "Lyon"},
["馬賽"] = {container = "普羅旺斯-阿爾卑斯-蔚藍海岸大區", wp = "Marseille"},
["里爾"] = {container = "上法蘭西大區", wp = "Lille"},
["波爾多"] = {container = "新阿基坦大區", wp = "Bordeaux"},
["圖盧茲"] = {container = "奧克西塔尼大區", wp = "Toulouse"},
["尼斯"] = {container = "普羅旺斯-阿爾卑斯-蔚藍海岸大區", wp = "Nice"},
["南特"] = {container = "盧瓦爾河地區大區", wp = "Nantes"},
["史特拉斯堡"] = {container = "大東部大區", wp = "Strasbourg"},
["雷恩"] = {container = "布列塔尼大區", wp = "Rennes"},
}
export.france_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "region"),
default_container = "法國",
default_placetype = "city",
default_is_city = true,
data = export.france_cities,
}
export.germany_cities = {
["科隆"] = {container = "北萊茵-威斯特法倫", wp = "Cologne"},
["杜塞爾多夫"] = {container = "北萊茵-威斯特法倫", wp = "Düsseldorf"},
["多特蒙德"] = {container = "北萊茵-威斯特法倫", wp = "Dortmund"},
["埃森"] = {container = "北萊茵-威斯特法倫", wp = "Essen"},
["柏林"] = {wp = "Berlin"},
["法蘭克福"] = {container = "黑森", wp = "Frankfurt"},
["漢堡"] = {wp = "Hamburg"},
["慕尼黑"] = {container = "巴伐利亞", wp = "Munich"},
["斯圖加特"] = {container = "巴登-符騰堡", wp = "Stuttgart"},
["曼海姆"] = {container = "巴登-符騰堡", wp = "Mannheim"},
["紐倫堡"] = {container = "巴伐利亞", wp = "Nuremberg"},
["漢諾威"] = {container = "下薩克森", wp = "Hanover"},
["比勒費爾德"] = {container = "北萊茵-威斯特法倫", wp = "Bielefeld"},
["萊比錫"] = {container = "薩克森", wp = "Leipzig"},
["亞琛"] = {container = "北萊茵-威斯特法倫", wp = "Aachen"},
["不來梅"] = {wp = "Bremen"},
}
export.germany_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "德國",
default_placetype = "city",
default_is_city = true,
data = export.germany_cities,
}
export.india_cities = {
["德里"] = {container = {key = "德里", placetype = "union territory"}, wp = "Delhi"},
["孟買"] = {container = "馬哈拉施特拉邦", wp = "Mumbai"},
["加爾各答"] = {container = "西孟加拉邦", wp = "Kolkata"},
["班加羅爾"] = {container = "卡納塔克邦", wp = "Bengaluru"},
["金奈"] = {container = "泰米爾納德邦", wp = "Chennai"},
["海德拉巴"] = {container = "特倫甘納邦", wp = "Hyderabad"},
["艾哈邁達巴德"] = {container = "古吉拉特邦", wp = "Ahmedabad"},
["浦那"] = {container = "馬哈拉施特拉邦", wp = "Pune"},
["蘇拉特"] = {container = "古吉拉特邦", wp = "Surat"},
["勒克瑙"] = {container = "北方邦", wp = "Lucknow"},
["齋浦爾"] = {container = "拉賈斯坦邦", wp = "Jaipur"},
["坎普爾"] = {container = "北方邦", wp = "Kanpur"},
["那格浦爾"] = {container = "馬哈拉施特拉邦", wp = "Nagpur"},
["巴特那"] = {container = "比哈爾邦", wp = "Patna"},
["瓦拉納西"] = {container = "北方邦", wp = "Varanasi"},
["印多爾"] = {container = "中央邦", wp = "Indore"},
["博帕爾"] = {container = "中央邦", wp = "Bhopal"},
["阿格拉"] = {container = "北方邦", wp = "Agra"},
["科欽"] = {container = "喀拉拉邦", wp = "Kochi"},
["維沙卡帕特南"] = {container = "安得拉邦", wp = "Visakhapatnam"},
["齋普爾"] = {alias_of = "齋浦爾"},
}
export.india_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "印度",
default_placetype = "city",
default_is_city = true,
data = export.india_cities,
}
export.indonesia_cities = {
["雅加達"] = {container = "雅加達首都特區", wp = "Jakarta"},
["泗水"] = {container = "東爪哇省", wp = "Surabaya"},
["勿加泗"] = {container = "西爪哇省", wp = "Bekasi"},
["萬隆"] = {container = "西爪哇省", wp = "Bandung"},
["棉蘭"] = {container = "北蘇門答臘省", wp = "Medan"},
["德波"] = {container = "西爪哇省", wp = "Depok"},
["萬丹市"] = {container = "萬丹省", wp = "Tangerang"},
["巨港"] = {container = "南蘇門答臘省", wp = "Palembang"},
["三寶壟"] = {container = "中爪哇省", wp = "Semarang"},
["望加錫"] = {container = "南蘇拉威西省", wp = "Makassar"},
["武端"] = {container = "廖內群島省", wp = "Batam"},
["茂物"] = {container = "西爪哇省", wp = "Bogor"},
["北干巴魯"] = {container = "廖內省", wp = "Pekanbaru"},
["班達爾楠榜"] = {container = "楠榜省", wp = "Bandar Lampung"},
["巴東"] = {container = "西蘇門答臘省", wp = "Padang"},
["薩馬林達"] = {container = "東加里曼丹省", wp = "Samarinda"},
["瑪琅"] = {container = "東爪哇省", wp = "Malang"},
["日惹"] = {container = "日惹特區", wp = "Yogyakarta"},
["登巴薩"] = {container = "峇里省", wp = "Denpasar"},
["哲勒貢"] = {container = "西爪哇省", wp = "Cirebon"},
["梭羅"] = {container = "中爪哇省", wp = "Surakarta"},
["馬辰"] = {container = "南加里曼丹省", wp = "Banjarmasin"},
["打橫"] = {container = "西爪哇省", wp = "Tasikmalaya"},
}
export.indonesia_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "印度尼西亞",
default_placetype = "city",
default_is_city = true,
data = export.indonesia_cities,
}
export.italy_cities = {
["米蘭"] = {container = "倫巴第", wp = "Milan"},
["那不勒斯"] = {container = "坎帕尼亞", wp = "Naples"},
["羅馬"] = {container = "拉齊奧", wp = "Rome"},
["都靈"] = {container = "皮埃蒙特", wp = "Turin"},
["威尼斯"] = {container = "威尼托", wp = "Venice"},
["佛羅倫斯"] = {container = "托斯卡納", wp = "Florence"},
["巴里"] = {container = "普利亞", wp = "Bari"},
["巴勒莫"] = {container = "西西里", wp = "Palermo"},
["卡塔尼亞"] = {container = "西西里", wp = "Catania"},
["布雷西亞"] = {container = "倫巴第", wp = "Brescia"},
["熱那亞"] = {container = "利古里亞", wp = "Genoa"},
}
export.italy_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "region"),
default_container = "意大利",
default_placetype = "city",
default_is_city = true,
data = export.italy_cities,
}
export.japan_cities = {
["東京"] = {container = "東京都", wp = "Tokyo", placetype = {"city", "prefecture"}},
["橫濱"] = {container = "神奈川縣", wp = "Yokohama"},
["大阪"] = {container = "大阪府", wp = "Osaka"},
["名古屋"] = {container = "愛知縣", wp = "Nagoya"},
["札幌"] = {container = "北海道", wp = "Sapporo"},
["福岡"] = {container = "福岡縣", wp = "Fukuoka"},
["神戶"] = {container = "兵庫縣", wp = "Kobe"},
["京都"] = {container = "京都府", wp = "Kyoto"},
["川崎"] = {container = "神奈川縣", wp = "Kawasaki, Kanagawa"},
["廣島"] = {container = "廣島縣", wp = "Hiroshima"},
["仙台"] = {container = "宮城縣", wp = "Sendai"},
["北九州"] = {container = "福岡縣", wp = "Kitakyushu"},
["新潟"] = {container = "新潟縣", wp = "Niigata (city)"},
["靜岡"] = {container = "靜岡縣", wp = "Shizuoka (city)"},
["岡山"] = {container = "岡山縣", wp = "Okayama"},
["熊本"] = {container = "熊本縣", wp = "Kumamoto"},
["鹿兒島"] = {container = "鹿兒島縣", wp = "Kagoshima"},
}
export.japan_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "prefecture"),
default_container = "日本",
default_placetype = "city",
default_is_city = true,
data = export.japan_cities,
}
export.mexico_cities = {
["墨西哥城"] = {wp = "Mexico City"},
["蒙特雷"] = {container = "新萊昂州", wp = "Monterrey"},
["瓜達拉哈拉"] = {container = "哈利斯科州", wp = "Guadalajara"},
["普埃布拉市"] = {container = "普埃布拉州", wp = "Puebla (city)"},
["托盧卡"] = {container = "墨西哥州", wp = "Toluca"},
["蒂華納"] = {container = "下加利福尼亞州", wp = "Tijuana"},
["萊昂"] = {container = "瓜納華托州", wp = "León, Guanajuato"},
["克雷塔羅市"] = {container = "克雷塔羅州", wp = "Querétaro (city)"},
["華雷斯城"] = {container = "奇瓦瓦州", wp = "Ciudad Juárez"},
["托雷翁"] = {container = "科阿韋拉州", wp = "Torreón"},
["梅里達"] = {container = "尤卡坦州", wp = "Mérida, Yucatán"},
["聖路易斯波托西市"] = {container = "聖路易斯波托西州", wp = "San Luis Potosí (city)"},
["阿瓜斯卡連特斯市"] = {container = "阿瓜斯卡連特斯州", wp = "Aguascalientes (city)"},
["墨西卡利"] = {container = "下加利福尼亞州", wp = "Mexicali"},
}
export.mexico_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "墨西哥",
default_placetype = "city",
default_is_city = true,
data = export.mexico_cities,
}
export.nigeria_cities = {
["拉各斯"] = {container = "拉各斯州", wp = "Lagos"},
["卡諾市"] = {container = "卡諾州", wp = "Kano (city)"},
["伊巴丹"] = {container = "奧約州", wp = "Ibadan"},
["阿布賈"] = {container = {key = "阿布賈聯邦首都轄區", placetype = "federal territory"}, wp = "Abuja"},
["哈科特港"] = {container = "河流州", wp = "Port Harcourt"},
["卡杜納市"] = {container = "卡杜納州", wp = "Kaduna (city)"},
["貝寧城"] = {container = "埃多州", wp = "Benin City"},
["阿巴"] = {container = "阿比亞州", wp = "Aba, Nigeria"},
["奧尼查"] = {container = "阿南布拉州", wp = "Onitsha"},
["邁杜古里"] = {container = "博爾諾州", wp = "Maiduguri"},
["伊洛林"] = {container = "誇拉州", wp = "Ilorin"},
["索科托市"] = {container = "索科托州", wp = "Sokoto (city)"},
["喬斯"] = {container = "高原州", wp = "Jos"},
["扎里亞"] = {container = "卡杜納州", wp = "Zaria"},
["埃努古市"] = {container = "埃努古州", wp = "Enugu (city)"},
}
export.nigeria_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "奈及利亞",
default_placetype = "city",
default_is_city = true,
data = export.nigeria_cities,
}
export.pakistan_cities = {
["卡拉奇"] = {container = "信德省", wp = "Karachi"},
["拉合爾"] = {container = "旁遮普省(巴基斯坦)", wp = "Lahore"},
["拉瓦爾品第"] = {container = "旁遮普省(巴基斯坦)", wp = "Rawalpindi"},
["伊斯蘭馬巴德"] = {container = {key = "伊斯蘭馬巴德首都直轄區", placetype = "federal territory"}, wp = "Islamabad"},
["費薩拉巴德"] = {container = "旁遮普省(巴基斯坦)", wp = "Faisalabad"},
["古傑蘭瓦拉"] = {container = "旁遮普省(巴基斯坦)", wp = "Gujranwala"},
["海德拉巴(巴基斯坦)"] = {container = "信德省", wp = "Hyderabad, Pakistan"},
["木爾坦"] = {container = "旁遮普省(巴基斯坦)", wp = "Multan"},
["白沙瓦"] = {container = "開伯爾-普赫圖赫瓦省", wp = "Peshawar"},
["奎達"] = {container = "俾路支省", wp = "Quetta"},
["薩戈達"] = {container = "旁遮普省(巴基斯坦)", wp = "Sargodha"},
["錫亞爾科特"] = {container = "旁遮普省(巴基斯坦)", wp = "Sialkot"},
}
export.pakistan_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "巴基斯坦",
default_placetype = "city",
default_is_city = true,
data = export.pakistan_cities,
}
export.philippines_cities = {
["奎松市"] = {container = {key = "馬尼拉都會區", placetype = "region"}, wp = "Quezon City"},
["馬尼拉"] = {container = {key = "馬尼拉都會區", placetype = "region"}, wp = "Manila"},
["達沃市"] = {container = "南達沃省", wp = "Davao City"},
["卡洛坎"] = {container = {key = "馬尼拉都會區", placetype = "region"}, wp = "Caloocan"},
["三寶顏市"] = {container = "南三寶顏省", wp = "Zamboanga City"},
["宿霧市"] = {container = "宿霧省", wp = "Cebu City"},
["安蒂波洛"] = {container = "黎剎省", wp = "Antipolo"},
["卡加延德奧羅"] = {container = "東米薩米斯省", wp = "Cagayan de Oro"},
["達斯馬里尼亞斯"] = {container = "甲米地省", wp = "Dasmariñas"},
["棉蘭老將軍城"] = {container = "南哥打巴托省", wp = "General Santos"},
["聖何塞德爾蒙特"] = {container = "布拉干省", wp = "San Jose del Monte"},
["巴科洛德"] = {container = "西內格羅斯省", wp = "Bacolod"},
["卡蘭巴"] = {container = "拉古納省", wp = "Calamba, Laguna"},
["天使城"] = {container = "邦板牙省", wp = "Angeles City"},
["伊洛伊洛市"] = {container = "伊洛伊洛省", wp = "Iloilo City"},
}
export.philippines_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "菲律賓",
default_placetype = "city",
default_is_city = true,
data = export.philippines_cities,
}
export.russia_cities = {
["莫斯科"] = {wp = "Moscow"},
["聖彼得堡"] = {wp = "Saint Petersburg"},
["新西伯利亞"] = {container = "新西伯利亞州", wp = "Novosibirsk"},
["葉卡捷琳堡"] = {container = "斯維爾德洛夫斯克州", wp = "Yekaterinburg"},
["下諾夫哥羅德"] = {container = "下諾夫哥羅德州", wp = "Nizhny Novgorod"},
["喀山"] = {container = {key = "韃靼斯坦共和國", placetype = "republic"}, wp = "Kazan"},
["車裡雅賓斯克市"] = {container = "車裡雅賓斯克州", wp = "Chelyabinsk"},
["頓河畔羅斯托夫"] = {container = "羅斯托夫州", wp = "Rostov-on-Don"},
["克拉斯諾達爾市"] = {container = {key = "克拉斯諾達爾邊疆區", placetype = "krai"}, wp = "Krasnodar"},
["薩馬拉市"] = {container = "薩馬拉州", wp = "Samara"},
["克拉斯諾亞爾斯克市"] = {container = {key = "克拉斯諾亞爾斯克邊疆區", placetype = "krai"}, wp = "Krasnoyarsk"},
["烏法"] = {container = {key = "巴什科爾托斯坦共和國", placetype = "republic"}, wp = "Ufa"},
["薩拉托夫市"] = {container = "薩拉托夫州", wp = "Saratov"},
["鄂木斯克市"] = {container = "鄂木斯克州", wp = "Omsk"},
["沃羅涅日市"] = {container = "沃羅涅日州", wp = "Voronezh"},
["伏爾加格勒市"] = {container = "伏爾加格勒州", wp = "Volgograd"},
["彼爾姆市"] = {container = {key = "彼爾姆邊疆區", placetype = "krai"}, wp = "Perm, Russia"},
}
export.russia_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "oblast"),
default_container = "俄羅斯",
default_placetype = "city",
default_is_city = true,
data = export.russia_cities,
}
export.saudi_arabia_cities = {
["利雅得"] = {container = "利雅得省", wp = "Riyadh"},
["吉達"] = {container = "麥加省", wp = "Jeddah"},
["達曼"] = {container = "東部省(沙特)", wp = "Dammam"},
["麥加"] = {container = "麥加省", wp = "Mecca"},
["麥地那"] = {container = "麥地那省", wp = "Medina"},
["霍夫夫"] = {container = "東部省(沙特)", wp = "Hofuf"},
["哈米斯穆沙伊特"] = {container = "阿西爾省", wp = "Khamis Mushait"},
}
export.saudi_arabia_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "沙烏地阿拉伯",
default_placetype = "city",
default_is_city = true,
data = export.saudi_arabia_cities,
}
export.south_korea_cities = {
["首爾"] = {wp = "Seoul"},
["釜山"] = {wp = "Busan"},
["仁川"] = {wp = "Incheon"},
["大邱"] = {wp = "Daegu"},
["大田"] = {wp = "Daejeon"},
["光州"] = {wp = "Gwangju"},
["蔚山"] = {wp = "Ulsan"},
}
export.south_korea_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "南韓",
default_placetype = "city",
default_is_city = true,
data = export.south_korea_cities,
}
export.spain_cities = {
["馬德里"] = {container = "馬德里自治區", wp = "Madrid"},
["巴塞羅那"] = {container = "加泰羅尼亞", wp = "Barcelona"},
["瓦倫西亞"] = {container = "巴倫西亞", wp = "Valencia"},
["塞維利亞"] = {container = "安達盧西亞", wp = "Seville"},
["畢爾包"] = {container = "巴斯克", wp = "Bilbao"},
}
export.spain_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "autonomous community"),
default_container = "西班牙",
default_placetype = "city",
default_is_city = true,
data = export.spain_cities,
}
export.united_kingdom_cities = {
["倫敦"] = {container = {key = "大倫敦", placetype = "county"}, wp = "London"},
["曼徹斯特"] = {container = {key = "大曼徹斯特", placetype = "county"}, wp = "Manchester"},
["伯明翰"] = {container = {key = "西密德蘭", placetype = "county"}, wp = "Birmingham"},
["利物浦"] = {container = {key = "默西賽德郡", placetype = "county"}, wp = "Liverpool"},
["格拉斯哥"] = {container = {key = "Glasgow市", placetype = "council area"}, wp = "Glasgow"},
["利茲"] = {container = {key = "西約克郡", placetype = "county"}, wp = "Leeds"},
["布里斯托"] = {container = {key = "英格蘭", placetype = "constituent country"}, wp = "Bristol"},
["卡地夫"] = {container = {key = "威爾斯", placetype = "constituent country"}, wp = "Cardiff"},
["愛丁堡"] = {container = {key = "Edinburgh市", placetype = "council area"}, wp = "Edinburgh"},
["斯旺西"] = {container = {key = "威爾斯", placetype = "constituent country"}, wp = "Swansea"},
["紐波特"] = {container = {key = "威爾斯", placetype = "constituent country"}, wp = "Newport, Wales"},
}
export.united_kingdom_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "county"),
default_container = "英國",
default_placetype = "city",
default_is_city = true,
data = export.united_kingdom_cities,
}
export.united_states_cities = {
["紐約市"] = {container = "紐約", wp = "New York City"},
["洛杉磯"] = {container = "加利福尼亞", wp = "Los Angeles"},
["芝加哥"] = {container = "伊利諾伊", wp = "Chicago"},
["華盛頓特區"] = {wp = "Washington, D.C."},
["巴爾的摩"] = {container = "馬里蘭", wp = "Baltimore"},
["聖荷西"] = {container = "加利福尼亞", wp = "San Jose, California"},
["舊金山"] = {container = "加利福尼亞", wp = "San Francisco"},
["波士頓"] = {container = "麻薩諸塞", wp = "Boston"},
["達拉斯"] = {container = "德克薩斯", wp = "Dallas"},
["費城"] = {container = "賓夕法尼亞", wp = "Philadelphia"},
["休士頓"] = {container = "德克薩斯", wp = "Houston"},
["邁阿密"] = {container = "佛羅里達", wp = "Miami"},
["亞特蘭大"] = {container = "喬治亞", wp = "Atlanta"},
["底特律"] = {container = "密西根", wp = "Detroit"},
["鳳凰城"] = {container = "亞利桑那", wp = "Phoenix"},
["西雅圖"] = {container = "華盛頓州", wp = "Seattle"},
["明尼阿波利斯"] = {container = "明尼蘇達", wp = "Minneapolis"},
["克里夫蘭"] = {container = "俄亥俄", wp = "Cleveland"},
["丹佛"] = {container = "科羅拉多", wp = "Denver"},
["聖地牙哥(美國)"] = {container = "加利福尼亞", wp = "San Diego"},
["波特蘭(俄勒岡)"] = {container = "俄勒岡", wp = "Portland"},
["聖路易斯"] = {container = "密蘇里", wp = "St. Louis"},
["夏洛特"] = {container = "北卡羅來納", wp = "Charlotte"},
["薩克拉門托"] = {container = "加利福尼亞", wp = "Sacramento"},
["匹茲堡"] = {container = "賓夕法尼亞", wp = "Pittsburgh"},
["鹽湖城"] = {container = "猶他", wp = "Salt Lake City"},
["聖安東尼奧"] = {container = "德克薩斯", wp = "San Antonio"},
["哥倫布"] = {container = "俄亥俄", wp = "Columbus"},
["堪薩斯城"] = {container = "密蘇里", wp = "Kansas City metropolitan area"},
["印第安納波利斯"] = {container = "印第安納", wp = "Indianapolis"},
["拉斯維加斯"] = {container = "內華達", wp = "Las Vegas"},
["辛辛那提"] = {container = "俄亥俄", wp = "Cincinnati"},
["奧斯汀"] = {container = "德克薩斯", wp = "Austin"},
["密爾沃基"] = {container = "威斯康辛", wp = "Milwaukee"},
["羅利"] = {container = "北卡羅來納", wp = "Raleigh"},
["納什維爾"] = {container = "田納西", wp = "Nashville"},
["傑克遜維爾"] = {container = "佛羅里達", wp = "Jacksonville"},
["新奧爾良"] = {container = "路易斯安那", wp = "New Orleans"},
["路易斯維爾"] = {container = "肯塔基", wp = "Louisville"},
["奧克拉荷馬城"] = {container = "奧克拉荷馬", wp = "Oklahoma City"},
["孟菲斯"] = {container = "田納西", wp = "Memphis"},
["伯明翰(美國)"] = {container = "阿拉巴馬", wp = "Birmingham, Alabama"},
["弗雷斯諾"] = {container = "加利福尼亞", wp = "Fresno"},
["里奇蒙"] = {container = "弗吉尼亞", wp = "Richmond"},
["水牛城"] = {container = "紐約", wp = "Buffalo"},
["艾爾帕索"] = {container = "德克薩斯", wp = "El Paso"},
["阿爾伯克基"] = {container = "新墨西哥", wp = "Albuquerque"},
["塔森"] = {container = "亞利桑那", wp = "Tucson"},
["科羅拉多斯普林斯"] = {container = "科羅拉多", wp = "Colorado Springs"},
["奧馬哈"] = {container = "內布拉斯加", wp = "Omaha"},
["塔爾薩"] = {container = "奧克拉荷馬", wp = "Tulsa"},
}
export.united_states_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "美國",
default_placetype = "city",
default_is_city = true,
data = export.united_states_cities,
}
export.vietnam_cities = {
["胡志明市"] = {wp = "Ho Chi Minh City"},
["西貢"] = {alias_of = "胡志明市"},
["河內"] = {wp = "Hanoi"},
["峴港"] = {wp = "Da Nang"},
["海防"] = {wp = "Haiphong"},
["邊和"] = {container = "同奈省", wp = "Biên Hòa", placetype = "city"},
["芹苴"] = {wp = "Cần Thơ"},
["順化"] = {wp = "Huế"},
}
export.vietnam_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "越南",
default_placetype = {"municipality", "city"},
default_is_city = true,
data = export.vietnam_cities,
}
-----------------------------------------------------------------------------------
-- locations list --
-----------------------------------------------------------------------------------
export.locations = {
export.continents_group,
export.countries_group,
export.country_like_entities_group,
export.former_countries_group,
export.united_states_group,
export.united_kingdom_group,
export.scotland_group,
export.england_group,
export.northern_ireland_group,
export.ireland_group,
export.wales_group,
export.china_group,
export.china_prefecture_level_cities_group,
export.taiwan_group,
export.canada_group,
export.australia_group,
export.india_group,
export.japan_group,
export.brazil_group,
export.france_group,
export.france_departments_group,
export.germany_group,
export.italy_group,
export.spain_group,
export.austria_group,
export.bangladesh_group,
export.egypt_group,
export.finland_group,
export.greece_group,
export.indonesia_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.norway_group,
export.pakistan_group,
export.philippines_group,
export.poland_group,
export.portugal_group,
export.romania_group,
export.bulgaria_group,
export.iran_group,
export.russia_group,
export.saudi_arabia_group,
export.south_africa_group,
export.laos_group,
export.north_korea_group,
export.south_korea_group,
export.thailand_group,
export.turkey_group,
export.ukraine_group,
export.vietnam_group,
export.nigeria_group,
export.new_york_boroughs_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.united_kingdom_cities_group,
export.united_states_cities_group,
export.vietnam_cities_group,
export.misc_cities_group,
}
return export
sk2qn12rr8wwl65kctzh84m27jwbdpb
9758644
9758643
2026-05-13T09:58:53Z
TongcyDai
53191
// Edit via Wikiplus
9758644
Scribunto
text/plain
local export = {}
export.force_cat = false
local m_table = require("Module:table")
local insert = table.insert
local concat = table.concat
local dump = mw.dumpObject
local unpack = unpack or table.unpack
--[==[
Chinese Wiktionary localization of [[Module:place/locations]].
All canonical location keys are in Chinese, matching what editors write in holonym parameters
(e.g. {{place|zh|城市|s/中央邦|c/印度}}). English Wikipedia article names are stored in the
`wp` field for cross-reference. The `the`, `british_spelling` and English-suffix-detection
fields from enwikt are omitted as they are not applicable in Chinese.
The helper functions (process_error through construct_linked_placename) are kept intact from
enwikt's Module:place/locations to maintain API compatibility with Module:place/placetypes.
]==]
-----------------------------------------------------------------------------------
-- Helper functions --
-----------------------------------------------------------------------------------
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
function export.internal_error(fmt, ...)
export.process_error("Internal error: " .. fmt, ...)
end
local internal_error = export.internal_error
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
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
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 == "city" 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 == "country" or
defcon.placetype == "constituent country") then
return placename .. ", " .. defcon.key
else
return placename
end
end
end
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 = "country"}
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", "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
spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city")
spec.initialized = true
end
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
local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype
if not placetype then
internal_error("No placetype found for key %s", key)
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
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
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
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
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
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
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
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)
-- Chinese has no articles; `the` field is unused but kept for API compatibility.
return linked_placename
end
-----------------------------------------------------------------------------------
-- Local data helper factories --
-----------------------------------------------------------------------------------
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 _, pat in ipairs(container_patterns) do
local nsubs
full_placename, nsubs = full_placename:gsub(pat, "")
if nsubs > 0 then break end
end
end
local elliptical_placename = full_placename
if divtype_patterns then
for _, pat in ipairs(divtype_patterns) do
local nsubs
elliptical_placename, nsubs = elliptical_placename:gsub(pat, "")
if nsubs > 0 then break end
end
end
return full_placename, elliptical_placename
end
end
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
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
-- Canonicalize a continent container key (string) to canonical container form.
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_container`", key)
end
-----------------------------------------------------------------------------------
-- Top-level tables --
-----------------------------------------------------------------------------------
export.continents = {
["地球"] = {placetype = "planet", addl_parents = {"nature"},
fulldesc = "=the planet [[Earth]] and the features found on it", wp = "Earth"},
["非洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"}, wp = "Africa"},
["美洲"] = {placetype = {"supercontinent", "continent"}, container = {key = "地球", placetype = "planet"},
wp = "Americas"},
["北美洲"] = {placetype = "continent", container = {key = "美洲", placetype = "supercontinent"}, wp = "North America"},
["加勒比地區"] = {placetype = {"continental region", "region"}, container = {key = "北美洲", placetype = "continent"}, wp = "Caribbean"},
["中美洲"] = {placetype = {"continental region", "region"}, container = {key = "北美洲", placetype = "continent"}, wp = "Central America"},
["南美洲"] = {placetype = "continent", container = {key = "美洲", placetype = "supercontinent"}, wp = "South America"},
["南極洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"},
fulldesc = "=the territory of [[Antarctica]]", wp = "Antarctica"},
["歐亞大陸"] = {placetype = {"supercontinent", "continent"}, container = {key = "地球", placetype = "planet"}, wp = "Eurasia"},
["亞洲"] = {placetype = "continent", container = {key = "歐亞大陸", placetype = "supercontinent"}, wp = "Asia"},
["中東"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Middle East"},
["東南亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Southeast Asia"},
["南亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "South Asia"},
["東亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "East Asia"},
["中亞"] = {placetype = {"continental region", "region"}, container = {key = "亞洲", placetype = "continent"}, wp = "Central Asia"},
["歐洲"] = {placetype = "continent", container = {key = "歐亞大陸", placetype = "supercontinent"}, wp = "Europe"},
["西歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Western Europe"},
["東歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Eastern Europe"},
["北歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Northern Europe"},
["南歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Southern Europe"},
["中歐"] = {placetype = {"continental region", "region"}, container = {key = "歐洲", placetype = "continent"}, wp = "Central Europe"},
["大洋洲"] = {placetype = "continent", container = {key = "地球", placetype = "planet"}, wp = "Oceania"},
["美拉尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Melanesia"},
["密克羅尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Micronesia"},
["玻里尼西亞"] = {placetype = {"continental region", "region"}, container = {key = "大洋洲", placetype = "continent"}, wp = "Polynesia"},
}
export.continents_group = {
default_overriding_bare_label_parents = {},
default_divs = {{type = "countries", prep = "in"}},
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,
default_no_check_holonym_mismatch = true,
data = export.continents,
}
-----------------------------------------------------------------------------------
-- Countries --
-----------------------------------------------------------------------------------
export.countries = {
-- Africa
["阿爾及利亞"] = {container = "非洲", divs = {"provinces", "communes", "districts"}, wp = "Algeria"},
["安哥拉"] = {container = "非洲", divs = {"provinces", "municipalities"}, wp = "Angola"},
["貝南"] = {container = "非洲", wp = "Benin"},
["波札那"] = {container = "非洲", wp = "Botswana"},
["博茨瓦納"] = {alias_of = "波札那"},
["布吉納法索"] = {container = "非洲", wp = "Burkina Faso"},
["布基納法索"] = {alias_of = "布吉納法索"},
["蒲隆地"] = {container = "非洲", wp = "Burundi"},
["布隆迪"] = {alias_of = "蒲隆地"},
["維德角"] = {container = "非洲", wp = "Cape Verde"},
["佛得角"] = {alias_of = "維德角"},
["中非共和國"] = {container = "非洲", wp = "Central African Republic"},
["查德"] = {container = "非洲", wp = "Chad"},
["科摩羅"] = {container = "非洲", wp = "Comoros"},
["葛摩"] = {alias_of = "科摩羅"},
["剛果共和國"] = {container = "非洲", wp = "Republic of the Congo"},
["剛果(布)"] = {alias_of = "剛果共和國"},
["剛果民主共和國"] = {container = "非洲", divs = {"provinces"}, wp = "Democratic Republic of the Congo"},
["剛果(金)"] = {alias_of = "剛果民主共和國"},
["吉布地"] = {container = "非洲", wp = "Djibouti"},
["吉布提"] = {alias_of = "吉布地"},
["埃及"] = {container = "非洲", divs = {"governorates"}, wp = "Egypt"},
["赤道幾內亞"] = {container = "非洲", wp = "Equatorial Guinea"},
["厄利垂亞"] = {container = "非洲", wp = "Eritrea"},
["厄立特里亞"] = {alias_of = "厄利垂亞"},
["史瓦帝尼"] = {container = "非洲", wp = "Eswatini"},
["衣索比亞"] = {container = "非洲", divs = {"regions"}, wp = "Ethiopia"},
["埃塞俄比亞"] = {alias_of = "衣索比亞"},
["加彭"] = {container = "非洲", wp = "Gabon"},
["加蓬"] = {alias_of = "加彭"},
["甘比亞"] = {container = "非洲", wp = "Gambia"},
["岡比亞"] = {alias_of = "甘比亞"},
["迦納"] = {container = "非洲", wp = "Ghana"},
["加納"] = {alias_of = "迦納"},
["幾內亞"] = {container = "非洲", wp = "Guinea"},
["幾內亞比索"] = {container = "非洲", wp = "Guinea-Bissau"},
["象牙海岸"] = {container = "非洲", wp = "Ivory Coast"},
["科特迪瓦"] = {alias_of = "象牙海岸"},
["肯亞"] = {container = "非洲", divs = {"counties"}, wp = "Kenya"},
["肯尼亞"] = {alias_of = "肯亞"},
["賴索托"] = {container = "非洲", wp = "Lesotho"},
["莱索托"] = {alias_of = "賴索托"},
["賴比瑞亞"] = {container = "非洲", wp = "Liberia"},
["利比里亞"] = {alias_of = "賴比瑞亞"},
["利比亞"] = {container = "非洲", wp = "Libya"},
["馬達加斯加"] = {container = "非洲", wp = "Madagascar"},
["馬拉威"] = {container = "非洲", wp = "Malawi"},
["馬拉維"] = {alias_of = "馬拉威"},
["馬利"] = {container = "非洲", wp = "Mali"},
["馬里"] = {alias_of = "馬利"},
["茅利塔尼亞"] = {container = "非洲", wp = "Mauritania"},
["毛里塔尼亞"] = {alias_of = "茅利塔尼亞"},
["模里西斯"] = {container = "非洲", wp = "Mauritius"},
["毛里求斯"] = {alias_of = "模里西斯"},
["摩洛哥"] = {container = "非洲", wp = "Morocco"},
["莫三比克"] = {container = "非洲", wp = "Mozambique"},
["莫桑比克"] = {alias_of = "莫三比克"},
["納米比亞"] = {container = "非洲", wp = "Namibia"},
["尼日"] = {container = "非洲", wp = "Niger"},
["尼日爾"] = {alias_of = "尼日"},
["奈及利亞"] = {container = "非洲", divs = {
{type = "states", cat_as = "states and FCT"},
"local government areas",
}, wp = "Nigeria"},
["尼日利亞"] = {alias_of = "奈及利亞"},
["盧安達"] = {container = "非洲", wp = "Rwanda"},
["盧旺達"] = {alias_of = "盧安達"},
["聖多美和普林西比"] = {container = "非洲", wp = "São Tomé and Príncipe"},
["塞內加爾"] = {container = "非洲", wp = "Senegal"},
["塞席爾"] = {container = "非洲", wp = "Seychelles"},
["塞舌爾"] = {alias_of = "塞席爾"},
["獅子山"] = {container = "非洲", wp = "Sierra Leone"},
["塞拉利昂"] = {alias_of = "獅子山"},
["索馬利亞"] = {container = "非洲", wp = "Somalia"},
["索馬里"] = {alias_of = "索馬利亞"},
["南非"] = {container = "非洲", divs = {"provinces"}, wp = "South Africa"},
["南蘇丹"] = {container = "非洲", wp = "South Sudan"},
["蘇丹"] = {container = "非洲", wp = "Sudan"},
["坦尚尼亞"] = {container = "非洲", wp = "Tanzania"},
["坦桑尼亞"] = {alias_of = "坦尚尼亞"},
["多哥"] = {container = "非洲", wp = "Togo"},
["突尼西亞"] = {container = "非洲", wp = "Tunisia"},
["突尼斯"] = {alias_of = "突尼西亞"},
["烏干達"] = {container = "非洲", wp = "Uganda"},
["尚比亞"] = {container = "非洲", wp = "Zambia"},
["贊比亞"] = {alias_of = "尚比亞"},
["辛巴威"] = {container = "非洲", wp = "Zimbabwe"},
["津巴布韋"] = {alias_of = "辛巴威"},
-- Asia
["阿富汗"] = {container = "亞洲", wp = "Afghanistan"},
["亞美尼亞"] = {container = {"歐洲", "亞洲"}, wp = "Armenia"},
["亞塞拜然"] = {container = {"歐洲", "亞洲"}, wp = "Azerbaijan"},
["阿塞拜疆"] = {alias_of = "亞塞拜然"},
["巴林"] = {container = "亞洲", wp = "Bahrain"},
["孟加拉"] = {container = "亞洲", divs = {"divisions", "districts"}, wp = "Bangladesh"},
["孟加拉國"] = {alias_of = "孟加拉"},
["不丹"] = {container = "亞洲", wp = "Bhutan"},
["汶萊"] = {container = "亞洲", wp = "Brunei"},
["文萊"] = {alias_of = "汶萊"},
["柬埔寨"] = {container = "亞洲", wp = "Cambodia"},
["中國"] = {container = "亞洲", divs = {
{type = "provinces", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "autonomous regions", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "direct-administered municipalities", cat_as = "provinces, autonomous regions, and municipalities"},
{type = "special administrative regions", cat_as = "special administrative regions"},
}, wp = "China"},
["東帝汶"] = {container = "亞洲", wp = "East Timor"},
["帝汶島"] = {alias_of = "東帝汶"},
["印度"] = {container = "亞洲", divs = {
{type = "states", cat_as = "states and union territories"},
{type = "union territories", cat_as = "states and union territories"},
}, wp = "India"},
["印度尼西亞"] = {container = "亞洲", divs = {"provinces"}, wp = "Indonesia"},
["印尼"] = {alias_of = "印度尼西亞"},
["伊朗"] = {container = "亞洲", wp = "Iran"},
["伊拉克"] = {container = "亞洲", wp = "Iraq"},
["以色列"] = {container = "亞洲", wp = "Israel"},
["日本"] = {container = "亞洲", divs = {"prefectures"}, wp = "Japan"},
["約旦"] = {container = "亞洲", wp = "Jordan"},
["哈薩克"] = {container = {"歐洲", "亞洲"}, wp = "Kazakhstan"},
["哈薩克斯坦"] = {alias_of = "哈薩克"},
["北韓"] = {container = "亞洲", wp = "North Korea"},
["朝鮮"] = {alias_of = "北韓"},
["南韓"] = {container = "亞洲", divs = {"provinces", "special cities", "metropolitan cities"}, wp = "South Korea"},
["韓國"] = {alias_of = "南韓"},
["科威特"] = {container = "亞洲", wp = "Kuwait"},
["吉爾吉斯"] = {container = "亞洲", wp = "Kyrgyzstan"},
["吉爾吉斯斯坦"] = {alias_of = "吉爾吉斯"},
["寮國"] = {container = "亞洲", wp = "Laos"},
["老撾"] = {alias_of = "寮國"},
["黎巴嫩"] = {container = "亞洲", wp = "Lebanon"},
["馬來西亞"] = {container = "亞洲", divs = {"states"}, wp = "Malaysia"},
["馬爾地夫"] = {container = "亞洲", wp = "Maldives"},
["馬爾代夫"] = {alias_of = "馬爾地夫"},
["蒙古"] = {container = "亞洲", wp = "Mongolia"},
["緬甸"] = {container = "亞洲", wp = "Myanmar"},
["尼泊爾"] = {container = "亞洲", wp = "Nepal"},
["阿曼"] = {container = "亞洲", wp = "Oman"},
["巴基斯坦"] = {container = "亞洲", divs = {"provinces"}, wp = "Pakistan"},
["菲律賓"] = {container = "亞洲", divs = {"regions"}, wp = "Philippines"},
["菲律宾"] = {alias_of = "菲律賓"},
["卡達"] = {container = "亞洲", wp = "Qatar"},
["卡塔爾"] = {alias_of = "卡達"},
["俄羅斯"] = {container = {"歐洲", "亞洲"}, divs = {"federal subjects"}, wp = "Russia"},
["俄國"] = {alias_of = "俄羅斯"},
["沙烏地阿拉伯"] = {container = "亞洲", wp = "Saudi Arabia"},
["沙特阿拉伯"] = {alias_of = "沙烏地阿拉伯"},
["新加坡"] = {container = "亞洲", is_city = true, wp = "Singapore"},
["斯里蘭卡"] = {container = "亞洲", wp = "Sri Lanka"},
["敘利亞"] = {container = "亞洲", wp = "Syria"},
["叙利亞"] = {alias_of = "敘利亞"},
["臺灣"] = {container = "亞洲", divs = {
{type = "special municipalities", cat_as = "special municipalities and counties"},
{type = "counties", cat_as = "special municipalities and counties"},
}, wp = "Taiwan"},
["台灣"] = {alias_of = "臺灣"},
["塔吉克"] = {container = "亞洲", wp = "Tajikistan"},
["塔吉克斯坦"] = {alias_of = "塔吉克"},
["泰國"] = {container = "亞洲", divs = {"provinces"}, wp = "Thailand"},
["泰国"] = {alias_of = "泰國"},
["土耳其"] = {container = {"歐洲", "亞洲"}, wp = "Turkey"},
["土庫曼"] = {container = "亞洲", wp = "Turkmenistan"},
["土庫曼斯坦"] = {alias_of = "土庫曼"},
["阿拉伯聯合大公國"] = {container = "亞洲", wp = "United Arab Emirates"},
["阿聯酋"] = {alias_of = "阿拉伯聯合大公國"},
["烏茲別克"] = {container = "亞洲", wp = "Uzbekistan"},
["烏茲別克斯坦"] = {alias_of = "烏茲別克"},
["越南"] = {container = "亞洲", divs = {"provinces", "municipalities"}, wp = "Vietnam"},
["葉門"] = {container = "亞洲", wp = "Yemen"},
["也門"] = {alias_of = "葉門"},
-- Europe
["阿爾巴尼亞"] = {container = "歐洲", wp = "Albania"},
["安道爾"] = {container = "歐洲", wp = "Andorra"},
["奧地利"] = {container = "歐洲", divs = {"states"}, wp = "Austria"},
["白俄羅斯"] = {container = "歐洲", divs = {"regions"}, wp = "Belarus"},
["比利時"] = {container = "歐洲", divs = {"regions", "provinces"}, wp = "Belgium"},
["波士尼亞與赫塞哥維納"] = {container = "歐洲", wp = "Bosnia and Herzegovina"},
["波斯尼亞和黑塞哥維那"] = {alias_of = "波士尼亞與赫塞哥維納"},
["保加利亞"] = {container = "歐洲", wp = "Bulgaria"},
["克羅埃西亞"] = {container = "歐洲", wp = "Croatia"},
["克羅地亞"] = {alias_of = "克羅埃西亞"},
["賽普勒斯"] = {container = "亞洲", addl_parents = {"歐洲"}, wp = "Cyprus"},
["塞浦路斯"] = {alias_of = "賽普勒斯"},
["捷克"] = {container = "歐洲", wp = "Czech Republic"},
["丹麥"] = {container = "歐洲", wp = "Denmark"},
["愛沙尼亞"] = {container = "歐洲", wp = "Estonia"},
["芬蘭"] = {container = "歐洲", divs = {"regions"}, wp = "Finland"},
["法國"] = {container = "歐洲", divs = {
{type = "regions", cat_as = "metropolitan regions"},
"departments",
"communes",
}, wp = "France"},
["格魯吉亞"] = {container = {"歐洲", "亞洲"}, wp = "Georgia (country)"},
["喬治亞"] = {alias_of = "格魯吉亞"},
["德國"] = {container = "歐洲", divs = {"states"}, wp = "Germany"},
["希臘"] = {container = "歐洲", divs = {"regions"}, wp = "Greece"},
["匈牙利"] = {container = "歐洲", wp = "Hungary"},
["冰島"] = {container = "歐洲", wp = "Iceland"},
["愛爾蘭"] = {container = "歐洲", divs = {"provinces", "counties"}, wp = "Ireland"},
["意大利"] = {container = "歐洲", divs = {"regions"}, wp = "Italy"},
["義大利"] = {alias_of = "意大利"},
["科索沃"] = {container = "歐洲", wp = "Kosovo"},
["拉脫維亞"] = {container = "歐洲", wp = "Latvia"},
["拉托維亞"] = {alias_of = "拉脫維亞"},
["列支敦斯登"] = {container = "歐洲", wp = "Liechtenstein"},
["立陶宛"] = {container = "歐洲", wp = "Lithuania"},
["盧森堡"] = {container = "歐洲", wp = "Luxembourg"},
["北馬其頓"] = {container = "歐洲", wp = "North Macedonia"},
["馬爾他"] = {container = "歐洲", wp = "Malta"},
["馬耳他"] = {alias_of = "馬爾他"},
["摩爾多瓦"] = {container = "歐洲", wp = "Moldova"},
["摩納哥"] = {container = "歐洲", is_city = true, wp = "Monaco"},
["蒙特內哥羅"] = {container = "歐洲", wp = "Montenegro"},
["黑山"] = {alias_of = "蒙特內哥羅"},
["荷蘭"] = {container = "歐洲", divs = {"provinces"}, wp = "Netherlands"},
["尼德蘭"] = {alias_of = "荷蘭"},
["挪威"] = {container = "歐洲", wp = "Norway"},
["波蘭"] = {container = "歐洲", divs = {"voivodeships"}, wp = "Poland"},
["葡萄牙"] = {container = "歐洲", divs = {"districts"}, wp = "Portugal"},
["羅馬尼亞"] = {container = "歐洲", wp = "Romania"},
["聖馬利諾"] = {container = "歐洲", wp = "San Marino"},
["塞爾維亞"] = {container = "歐洲", wp = "Serbia"},
["斯洛伐克"] = {container = "歐洲", wp = "Slovakia"},
["斯洛維尼亞"] = {container = "歐洲", wp = "Slovenia"},
["斯洛文尼亞"] = {alias_of = "斯洛維尼亞"},
["西班牙"] = {container = "歐洲", divs = {"autonomous communities"}, wp = "Spain"},
["瑞典"] = {container = "歐洲", wp = "Sweden"},
["瑞士"] = {container = "歐洲", divs = {"cantons"}, wp = "Switzerland"},
["烏克蘭"] = {container = "歐洲", divs = {"oblasts"}, wp = "Ukraine"},
["英國"] = {container = "歐洲", divs = {
{type = "constituent countries", cat_as = "constituent countries"},
}, wp = "United Kingdom"},
-- North America
["加拿大"] = {container = "北美洲", divs = {
{type = "provinces", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
}, wp = "Canada"},
["墨西哥"] = {container = "北美洲", divs = {"states"}, wp = "Mexico"},
["美國"] = {container = "北美洲", divs = {"states"}, wp = "United States"},
-- Central America
["貝里斯"] = {container = "中美洲", wp = "Belize"},
["伯利茲"] = {alias_of = "貝里斯"},
["哥斯大黎加"] = {container = "中美洲", wp = "Costa Rica"},
["哥斯達黎加"] = {alias_of = "哥斯大黎加"},
["薩爾瓦多"] = {container = "中美洲", wp = "El Salvador"},
["瓜地馬拉"] = {container = "中美洲", wp = "Guatemala"},
["危地馬拉"] = {alias_of = "瓜地馬拉"},
["宏都拉斯"] = {container = "中美洲", wp = "Honduras"},
["洪都拉斯"] = {alias_of = "宏都拉斯"},
["尼加拉瓜"] = {container = "中美洲", wp = "Nicaragua"},
["巴拿馬"] = {container = "中美洲", wp = "Panama"},
-- Caribbean
["安地卡及巴布達"] = {container = "加勒比地區", wp = "Antigua and Barbuda"},
["安提瓜和巴布達"] = {alias_of = "安地卡及巴布達"},
["巴哈馬"] = {container = "加勒比地區", wp = "Bahamas"},
["巴貝多"] = {container = "加勒比地區", wp = "Barbados"},
["巴巴多斯"] = {alias_of = "巴貝多"},
["古巴"] = {container = "加勒比地區", wp = "Cuba"},
["多米尼克"] = {container = "加勒比地區", wp = "Dominica"},
["多明尼加共和國"] = {container = "加勒比地區", wp = "Dominican Republic"},
["格瑞那達"] = {container = "加勒比地區", wp = "Grenada"},
["格林納達"] = {alias_of = "格瑞那達"},
["海地"] = {container = "加勒比地區", wp = "Haiti"},
["牙買加"] = {container = "加勒比地區", wp = "Jamaica"},
["牙买加"] = {alias_of = "牙買加"},
["聖克里斯多福及尼維斯"] = {container = "加勒比地區", wp = "Saint Kitts and Nevis"},
["聖基茨和尼維斯"] = {alias_of = "聖克里斯多福及尼維斯"},
["聖露西亞"] = {container = "加勒比地區", wp = "Saint Lucia"},
["聖文森及格瑞那丁"] = {container = "加勒比地區", wp = "Saint Vincent and the Grenadines"},
["千里達及托巴哥"] = {container = "加勒比地區", wp = "Trinidad and Tobago"},
["特立尼達和多巴哥"] = {alias_of = "千里達及托巴哥"},
-- South America
["阿根廷"] = {container = "南美洲", divs = {"provinces"}, wp = "Argentina"},
["玻利維亞"] = {container = "南美洲", wp = "Bolivia"},
["玻利维亚"] = {alias_of = "玻利維亞"},
["巴西"] = {container = "南美洲", divs = {"states"}, wp = "Brazil"},
["智利"] = {container = "南美洲", wp = "Chile"},
["哥倫比亞"] = {container = "南美洲", wp = "Colombia"},
["哥伦比亚"] = {alias_of = "哥倫比亞"},
["厄瓜多"] = {container = "南美洲", wp = "Ecuador"},
["厄瓜多爾"] = {alias_of = "厄瓜多"},
["蓋亞那"] = {container = "南美洲", wp = "Guyana"},
["圭亞那"] = {alias_of = "蓋亞那"},
["巴拉圭"] = {container = "南美洲", wp = "Paraguay"},
["秘魯"] = {container = "南美洲", wp = "Peru"},
["秘鲁"] = {alias_of = "秘魯"},
["蘇利南"] = {container = "南美洲", wp = "Suriname"},
["蘇里南"] = {alias_of = "蘇利南"},
["烏拉圭"] = {container = "南美洲", wp = "Uruguay"},
["委內瑞拉"] = {container = "南美洲", wp = "Venezuela"},
["委内瑞拉"] = {alias_of = "委內瑞拉"},
-- Oceania
["澳大利亞"] = {container = "大洋洲", divs = {
{type = "states", cat_as = "states and territories"},
{type = "territories", cat_as = "states and territories"},
}, wp = "Australia"},
["澳洲"] = {alias_of = "澳大利亞"},
["斐濟"] = {container = "大洋洲", wp = "Fiji"},
["吉里巴斯"] = {container = "大洋洲", wp = "Kiribati"},
["馬紹爾群島"] = {container = "大洋洲", wp = "Marshall Islands"},
["密克羅尼西亞聯邦"] = {container = "大洋洲", wp = "Federated States of Micronesia"},
["諾魯"] = {container = "大洋洲", wp = "Nauru"},
["瑙魯"] = {alias_of = "諾魯"},
["紐西蘭"] = {container = "大洋洲", wp = "New Zealand"},
["新西蘭"] = {alias_of = "紐西蘭"},
["帛琉"] = {container = "大洋洲", wp = "Palau"},
["帕勞"] = {alias_of = "帛琉"},
["巴布亞紐幾內亞"] = {container = "大洋洲", wp = "Papua New Guinea"},
["巴布亚新几内亚"] = {alias_of = "巴布亞紐幾內亞"},
["薩摩亞"] = {container = "大洋洲", wp = "Samoa"},
["萨摩亚"] = {alias_of = "薩摩亞"},
["所羅門群島"] = {container = "大洋洲", wp = "Solomon Islands"},
["東加"] = {container = "大洋洲", wp = "Tonga"},
["湯加"] = {alias_of = "東加"},
["吐瓦魯"] = {container = "大洋洲", wp = "Tuvalu"},
["圖瓦盧"] = {alias_of = "吐瓦魯"},
["萬那杜"] = {container = "大洋洲", wp = "Vanuatu"},
["瓦努阿圖"] = {alias_of = "萬那杜"},
}
export.countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_overriding_bare_label_parents = {"+++", "countries"},
default_placetype = "country",
default_no_container_cat = true,
default_no_container_parent = true,
default_no_auto_augment_container = true,
placename_to_key = false,
data = export.countries,
}
-----------------------------------------------------------------------------------
-- Country-like entities --
-----------------------------------------------------------------------------------
export.country_like_entities = {
-- Special administrative regions of China
["香港"] = {
placetype = {"special administrative region", "region"},
container = "中國",
addl_parents = {"亞洲"},
is_city = true,
divs = {"districts"},
wp = "Hong Kong",
},
["澳門"] = {
placetype = {"special administrative region", "region"},
container = "中國",
addl_parents = {"亞洲"},
is_city = true,
wp = "Macau",
},
-- Western Sahara
["西撒哈拉"] = {
placetype = {"territory", "country"},
container = "非洲",
wp = "Western Sahara",
},
-- Kosovo (disputed)
["科索沃(部分承認)"] = {alias_of = "科索沃"},
-- Palestinian territories
["巴勒斯坦"] = {
placetype = {"country", "territory"},
container = "亞洲",
wp = "State of Palestine",
},
-- Key overseas territories
["波多黎各"] = {
placetype = {"commonwealth", "territory"},
container = "美國",
addl_parents = {"加勒比地區"},
wp = "Puerto Rico",
},
["關島"] = {
placetype = {"territory"},
container = "美國",
addl_parents = {"密克羅尼西亞"},
wp = "Guam",
},
["新喀里多尼亞"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"大洋洲"},
wp = "New Caledonia",
},
["法屬圭亞那"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"南美洲"},
wp = "French Guiana",
},
["留尼旺"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"非洲"},
wp = "Réunion",
},
["馬丁尼克"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"加勒比地區"},
wp = "Martinique",
},
["瓜德羅普"] = {
placetype = {"territory"},
container = "法國",
addl_parents = {"加勒比地區"},
wp = "Guadeloupe",
},
["格陵蘭"] = {
placetype = {"territory"},
container = "丹麥",
addl_parents = {"北美洲"},
wp = "Greenland",
},
["法羅群島"] = {
placetype = {"territory"},
container = "丹麥",
addl_parents = {"歐洲"},
wp = "Faroe Islands",
},
}
export.country_like_entities_group = {
canonicalize_key_container = make_canonicalize_key_container(nil, "country"),
default_placetype = "territory",
placename_to_key = false,
data = export.country_like_entities,
}
-----------------------------------------------------------------------------------
-- Former countries --
-----------------------------------------------------------------------------------
export.former_countries = {
["蘇聯"] = {
placetype = {"country"},
container = {"歐洲", "亞洲"},
is_former_place = true,
wp = "Soviet Union",
},
["南斯拉夫"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Yugoslavia",
},
["捷克斯洛伐克"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Czechoslovakia",
},
["東德"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "East Germany",
},
["西德"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "West Germany",
},
["奧匈帝國"] = {
placetype = {"empire"},
container = "歐洲",
is_former_place = true,
wp = "Austria-Hungary",
},
["鄂圖曼帝國"] = {
placetype = {"empire"},
container = {"歐洲", "亞洲"},
is_former_place = true,
wp = "Ottoman Empire",
},
["奧斯曼帝國"] = {alias_of = "鄂圖曼帝國"},
["羅馬帝國"] = {
placetype = {"empire"},
container = {"歐洲", "亞洲", "非洲"},
is_former_place = true,
wp = "Roman Empire",
},
["大英帝國"] = {
placetype = {"empire"},
is_former_place = true,
wp = "British Empire",
},
["普魯士"] = {
placetype = {"country"},
container = "歐洲",
is_former_place = true,
wp = "Prussia",
},
}
export.former_countries_group = {
canonicalize_key_container = canonicalize_continent_container,
default_placetype = "country",
default_is_former_place = true,
placename_to_key = false,
data = export.former_countries,
}
-----------------------------------------------------------------------------------
-- United States states --
-----------------------------------------------------------------------------------
export.united_states_states = {
["阿拉巴馬"] = {wp = "Alabama"},
["阿拉斯加"] = {wp = "Alaska"},
["亞利桑那"] = {wp = "Arizona"},
["阿肯色"] = {wp = "Arkansas"},
["加利福尼亞"] = {wp = "California"},
["加州"] = {alias_of = "加利福尼亞"},
["科羅拉多"] = {wp = "Colorado"},
["康乃狄克"] = {wp = "Connecticut"},
["康涅狄格"] = {alias_of = "康乃狄克"},
["德拉瓦"] = {wp = "Delaware"},
["佛羅里達"] = {wp = "Florida"},
["佛罗里达"] = {alias_of = "佛羅里達"},
["佐治亞"] = {wp = "Georgia (U.S. state)"},
["夏威夷"] = {addl_parents = {"玻里尼西亞"}, wp = "Hawaii"},
["愛達荷"] = {wp = "Idaho"},
["伊利諾伊"] = {wp = "Illinois"},
["伊利诺伊"] = {alias_of = "伊利諾伊"},
["印地安那"] = {wp = "Indiana"},
["印第安納"] = {alias_of = "印地安那"},
["愛荷華"] = {wp = "Iowa"},
["堪薩斯"] = {wp = "Kansas"},
["肯塔基"] = {wp = "Kentucky"},
["路易斯安那"] = {wp = "Louisiana"},
["緬因"] = {wp = "Maine"},
["馬里蘭"] = {wp = "Maryland"},
["麻薩諸塞"] = {wp = "Massachusetts"},
["麻薩诸塞"] = {alias_of = "麻薩諸塞"},
["密西根"] = {wp = "Michigan"},
["密歇根"] = {alias_of = "密西根"},
["明尼蘇達"] = {wp = "Minnesota"},
["明尼苏达"] = {alias_of = "明尼蘇達"},
["密西西比"] = {wp = "Mississippi"},
["密蘇里"] = {wp = "Missouri"},
["蒙大拿"] = {wp = "Montana"},
["內布拉斯加"] = {wp = "Nebraska"},
["內華達"] = {wp = "Nevada"},
["新罕布什爾"] = {wp = "New Hampshire"},
["新澤西"] = {wp = "New Jersey"},
["新泽西"] = {alias_of = "新澤西"},
["新墨西哥"] = {wp = "New Mexico"},
["紐約"] = {wp = "New York (state)"},
["纽约"] = {alias_of = "紐約"},
["北卡羅來納"] = {wp = "North Carolina"},
["北达科他"] = {alias_of = "北達科他"},
["北達科他"] = {wp = "North Dakota"},
["俄亥俄"] = {wp = "Ohio"},
["奧克拉荷馬"] = {wp = "Oklahoma"},
["奧勒岡"] = {wp = "Oregon"},
["俄勒冈"] = {alias_of = "奧勒岡"},
["賓夕法尼亞"] = {wp = "Pennsylvania"},
["宾夕法尼亚"] = {alias_of = "賓夕法尼亞"},
["羅德島"] = {wp = "Rhode Island"},
["南卡羅來納"] = {wp = "South Carolina"},
["南達科他"] = {wp = "South Dakota"},
["田納西"] = {wp = "Tennessee"},
["田纳西"] = {alias_of = "田納西"},
["德克薩斯"] = {wp = "Texas"},
["德州"] = {alias_of = "德克薩斯"},
["猶他"] = {wp = "Utah"},
["佛蒙特"] = {wp = "Vermont"},
["弗吉尼亞"] = {wp = "Virginia"},
["弗吉尼亚"] = {alias_of = "弗吉尼亞"},
["維吉尼亞"] = {alias_of = "弗吉尼亞"},
["華盛頓州"] = {wp = "Washington (state)"},
["华盛顿州"] = {alias_of = "華盛頓州"},
["西維吉尼亞"] = {wp = "West Virginia"},
["西弗吉尼亞"] = {alias_of = "西維吉尼亞"},
["威斯康辛"] = {wp = "Wisconsin"},
["懷俄明"] = {wp = "Wyoming"},
-- Washington D.C. (federal district, treated like a state in holonym context)
["華盛頓特區"] = {placetype = {"federal district", "district"}, wp = "Washington, D.C."},
}
export.united_states_group = {
placename_to_key = false,
default_container = "美國",
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,
}
-----------------------------------------------------------------------------------
-- United Kingdom constituent countries --
-----------------------------------------------------------------------------------
export.united_kingdom_constituent_countries = {
["英格蘭"] = {divs = {"counties", "districts"}, wp = "England"},
["北愛爾蘭"] = {
placetype = {"constituent country", "province", "country"},
divs = {"counties", "districts"},
wp = "Northern Ireland",
},
["蘇格蘭"] = {divs = {{type = "council areas", container_parent_type = false}}, wp = "Scotland"},
["威爾斯"] = {divs = {"counties"}, wp = "Wales"},
["威尔士"] = {alias_of = "威爾斯"},
}
export.united_kingdom_group = {
placename_to_key = false,
default_container = "英國",
default_placetype = {"constituent country", "country"},
default_no_container_cat = true,
data = export.united_kingdom_constituent_countries,
}
-- Scotland council areas
export.scotland_council_areas = {
["Aberdeen市"] = {wp = "Aberdeen"},
["Aberdeenshire"] = {wp = "Aberdeenshire"},
["Angus"] = {wp = "Angus, Scotland"},
["Argyll and Bute"] = {wp = "Argyll and Bute"},
["Clackmannanshire"] = {wp = "Clackmannanshire"},
["Dumfries and Galloway"] = {wp = "Dumfries and Galloway"},
["Dundee市"] = {wp = "Dundee"},
["East Ayrshire"] = {wp = "East Ayrshire"},
["East Dunbartonshire"] = {wp = "East Dunbartonshire"},
["East Lothian"] = {wp = "East Lothian"},
["East Renfrewshire"] = {wp = "East Renfrewshire"},
["Edinburgh市"] = {wp = "Edinburgh"},
["Eilean Siar"] = {wp = "Outer Hebrides"},
["Falkirk"] = {wp = "Falkirk"},
["Fife"] = {wp = "Fife"},
["Glasgow市"] = {wp = "Glasgow"},
["高地"] = {wp = "Highland council area"},
["Highland"] = {alias_of = "高地", display = true},
["Inverclyde"] = {wp = "Inverclyde"},
["Midlothian"] = {wp = "Midlothian"},
["Moray"] = {wp = "Moray"},
["North Ayrshire"] = {wp = "North Ayrshire"},
["North Lanarkshire"] = {wp = "North Lanarkshire"},
["Orkney群島"] = {wp = "Orkney"},
["Perth and Kinross"] = {wp = "Perth and Kinross"},
["Renfrewshire"] = {wp = "Renfrewshire"},
["Scottish Borders"] = {wp = "Scottish Borders"},
["Shetland群島"] = {wp = "Shetland"},
["South Ayrshire"] = {wp = "South Ayrshire"},
["South Lanarkshire"] = {wp = "South Lanarkshire"},
["Stirling"] = {wp = "Stirling (council area)"},
["West Dunbartonshire"] = {wp = "West Dunbartonshire"},
["West Lothian"] = {wp = "West Lothian"},
}
export.scotland_group = {
placename_to_key = false,
default_container = "蘇格蘭",
default_placetype = "council area",
data = export.scotland_council_areas,
}
-- England counties (ceremonial)
export.england_counties = {
-- Metropolitan counties
["大倫敦"] = {wp = "Greater London"},
["大曼徹斯特"] = {wp = "Greater Manchester"},
["默西賽德郡"] = {wp = "Merseyside"},
["西密德蘭"] = {wp = "West Midlands (county)"},
["南約克郡"] = {wp = "South Yorkshire"},
["西約克郡"] = {wp = "West Yorkshire"},
["泰恩-威爾郡"] = {wp = "Tyne and Wear"},
-- Non-metropolitan ceremonial counties
["貝德福德郡"] = {wp = "Bedfordshire"},
["伯克郡"] = {wp = "Berkshire"},
["白金漢郡"] = {wp = "Buckinghamshire"},
["劍橋郡"] = {wp = "Cambridgeshire"},
["柴郡"] = {wp = "Cheshire"},
["康沃爾郡"] = {wp = "Cornwall"},
["坎布里亞郡"] = {wp = "Cumbria"},
["德比郡"] = {wp = "Derbyshire"},
["德文郡"] = {wp = "Devon"},
["多塞特郡"] = {wp = "Dorset"},
["達勒姆郡"] = {wp = "County Durham"},
["約克郡東區"] = {wp = "East Riding of Yorkshire"},
["東薩塞克斯郡"] = {wp = "East Sussex"},
["埃塞克斯郡"] = {wp = "Essex"},
["格洛斯特郡"] = {wp = "Gloucestershire"},
["漢普郡"] = {wp = "Hampshire"},
["赫里福德郡"] = {wp = "Herefordshire"},
["赫特福德郡"] = {wp = "Hertfordshire"},
["懷特島"] = {wp = "Isle of Wight"},
["肯特郡"] = {wp = "Kent"},
["蘭開夏郡"] = {wp = "Lancashire"},
["萊斯特郡"] = {wp = "Leicestershire"},
["林肯郡"] = {wp = "Lincolnshire"},
["諾福克郡"] = {wp = "Norfolk"},
["北安普敦郡"] = {wp = "Northamptonshire"},
["諾森伯蘭郡"] = {wp = "Northumberland"},
["北約克郡"] = {wp = "North Yorkshire"},
["諾丁漢郡"] = {wp = "Nottinghamshire"},
["牛津郡"] = {wp = "Oxfordshire"},
["拉特蘭郡"] = {wp = "Rutland"},
["什羅普郡"] = {wp = "Shropshire"},
["薩默塞特郡"] = {wp = "Somerset"},
["南亨伯賽德郡"] = {wp = "South Humberside"},
["斯塔福德郡"] = {wp = "Staffordshire"},
["薩福克郡"] = {wp = "Suffolk"},
["薩里郡"] = {wp = "Surrey"},
["沃里克郡"] = {wp = "Warwickshire"},
["西薩塞克斯郡"] = {wp = "West Sussex"},
["威爾特郡"] = {wp = "Wiltshire"},
["伍斯特郡"] = {wp = "Worcestershire"},
}
export.england_group = {
placename_to_key = false,
default_container = {key = "英格蘭", placetype = "constituent country"},
default_placetype = "county",
data = export.england_counties,
}
-- Counties of Northern Ireland
export.northern_ireland_counties = {
["安特里姆郡"] = {wp = "County Antrim"},
["阿爾馬郡"] = {wp = "County Armagh"},
["貝爾法斯特市"] = {is_city = true, wp = "Belfast"},
["唐郡"] = {wp = "County Down"},
["弗馬納郡"] = {wp = "County Fermanagh"},
["倫敦德里郡"] = {wp = "County Londonderry"},
["德里市"] = {is_city = true, wp = "Derry"},
["泰龍郡"] = {wp = "County Tyrone"},
}
export.northern_ireland_group = {
placename_to_key = false,
default_container = {key = "北愛爾蘭", placetype = "constituent country"},
default_placetype = "county",
data = export.northern_ireland_counties,
}
-- Counties of Ireland
export.ireland_counties = {
["卡洛郡"] = {wp = "County Carlow"},
["卡文郡"] = {wp = "County Cavan"},
["克萊爾郡"] = {wp = "County Clare"},
["科克郡"] = {wp = "County Cork"},
["多尼戈爾郡"] = {wp = "County Donegal"},
["都柏林郡"] = {wp = "County Dublin"},
["戈爾韋郡"] = {wp = "County Galway"},
["克里郡"] = {wp = "County Kerry"},
["基爾代爾郡"] = {wp = "County Kildare"},
["基爾肯尼郡"] = {wp = "County Kilkenny"},
["萊什郡"] = {wp = "County Laois"},
["利特里姆郡"] = {wp = "County Leitrim"},
["利默里克郡"] = {wp = "County Limerick"},
["朗福德郡"] = {wp = "County Longford"},
["勞斯郡"] = {wp = "County Louth"},
["梅奧郡"] = {wp = "County Mayo"},
["米斯郡"] = {wp = "County Meath"},
["莫納亨郡"] = {wp = "County Monaghan"},
["奧法利郡"] = {wp = "County Offaly"},
["羅斯康芒郡"] = {wp = "County Roscommon"},
["斯萊戈郡"] = {wp = "County Sligo"},
["蒂珀雷里郡"] = {wp = "County Tipperary"},
["沃特福德郡"] = {wp = "County Waterford"},
["西米斯郡"] = {wp = "County Westmeath"},
["韋克斯福德郡"] = {wp = "County Wexford"},
["威克洛郡"] = {wp = "County Wicklow"},
}
export.ireland_group = {
placename_to_key = false,
default_container = "愛爾蘭",
default_placetype = "county",
data = export.ireland_counties,
}
-----------------------------------------------------------------------------------
-- China provinces --
-----------------------------------------------------------------------------------
export.china_provinces = {
-- Provinces
["安徽"] = {wp = "Anhui"},
["福建"] = {wp = "Fujian"},
["甘肅"] = {wp = "Gansu"},
["廣東"] = {wp = "Guangdong"},
["貴州"] = {wp = "Guizhou"},
["海南"] = {wp = "Hainan"},
["河北"] = {wp = "Hebei"},
["黑龍江"] = {wp = "Heilongjiang"},
["河南"] = {wp = "Henan"},
["湖北"] = {wp = "Hubei"},
["湖南"] = {wp = "Hunan"},
["江蘇"] = {wp = "Jiangsu"},
["江西"] = {wp = "Jiangxi"},
["吉林"] = {wp = "Jilin"},
["遼寧"] = {wp = "Liaoning"},
["青海"] = {wp = "Qinghai"},
["陝西"] = {wp = "Shaanxi"},
["山東"] = {wp = "Shandong"},
["山西"] = {wp = "Shanxi"},
["四川"] = {wp = "Sichuan"},
["雲南"] = {wp = "Yunnan"},
["浙江"] = {wp = "Zhejiang"},
-- Autonomous regions
["廣西壯族自治區"] = {placetype = "autonomous region", wp = "Guangxi"},
["廣西"] = {alias_of = "廣西壯族自治區"},
["內蒙古自治區"] = {placetype = "autonomous region", wp = "Inner Mongolia"},
["內蒙古"] = {alias_of = "內蒙古自治區"},
["寧夏回族自治區"] = {placetype = "autonomous region", wp = "Ningxia"},
["寧夏"] = {alias_of = "寧夏回族自治區"},
["西藏自治區"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"},
["西藏"] = {alias_of = "西藏自治區"},
["新疆維吾爾自治區"] = {placetype = "autonomous region", wp = "Xinjiang"},
["新疆"] = {alias_of = "新疆維吾爾自治區"},
-- Direct-administered municipalities (treated as province-level for holonym purposes)
["北京"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Beijing"},
["北京市"] = {alias_of = "北京"},
["上海"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Shanghai"},
["上海市"] = {alias_of = "上海"},
["天津"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Tianjin"},
["天津市"] = {alias_of = "天津"},
["重慶"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Chongqing"},
["重慶市"] = {alias_of = "重慶"},
}
export.china_group = {
placename_to_key = false,
default_container = "中國",
default_placetype = "province",
default_divs = {
"prefecture-level cities",
"districts",
{type = "counties", cat_as = "counties and county-level cities"},
{type = "county-level cities", cat_as = "counties and county-level cities"},
},
data = export.china_provinces,
}
-----------------------------------------------------------------------------------
-- Taiwan counties --
-----------------------------------------------------------------------------------
-- Note: In zhwikt, Taiwan county keys use Chinese names directly.
-- The enwikt-style lookup `taiwan_counties["Chiayi County, Taiwan"]` will return nil
-- (correct: no English suffix auto-detection for Chinese holonym names).
export.taiwan_counties = {
["彰化縣"] = {wp = "Changhua County"},
["嘉義縣"] = {wp = "Chiayi County"},
["新竹縣"] = {wp = "Hsinchu County"},
["花蓮縣"] = {wp = "Hualien County"},
["金門縣"] = {wp = "Kinmen County"},
["連江縣"] = {wp = "Lienchiang County"},
["苗栗縣"] = {wp = "Miaoli County"},
["南投縣"] = {wp = "Nantou County"},
["澎湖縣"] = {wp = "Penghu County"},
["屏東縣"] = {wp = "Pingtung County"},
["臺東縣"] = {wp = "Taitung County"},
["宜蘭縣"] = {wp = "Yilan County"},
["雲林縣"] = {wp = "Yunlin County"},
-- Special municipalities (province-level)
["臺北市"] = {placetype = "special municipality", wp = "Taipei"},
["新北市"] = {placetype = "special municipality", wp = "New Taipei"},
["桃園市"] = {placetype = "special municipality", wp = "Taoyuan City"},
["臺中市"] = {placetype = "special municipality", wp = "Taichung"},
["臺南市"] = {placetype = "special municipality", wp = "Tainan"},
["高雄市"] = {placetype = "special municipality", wp = "Kaohsiung"},
["嘉義市"] = {placetype = "city", wp = "Chiayi City"},
["新竹市"] = {placetype = "city", wp = "Hsinchu City"},
["基隆市"] = {placetype = "city", wp = "Keelung"},
}
export.taiwan_group = {
placename_to_key = false,
default_container = "臺灣",
default_placetype = "county",
default_divs = {"districts", "townships"},
data = export.taiwan_counties,
}
-----------------------------------------------------------------------------------
-- Canada provinces and territories --
-----------------------------------------------------------------------------------
export.canada_provinces_and_territories = {
["亞伯達"] = {wp = "Alberta"},
["艾伯塔"] = {alias_of = "亞伯達"},
["英屬哥倫比亞"] = {wp = "British Columbia"},
["卑詩省"] = {alias_of = "英屬哥倫比亞"},
["馬尼托巴"] = {wp = "Manitoba"},
["新不倫瑞克"] = {wp = "New Brunswick"},
["紐芬蘭與拉布拉多"] = {wp = "Newfoundland and Labrador"},
["西北地區"] = {placetype = "territory", wp = "Northwest Territories"},
["新斯科舍"] = {wp = "Nova Scotia"},
["努納武特"] = {placetype = "territory", wp = "Nunavut"},
["安大略"] = {divs = {"counties", "regional municipalities"}, wp = "Ontario"},
["愛德華王子島"] = {wp = "Prince Edward Island"},
["魁北克"] = {wp = "Quebec"},
["薩斯喀徹溫"] = {wp = "Saskatchewan"},
["育空"] = {placetype = "territory", wp = "Yukon"},
}
export.canada_group = {
placename_to_key = false,
default_container = "加拿大",
default_placetype = "province",
data = export.canada_provinces_and_territories,
}
-----------------------------------------------------------------------------------
-- Australia states and territories --
-----------------------------------------------------------------------------------
export.australia_states_and_territories = {
["新南威爾斯"] = {wp = "New South Wales"},
["維多利亞州"] = {wp = "Victoria (Australia)"},
["昆士蘭"] = {wp = "Queensland"},
["南澳大利亞"] = {wp = "South Australia"},
["西澳大利亞"] = {wp = "Western Australia"},
["塔斯馬尼亞"] = {wp = "Tasmania"},
["澳大利亞首都領地"] = {placetype = "territory", wp = "Australian Capital Territory"},
["北領地"] = {placetype = "territory", wp = "Northern Territory"},
}
export.australia_group = {
placename_to_key = false,
default_container = "澳大利亞",
default_placetype = "state",
data = export.australia_states_and_territories,
}
-----------------------------------------------------------------------------------
-- India states and union territories --
-----------------------------------------------------------------------------------
export.india_states_and_union_territories = {
["安達曼-尼科巴群島"] = {placetype = "union territory", wp = "Andaman and Nicobar Islands"},
["安得拉邦"] = {wp = "Andhra Pradesh"},
["阿魯納恰爾邦"] = {wp = "Arunachal Pradesh"},
["阿薩姆"] = {wp = "Assam"},
["比哈爾邦"] = {wp = "Bihar"},
["昌迪加爾"] = {placetype = "union territory", wp = "Chandigarh"},
["恰蒂斯加爾邦"] = {wp = "Chhattisgarh"},
["達德拉-納加爾哈維利和達曼-第烏"] = {placetype = "union territory", wp = "Dadra and Nagar Haveli and Daman and Diu"},
["德里"] = {placetype = "union territory", wp = "Delhi"},
["果阿"] = {wp = "Goa"},
["古吉拉特邦"] = {wp = "Gujarat"},
["哈里亞納邦"] = {wp = "Haryana"},
["喜馬偕爾邦"] = {wp = "Himachal Pradesh"},
["查謨和克什米爾"] = {placetype = "union territory", wp = "Jammu and Kashmir (union territory)"},
["賈坎德邦"] = {wp = "Jharkhand"},
["卡納塔克邦"] = {wp = "Karnataka"},
["喀拉拉邦"] = {wp = "Kerala"},
["拉達克"] = {placetype = "union territory", wp = "Ladakh"},
["拉克沙群島"] = {placetype = "union territory", wp = "Lakshadweep"},
["中央邦"] = {wp = "Madhya Pradesh"},
["馬哈拉施特拉邦"] = {wp = "Maharashtra"},
["曼尼普爾邦"] = {wp = "Manipur"},
["梅加拉亞邦"] = {wp = "Meghalaya"},
["米佐拉姆邦"] = {wp = "Mizoram"},
["那加蘭邦"] = {wp = "Nagaland"},
["奧里薩邦"] = {wp = "Odisha"},
["本地治里"] = {placetype = "union territory", wp = "Puducherry"},
["旁遮普邦"] = {wp = "Punjab, India"},
["拉賈斯坦邦"] = {wp = "Rajasthan"},
["錫金"] = {wp = "Sikkim"},
["泰米爾納德邦"] = {wp = "Tamil Nadu"},
["特倫甘納邦"] = {wp = "Telangana"},
["特里普拉邦"] = {wp = "Tripura"},
["北方邦"] = {wp = "Uttar Pradesh"},
["北阿坎德邦"] = {wp = "Uttarakhand"},
["西孟加拉邦"] = {wp = "West Bengal"},
}
export.india_group = {
placename_to_key = false,
default_container = "印度",
default_placetype = "state",
default_divs = {"districts"},
data = export.india_states_and_union_territories,
}
-----------------------------------------------------------------------------------
-- Japan prefectures --
-----------------------------------------------------------------------------------
-- Note: export.japan_prefectures is accessed directly by place-placetypes.lua
-- using English-style keys (e.g. "Tokyo Prefecture, Japan"). Those lookups return
-- nil for Chinese keys, which is correct: no English "Prefecture" suffix is added.
export.japan_prefectures = {
["北海道"] = {placetype = {"prefecture"}, wp = "Hokkaido"},
["青森縣"] = {wp = "Aomori Prefecture"},
["岩手縣"] = {wp = "Iwate Prefecture"},
["宮城縣"] = {wp = "Miyagi Prefecture"},
["秋田縣"] = {wp = "Akita Prefecture"},
["山形縣"] = {wp = "Yamagata Prefecture"},
["福島縣"] = {wp = "Fukushima Prefecture"},
["茨城縣"] = {wp = "Ibaraki Prefecture"},
["栃木縣"] = {wp = "Tochigi Prefecture"},
["群馬縣"] = {wp = "Gunma Prefecture"},
["埼玉縣"] = {wp = "Saitama Prefecture"},
["千葉縣"] = {wp = "Chiba Prefecture"},
["東京都"] = {placetype = {"prefecture"}, wp = "Tokyo"},
["神奈川縣"] = {wp = "Kanagawa Prefecture"},
["新潟縣"] = {wp = "Niigata Prefecture"},
["富山縣"] = {wp = "Toyama Prefecture"},
["石川縣"] = {wp = "Ishikawa Prefecture"},
["福井縣"] = {wp = "Fukui Prefecture"},
["山梨縣"] = {wp = "Yamanashi Prefecture"},
["長野縣"] = {wp = "Nagano Prefecture"},
["岐阜縣"] = {wp = "Gifu Prefecture"},
["靜岡縣"] = {wp = "Shizuoka Prefecture"},
["愛知縣"] = {wp = "Aichi Prefecture"},
["三重縣"] = {wp = "Mie Prefecture"},
["滋賀縣"] = {wp = "Shiga Prefecture"},
["京都府"] = {placetype = {"prefecture"}, wp = "Kyoto Prefecture"},
["大阪府"] = {placetype = {"prefecture"}, wp = "Osaka Prefecture"},
["兵庫縣"] = {wp = "Hyogo Prefecture"},
["奈良縣"] = {wp = "Nara Prefecture"},
["和歌山縣"] = {wp = "Wakayama Prefecture"},
["鳥取縣"] = {wp = "Tottori Prefecture"},
["島根縣"] = {wp = "Shimane Prefecture"},
["岡山縣"] = {wp = "Okayama Prefecture"},
["廣島縣"] = {wp = "Hiroshima Prefecture"},
["山口縣"] = {wp = "Yamaguchi Prefecture"},
["德島縣"] = {wp = "Tokushima Prefecture"},
["香川縣"] = {wp = "Kagawa Prefecture"},
["愛媛縣"] = {wp = "Ehime Prefecture"},
["高知縣"] = {wp = "Kochi Prefecture"},
["福岡縣"] = {wp = "Fukuoka Prefecture"},
["佐賀縣"] = {wp = "Saga Prefecture"},
["長崎縣"] = {wp = "Nagasaki Prefecture"},
["熊本縣"] = {wp = "Kumamoto Prefecture"},
["大分縣"] = {wp = "Oita Prefecture"},
["宮崎縣"] = {wp = "Miyazaki Prefecture"},
["鹿兒島縣"] = {wp = "Kagoshima Prefecture"},
["沖繩縣"] = {wp = "Okinawa Prefecture"},
}
export.japan_group = {
placename_to_key = false,
default_container = "日本",
default_placetype = "prefecture",
default_divs = {"cities", "districts"},
data = export.japan_prefectures,
}
-----------------------------------------------------------------------------------
-- Germany states (Bundesländer) --
-----------------------------------------------------------------------------------
export.germany_states = {
["巴登-符騰堡"] = {wp = "Baden-Württemberg"},
["巴伐利亞"] = {wp = "Bavaria"},
["柏林"] = {wp = "Berlin"},
["布蘭登堡"] = {wp = "Brandenburg"},
["不來梅"] = {wp = "Bremen"},
["漢堡"] = {wp = "Hamburg"},
["黑森"] = {wp = "Hesse"},
["梅克倫堡-前波美拉尼亞"] = {wp = "Mecklenburg-Vorpommern"},
["下薩克森"] = {wp = "Lower Saxony"},
["北萊茵-威斯特法倫"] = {wp = "North Rhine-Westphalia"},
["萊茵蘭-普法爾茨"] = {wp = "Rhineland-Palatinate"},
["薩爾"] = {wp = "Saarland"},
["薩克森"] = {wp = "Saxony"},
["薩克森-安哈爾特"] = {wp = "Saxony-Anhalt"},
["石勒蘇益格-荷爾斯泰因"] = {wp = "Schleswig-Holstein"},
["圖林根"] = {wp = "Thuringia"},
}
export.germany_group = {
placename_to_key = false,
default_container = "德國",
default_placetype = "state",
data = export.germany_states,
}
-----------------------------------------------------------------------------------
-- Italy regions (Regioni) --
-----------------------------------------------------------------------------------
export.italy_regions = {
["阿布魯佐"] = {wp = "Abruzzo"},
["巴西利卡塔"] = {wp = "Basilicata"},
["卡拉布里亞"] = {wp = "Calabria"},
["坎帕尼亞"] = {wp = "Campania"},
["艾米利亞-羅馬涅"] = {wp = "Emilia-Romagna"},
["弗留利-威尼斯朱利亞"] = {wp = "Friuli-Venezia Giulia"},
["拉齊奧"] = {wp = "Lazio"},
["利古里亞"] = {wp = "Liguria"},
["倫巴第"] = {wp = "Lombardy"},
["倫巴底"] = {alias_of = "倫巴第"},
["馬爾凱"] = {wp = "Marche"},
["莫利塞"] = {wp = "Molise"},
["皮埃蒙特"] = {wp = "Piedmont"},
["普利亞"] = {wp = "Apulia"},
["阿普利亞"] = {alias_of = "普利亞"},
["薩丁尼亞"] = {wp = "Sardinia"},
["西西里"] = {wp = "Sicily"},
["托斯卡納"] = {wp = "Tuscany"},
["特倫蒂諾-上阿迪傑"] = {wp = "Trentino-Alto Adige/Südtirol"},
["翁布里亞"] = {wp = "Umbria"},
["奧斯塔谷"] = {wp = "Aosta Valley"},
["威尼托"] = {wp = "Veneto"},
}
export.italy_group = {
placename_to_key = false,
default_container = "意大利",
default_placetype = "region",
data = export.italy_regions,
}
-----------------------------------------------------------------------------------
-- Spain autonomous communities (Comunidades autónomas) --
-----------------------------------------------------------------------------------
export.spain_autonomous_communities = {
["安達盧西亞"] = {wp = "Andalusia"},
["安達魯西亞"] = {alias_of = "安達盧西亞"},
["阿拉貢"] = {wp = "Aragon"},
["阿斯圖里亞斯"] = {wp = "Asturias"},
["巴利阿里群島"] = {wp = "Balearic Islands"},
["巴斯克"] = {wp = "Basque Country (autonomous community)"},
["加那利群島"] = {wp = "Canary Islands"},
["坎塔布里亞"] = {wp = "Cantabria"},
["卡斯蒂利亞-拉曼恰"] = {wp = "Castilla-La Mancha"},
["卡斯蒂利亞-萊昂"] = {wp = "Castilla y León"},
["加泰羅尼亞"] = {wp = "Catalonia"},
["加泰隆尼亞"] = {alias_of = "加泰羅尼亞"},
["埃斯特雷馬杜拉"] = {wp = "Extremadura"},
["加利西亞"] = {wp = "Galicia (Spain)"},
["拉里奧哈"] = {wp = "La Rioja (autonomous community)"},
["馬德里自治區"] = {wp = "Community of Madrid"},
["穆爾西亞"] = {wp = "Region of Murcia"},
["納瓦拉"] = {wp = "Navarre"},
["巴倫西亞"] = {wp = "Valencian Community"},
["巴倫西亞自治區"] = {alias_of = "巴倫西亞"},
}
export.spain_group = {
placename_to_key = false,
default_container = "西班牙",
default_placetype = "autonomous community",
data = export.spain_autonomous_communities,
}
-----------------------------------------------------------------------------------
-- China prefecture-level cities --
-- Mirrors enwikt china_prefecture_level_cities (168 entries) and --
-- china_prefecture_level_cities_2 (4 entries, merged here since Chinese names --
-- are unambiguous: 台州/泰州, 蘇州/宿州 do not clash). --
-----------------------------------------------------------------------------------
export.china_prefecture_level_cities = {
-- Guangdong
["廣州"] = {container = "廣東", wp = "Guangzhou"},
["東莞"] = {container = "廣東", wp = "Dongguan"},
["佛山"] = {container = "廣東", wp = "Foshan"},
["惠州"] = {container = "廣東", wp = "Huizhou"},
["江門"] = {container = "廣東", wp = "Jiangmen"},
["深圳"] = {container = "廣東", wp = "Shenzhen"},
["中山"] = {container = "廣東", wp = "Zhongshan"},
["汕頭"] = {container = "廣東", wp = "Shantou"},
["潮州"] = {container = "廣東", wp = "Chaozhou"},
["揭陽"] = {container = "廣東", wp = "Jieyang"},
["珠海"] = {container = "廣東", wp = "Zhuhai"},
["湛江"] = {container = "廣東", wp = "Zhanjiang"},
["茂名"] = {container = "廣東", wp = "Maoming"},
["清遠"] = {container = "廣東", wp = "Qingyuan"},
["肇慶"] = {container = "廣東", wp = "Zhaoqing"},
-- Direct-administered municipalities (also in china_provinces; duplicated here for division categorisation)
["上海"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Shanghai"},
["北京"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Beijing"},
["重慶"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Chongqing"},
["天津"] = {placetype = {"direct-administered municipality", "municipality", "city"}, wp = "Tianjin"},
-- Jiangsu
["常熟"] = {container = "江蘇", wp = "Changshu"},
["常州"] = {container = "江蘇", wp = "Changzhou"},
["蘇州"] = {container = "江蘇", wp = "Suzhou"},
["無錫"] = {container = "江蘇", wp = "Wuxi"},
["南京"] = {container = "江蘇", wp = "Nanjing"},
["南通"] = {container = "江蘇", wp = "Nantong"},
["江陰"] = {container = "江蘇", wp = "Jiangyin"},
["張家港"] = {container = "江蘇", wp = "Zhangjiagang"},
["徐州"] = {container = "江蘇", wp = "Xuzhou"},
["揚州"] = {container = "江蘇", wp = "Yangzhou"},
["鹽城"] = {container = "江蘇", wp = "Yancheng"},
["淮安"] = {container = "江蘇", wp = "Huai'an"},
["連雲港"] = {container = "江蘇", wp = "Lianyungang"},
["宿遷"] = {container = "江蘇", wp = "Suqian"},
["鎮江"] = {container = "江蘇", wp = "Zhenjiang"},
["崑山"] = {container = "江蘇", wp = "Kunshan"},
["泰州"] = {container = "江蘇", wp = "Taizhou, Jiangsu"}, -- distinct from 台州 (Zhejiang)
-- Zhejiang
["杭州"] = {container = "浙江", wp = "Hangzhou"},
["紹興"] = {container = "浙江", wp = "Shaoxing"},
["寧波"] = {container = "浙江", wp = "Ningbo"},
["慈溪"] = {container = "浙江", wp = "Cixi"},
["余姚"] = {container = "浙江", wp = "Yuyao"},
["溫州"] = {container = "浙江", wp = "Wenzhou"},
["瑞安"] = {placetype = "county-level city", container = {key = "溫州", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Rui'an"},
["台州"] = {container = "浙江", wp = "Taizhou, Zhejiang"},
["義烏"] = {container = "浙江", wp = "Yiwu"},
["嘉興"] = {container = "浙江", wp = "Jiaxing"},
["金華"] = {container = "浙江", wp = "Jinhua"},
["湖州"] = {container = "浙江", wp = "Huzhou"},
["永康"] = {placetype = "county-level city", container = {key = "金華", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Yongkang, Zhejiang"},
-- Fujian
["廈門"] = {container = "福建", wp = "Xiamen"},
["晉江"] = {container = "福建", wp = "Jinjiang"},
["泉州"] = {container = "福建", wp = "Quanzhou"},
["莆田"] = {container = "福建", wp = "Putian"},
["福州"] = {container = "福建", wp = "Fuzhou"},
-- Shandong
["青島"] = {container = "山東", wp = "Qingdao"},
["臨沂"] = {container = "山東", wp = "Linyi"},
["淄博"] = {container = "山東", wp = "Zibo"},
["濟南"] = {container = "山東", wp = "Jinan"},
["濰坊"] = {container = "山東", wp = "Weifang"},
["煙台"] = {container = "山東", wp = "Yantai"},
["濟寧"] = {container = "山東", wp = "Jining"},
["泰安"] = {container = "山東", wp = "Tai'an"},
["威海"] = {container = "山東", wp = "Weihai"},
["菏澤"] = {container = "山東", wp = "Heze"},
["德州"] = {container = "山東", wp = "Dezhou"},
["日照"] = {container = "山東", wp = "Rizhao"},
["聊城"] = {container = "山東", wp = "Liaocheng"},
["棗莊"] = {container = "山東", wp = "Zaozhuang"},
["滕州"] = {placetype = "county-level city", container = {key = "棗莊", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Tengzhou"},
["東營"] = {container = "山東", wp = "Dongying"},
-- Henan
["鄭州"] = {container = "河南", wp = "Zhengzhou"},
["洛陽"] = {container = "河南", wp = "Luoyang"},
["新鄉"] = {container = "河南", wp = "Xinxiang"},
["信陽"] = {container = "河南", wp = "Xinyang"},
["安陽"] = {container = "河南", wp = "Anyang"},
["開封"] = {container = "河南", wp = "Kaifeng"},
["許昌"] = {container = "河南", wp = "Xuchang"},
["濮陽"] = {container = "河南", wp = "Puyang"},
["商丘"] = {container = "河南", wp = "Shangqiu"},
["南陽"] = {container = "河南", wp = "Nanyang, Henan"},
["焦作"] = {container = "河南", wp = "Jiaozuo"},
["平頂山"] = {container = "河南", wp = "Pingdingshan"},
["周口"] = {container = "河南", wp = "Zhoukou"},
["駐馬店"] = {container = "河南", wp = "Zhumadian"},
-- Hubei
["武漢"] = {container = "湖北", wp = "Wuhan"},
["襄陽"] = {container = "湖北", wp = "Xiangyang"},
["宜昌"] = {container = "湖北", wp = "Yichang"},
["鄂州"] = {container = "湖北", wp = "Ezhou"},
["十堰"] = {container = "湖北", wp = "Shiyan"},
-- Hunan
["長沙"] = {container = "湖南", wp = "Changsha"},
["株洲"] = {container = "湖南", wp = "Zhuzhou"},
["衡陽"] = {container = "湖南", wp = "Hengyang"},
["邵陽"] = {container = "湖南", wp = "Shaoyang"},
["岳陽"] = {container = "湖南", wp = "Yueyang"},
["常德"] = {container = "湖南", wp = "Changde"},
["瀏陽"] = {placetype = "county-level city", container = {key = "長沙", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Liuyang"},
-- Sichuan
["成都"] = {container = "四川", wp = "Chengdu"},
["綿陽"] = {container = "四川", wp = "Mianyang"},
["南充"] = {container = "四川", wp = "Nanchong"},
["達州"] = {container = "四川", wp = "Dazhou"},
["瀘州"] = {container = "四川", wp = "Luzhou"},
["宜賓"] = {container = "四川", wp = "Yibin"},
-- Yunnan
["昆明"] = {container = "雲南", wp = "Kunming"},
["曲靖"] = {container = "雲南", wp = "Qujing"},
-- Guizhou
["貴陽"] = {container = "貴州", wp = "Guiyang"},
["遵義"] = {container = "貴州", wp = "Zunyi"},
["六盤水"] = {container = "貴州", wp = "Liupanshui"},
["畢節"] = {container = "貴州", wp = "Bijie"},
-- Shaanxi
["西安"] = {container = "陝西", wp = "Xi'an"},
["咸陽"] = {container = "陝西", wp = "Xianyang"},
["寶雞"] = {container = "陝西", wp = "Baoji"},
-- Heilongjiang
["哈爾濱"] = {container = "黑龍江", wp = "Harbin"},
["大慶"] = {container = "黑龍江", wp = "Daqing"},
["齊齊哈爾"] = {container = "黑龍江", wp = "Qiqihar"},
-- Liaoning
["瀋陽"] = {container = "遼寧", wp = "Shenyang"},
["撫順"] = {container = "遼寧", wp = "Fushun"},
["大連"] = {container = "遼寧", wp = "Dalian"},
["鞍山"] = {container = "遼寧", wp = "Anshan"},
["錦州"] = {container = "遼寧", wp = "Jinzhou"},
["葫蘆島"] = {container = "遼寧", wp = "Huludao"},
["盤錦"] = {container = "遼寧", wp = "Panjin"},
-- Jilin
["長春"] = {container = "吉林", wp = "Changchun"},
["吉林市"] = {container = "吉林", wp = "Jilin City"}, -- distinct from 吉林 (province)
-- Anhui
["合肥"] = {container = "安徽", wp = "Hefei"},
["蚌埠"] = {container = "安徽", wp = "Bengbu"},
["淮南"] = {container = "安徽", wp = "Huainan"},
["蕪湖"] = {container = "安徽", wp = "Wuhu"},
["淮北"] = {container = "安徽", wp = "Huaibei"},
["滁州"] = {container = "安徽", wp = "Chuzhou"},
["六安"] = {container = "安徽", wp = "Lu'an"},
["阜陽"] = {container = "安徽", wp = "Fuyang, Anhui"},
["宿州"] = {container = "安徽", wp = "Suzhou, Anhui"}, -- distinct from 蘇州 (Jiangsu)
-- Hebei
["石家莊"] = {container = "河北", wp = "Shijiazhuang"},
["邯鄲"] = {container = "河北", wp = "Handan"},
["唐山"] = {container = "河北", wp = "Tangshan"},
["秦皇島"] = {container = "河北", wp = "Qinhuangdao"},
["邢台"] = {container = "河北", wp = "Xingtai"},
["保定"] = {container = "河北", wp = "Baoding"},
["張家口"] = {container = "河北", wp = "Zhangjiakou"},
["衡水"] = {container = "河北", wp = "Hengshui"},
["滄州"] = {container = "河北", wp = "Cangzhou"},
-- Shanxi
["太原"] = {container = "山西", wp = "Taiyuan"},
["大同"] = {container = "山西", wp = "Datong"},
["長治"] = {container = "山西", wp = "Changzhi"},
["臨汾"] = {container = "山西", wp = "Linfen"},
-- Jiangxi
["南昌"] = {container = "江西", wp = "Nanchang"},
["贛州"] = {container = "江西", wp = "Ganzhou"},
["上饒"] = {container = "江西", wp = "Shangrao"},
["九江"] = {container = "江西", wp = "Jiujiang"},
-- Guangxi (autonomous region)
["南寧"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Nanning"},
["柳州"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Liuzhou"},
["桂林"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Guilin"},
["玉林"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Yulin, Guangxi"},
["北海"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Beihai"},
["貴港"] = {container = {key = "廣西", placetype = "autonomous region"}, wp = "Guigang"},
-- Inner Mongolia (autonomous region)
["呼和浩特"] = {container = {key = "內蒙古", placetype = "autonomous region"}, wp = "Hohhot"},
["包頭"] = {container = {key = "內蒙古", placetype = "autonomous region"}, wp = "Baotou"},
["赤峰"] = {container = {key = "內蒙古", placetype = "autonomous region"}, wp = "Chifeng"},
-- Xinjiang (autonomous region)
["烏魯木齊"] = {container = {key = "新疆", placetype = "autonomous region"}, wp = "Ürümqi"},
-- Ningxia (autonomous region)
["銀川"] = {container = {key = "寧夏", placetype = "autonomous region"}, wp = "Yinchuan"},
-- Hainan
["海口"] = {container = "海南", wp = "Haikou"},
-- Qinghai
["西寧"] = {container = "青海", wp = "Xining"},
-- Gansu
["蘭州"] = {container = "甘肅", wp = "Lanzhou"},
-- Chongqing subdivision (district 142 miles from Chongqing proper)
["萬州"] = {placetype = "district", container = {key = "重慶", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "Wanzhou"},
-- County within Suqian prefecture-level city
["沭陽"] = {placetype = "county", container = {key = "宿遷", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "Shuyang County"},
}
export.china_prefecture_level_cities_group = {
placename_to_key = false,
default_placetype = {"prefecture-level city", "city"},
default_divs = {
"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,
}
-----------------------------------------------------------------------------------
-- New York City boroughs --
-----------------------------------------------------------------------------------
export.new_york_boroughs = {
["布朗克斯"] = {the = true, wp = "The Bronx"},
["布魯克林"] = {wp = "Brooklyn"},
["曼哈頓"] = {wp = "Manhattan"},
["皇后區"] = {wp = "Queens"},
["史泰登島"] = {wp = "Staten Island"},
}
export.new_york_boroughs_group = {
placename_to_key = false,
default_container = {key = "紐約市", placetype = "city"},
default_placetype = "borough",
default_is_city = true,
data = export.new_york_boroughs,
}
-----------------------------------------------------------------------------------
-- Romania counties --
-----------------------------------------------------------------------------------
export.romania_counties = {
["阿爾巴縣"] = {wp = "Alba County"},
["阿拉德縣"] = {wp = "Arad County"},
["阿爾傑什縣"] = {wp = "Argeș County"},
["巴考縣"] = {wp = "Bacău County"},
["比霍爾縣"] = {wp = "Bihor County"},
["比斯特里察-訥瑟烏德縣"] = {wp = "Bistrița-Năsăud County"},
["博托沙尼縣"] = {wp = "Botoșani County"},
["布拉索夫縣"] = {wp = "Brașov County"},
["布勒伊拉縣"] = {wp = "Brăila County"},
["布澤烏縣"] = {wp = "Buzău County"},
["卡拉什-塞韋林縣"] = {wp = "Caraș-Severin County"},
["克盧日縣"] = {wp = "Cluj County"},
["康斯坦察縣"] = {wp = "Constanța County"},
["科瓦斯納縣"] = {wp = "Covasna County"},
["克勒拉希縣"] = {wp = "Călărași County"},
["多爾日縣"] = {wp = "Dolj County"},
["登博維察縣"] = {wp = "Dâmbovița County"},
["加拉茨縣"] = {wp = "Galați County"},
["久爾久縣"] = {wp = "Giurgiu County"},
["戈爾日縣"] = {wp = "Gorj County"},
["哈爾吉塔縣"] = {wp = "Harghita County"},
["胡內多阿拉縣"] = {wp = "Hunedoara County"},
["雅洛米察縣"] = {wp = "Ialomița County"},
["雅西縣"] = {wp = "Iași County"},
["伊爾福夫縣"] = {wp = "Ilfov County"},
["馬拉穆列什縣"] = {wp = "Maramureș County"},
["梅赫丁茨縣"] = {wp = "Mehedinți County"},
["穆列什縣"] = {wp = "Mureș County"},
["尼亞姆茨縣"] = {wp = "Neamț County"},
["奧爾特縣"] = {wp = "Olt County"},
["普拉霍瓦縣"] = {wp = "Prahova County"},
["薩圖馬雷縣"] = {wp = "Satu Mare County"},
["錫比烏縣"] = {wp = "Sibiu County"},
["蘇恰瓦縣"] = {wp = "Suceava County"},
["瑟拉日縣"] = {wp = "Sălaj County"},
["特列奧爾曼縣"] = {wp = "Teleorman County"},
["蒂米什縣"] = {wp = "Timiș County"},
["圖爾恰縣"] = {wp = "Tulcea County"},
["瓦斯盧伊縣"] = {wp = "Vaslui County"},
["弗蘭恰縣"] = {wp = "Vrancea County"},
["沃爾恰縣"] = {wp = "Vâlcea County"},
}
export.romania_group = {
placename_to_key = false,
default_container = "羅馬尼亞",
default_placetype = "county",
data = export.romania_counties,
}
-----------------------------------------------------------------------------------
-- Bulgaria provinces --
-----------------------------------------------------------------------------------
export.bulgaria_provinces = {
["布拉戈耶夫格勒省"] = {wp = "Blagoevgrad Province"},
["布爾加斯省"] = {wp = "Burgas Province"},
["多布里奇省"] = {wp = "Dobrich Province"},
["加布羅沃省"] = {wp = "Gabrovo Province"},
["哈斯科沃省"] = {wp = "Haskovo Province"},
["卡爾扎利省"] = {wp = "Kardzhali Province"},
["屈斯滕迪爾省"] = {wp = "Kyustendil Province"},
["洛維奇省"] = {wp = "Lovech Province"},
["蒙塔納省"] = {wp = "Montana Province"},
["帕扎爾吉克省"] = {wp = "Pazardzhik Province"},
["佩爾尼克省"] = {wp = "Pernik Province"},
["普萊文省"] = {wp = "Pleven Province"},
["普羅夫迪夫省"] = {wp = "Plovdiv Province"},
["拉茲格勒省"] = {wp = "Razgrad Province"},
["魯塞省"] = {wp = "Ruse Province"},
["舒門省"] = {wp = "Shumen Province"},
["錫利斯特拉省"] = {wp = "Silistra Province"},
["斯利文省"] = {wp = "Sliven Province"},
["斯莫梁省"] = {wp = "Smolyan Province"},
["索非亞市省"] = {wp = "Sofia City Province"},
["索非亞省"] = {wp = "Sofia Province"},
["斯塔拉扎戈拉省"] = {wp = "Stara Zagora Province"},
["特爾戈維什泰省"] = {wp = "Targovishte Province"},
["瓦爾納省"] = {wp = "Varna Province"},
["大特爾諾沃省"] = {wp = "Veliko Tarnovo Province"},
["維丁省"] = {wp = "Vidin Province"},
["弗拉察省"] = {wp = "Vratsa Province"},
["揚博爾省"] = {wp = "Yambol Province"},
}
export.bulgaria_group = {
placename_to_key = false,
default_container = "保加利亞",
default_placetype = "province",
data = export.bulgaria_provinces,
}
-----------------------------------------------------------------------------------
-- Iran provinces --
-----------------------------------------------------------------------------------
export.iran_provinces = {
["阿爾博爾茲省"] = {wp = "Alborz Province"},
["阿爾達比勒省"] = {wp = "Ardabil Province"},
["布什爾省"] = {wp = "Bushehr Province"},
["恰哈爾馬哈勒-巴赫蒂亞里省"] = {wp = "Chaharmahal and Bakhtiari Province"},
["東阿塞拜疆省"] = {wp = "East Azerbaijan Province"},
["法爾斯省"] = {wp = "Fars Province"},
["帕爾斯省"] = {alias_of = "法爾斯省"},
["吉蘭省"] = {wp = "Gilan Province"},
["戈勒斯坦省"] = {wp = "Golestan Province"},
["哈馬丹省"] = {wp = "Hamadan Province"},
["霍爾木茲甘省"] = {wp = "Hormozgan Province"},
["伊拉姆省"] = {wp = "Ilam Province"},
["伊斯法罕省"] = {wp = "Isfahan Province"},
["克爾曼省"] = {wp = "Kerman Province"},
["克爾曼沙赫省"] = {wp = "Kermanshah Province"},
["胡齊斯坦省"] = {wp = "Khuzestan Province"},
["科吉盧耶-博亞赫邁德省"] = {wp = "Kohgiluyeh and Boyer-Ahmad Province"},
["庫爾德斯坦省"] = {wp = "Kurdistan Province"},
["洛雷斯坦省"] = {wp = "Lorestan Province"},
["馬爾卡齊省"] = {wp = "Markazi Province"},
["馬贊達蘭省"] = {wp = "Mazandaran Province"},
["北呼羅珊省"] = {wp = "North Khorasan Province"},
["加茲溫省"] = {wp = "Qazvin Province"},
["庫姆省"] = {wp = "Qom Province"},
["拉扎維呼羅珊省"] = {wp = "Razavi Khorasan Province"},
["森南省"] = {wp = "Semnan Province"},
["錫斯坦-俾路支斯坦省"] = {wp = "Sistan and Baluchestan Province"},
["南呼羅珊省"] = {wp = "South Khorasan Province"},
["德黑蘭省"] = {wp = "Tehran Province"},
["西阿塞拜疆省"] = {wp = "West Azerbaijan Province"},
["亞茲德省"] = {wp = "Yazd Province"},
["贊詹省"] = {wp = "Zanjan Province"},
}
export.iran_group = {
placename_to_key = false,
default_container = "伊朗",
default_placetype = "province",
data = export.iran_provinces,
}
-----------------------------------------------------------------------------------
-- Laos provinces --
-----------------------------------------------------------------------------------
export.laos_provinces = {
["阿塔坡省"] = {wp = "Attapeu Province"},
["博膠省"] = {wp = "Bokeo Province"},
["波里坎賽省"] = {wp = "Bolikhamxai Province"},
["占巴塞省"] = {wp = "Champasak Province"},
["華潘省"] = {wp = "Houaphanh Province"},
["甘蒙省"] = {wp = "Khammouane Province"},
["南塔省"] = {wp = "Luang Namtha Province"},
["琅勃拉邦省"] = {wp = "Luang Prabang Province"},
["烏多姆賽省"] = {wp = "Oudomxay Province"},
["豐沙里省"] = {wp = "Phongsaly Province"},
["沙拉灣省"] = {wp = "Salavan Province"},
["沙灣拿吉省"] = {wp = "Savannakhet Province"},
["萬象省"] = {wp = "Vientiane Province"},
["萬象直轄市"] = {placetype = "prefecture", wp = "Vientiane Prefecture"},
["賽亞武里省"] = {wp = "Sainyabuli Province"},
["塞公省"] = {wp = "Sekong Province"},
["賽頌本省"] = {wp = "Xaisomboun Province"},
["川壙省"] = {wp = "Xiangkhouang Province"},
}
export.laos_group = {
placename_to_key = false,
default_container = "寮國",
default_placetype = "province",
data = export.laos_provinces,
}
-----------------------------------------------------------------------------------
-- North Korea provinces --
-----------------------------------------------------------------------------------
export.north_korea_provinces = {
["慈江道"] = {wp = "Chagang Province"},
["咸鏡北道"] = {wp = "North Hamgyong Province"},
["咸鏡南道"] = {wp = "South Hamgyong Province"},
["黃海北道"] = {wp = "North Hwanghae Province"},
["黃海南道"] = {wp = "South Hwanghae Province"},
["江原道(北韓)"] = {wp = "Kangwon Province (North Korea)"},
["平安北道"] = {wp = "North Pyongan Province"},
["平安南道"] = {wp = "South Pyongan Province"},
["兩江道"] = {wp = "Ryanggang Province"},
}
export.north_korea_group = {
placename_to_key = false,
default_container = "北韓",
default_placetype = "province",
data = export.north_korea_provinces,
}
-----------------------------------------------------------------------------------
-- South Korea provinces --
-----------------------------------------------------------------------------------
export.south_korea_provinces = {
["忠清北道"] = {wp = "North Chungcheong Province"},
["忠清南道"] = {wp = "South Chungcheong Province"},
["江原道(南韓)"] = {wp = "Gangwon Province, South Korea"},
["京畿道"] = {wp = "Gyeonggi Province"},
["慶尚北道"] = {wp = "North Gyeongsang Province"},
["慶尚南道"] = {wp = "South Gyeongsang Province"},
["全羅北道"] = {wp = "North Jeolla Province"},
["全羅南道"] = {wp = "South Jeolla Province"},
["濟州道"] = {wp = "Jeju Province"},
}
export.south_korea_group = {
placename_to_key = false,
default_container = "南韓",
default_placetype = "province",
data = export.south_korea_provinces,
}
-----------------------------------------------------------------------------------
-- Thailand provinces --
-----------------------------------------------------------------------------------
export.thailand_provinces = {
["阿姆納特坤府"] = {wp = "Amnat Charoen Province"},
["紅統府"] = {wp = "Ang Thong Province"},
["彭侃府"] = {wp = "Bueng Kan Province"},
["武里南府"] = {wp = "Buriram Province"},
["北柳府"] = {wp = "Chachoengsao Province"},
["猜納府"] = {wp = "Chai Nat Province"},
["猜耶奔府"] = {wp = "Chaiyaphum Province"},
["尖竹汶府"] = {wp = "Chanthaburi Province"},
["清邁府"] = {wp = "Chiang Mai Province"},
["清萊府"] = {wp = "Chiang Rai Province"},
["春武里府"] = {wp = "Chonburi Province"},
["春蓬府"] = {wp = "Chumphon Province"},
["加拉信府"] = {wp = "Kalasin Province"},
["甘烹碧府"] = {wp = "Kamphaeng Phet Province"},
["北碧府"] = {wp = "Kanchanaburi Province"},
["孔敬府"] = {wp = "Khon Kaen Province"},
["甲米府"] = {wp = "Krabi Province"},
["南邦府"] = {wp = "Lampang Province"},
["南奔府"] = {wp = "Lamphun Province"},
["黎府"] = {wp = "Loei Province"},
["華富里府"] = {wp = "Lopburi Province"},
["夜豐頌府"] = {wp = "Mae Hong Son Province"},
["瑪哈沙拉堪府"] = {wp = "Maha Sarakham Province"},
["莫達罕府"] = {wp = "Mukdahan Province"},
["那空那育府"] = {wp = "Nakhon Nayok Province"},
["佛統府"] = {wp = "Nakhon Pathom Province"},
["那空帕農府"] = {wp = "Nakhon Phanom Province"},
["呵叻府"] = {wp = "Nakhon Ratchasima Province"},
["那空沙旺府"] = {wp = "Nakhon Sawan Province"},
["洛坤府"] = {wp = "Nakhon Si Thammarat Province"},
["難府"] = {wp = "Nan Province"},
["那拉提瓦府"] = {wp = "Narathiwat Province"},
["農布瓦蘭普府"] = {wp = "Nong Bua Lamphu Province"},
["廊開府"] = {wp = "Nong Khai Province"},
["暖武里府"] = {wp = "Nonthaburi Province"},
["巴吞他尼府"] = {wp = "Pathum Thani Province"},
["北大年府"] = {wp = "Pattani Province"},
["攀牙府"] = {wp = "Phang Nga Province"},
["博他侖府"] = {wp = "Phatthalung Province"},
["帕堯府"] = {wp = "Phayao Province"},
["碧差汶府"] = {wp = "Phetchabun Province"},
["碧武里府"] = {wp = "Phetchaburi Province"},
["披集府"] = {wp = "Phichit Province"},
["彭世洛府"] = {wp = "Phitsanulok Province"},
["大城府"] = {wp = "Phra Nakhon Si Ayutthaya Province"},
["帕府"] = {wp = "Phrae Province"},
["普吉府"] = {wp = "Phuket Province"},
["巴真府"] = {wp = "Prachinburi Province"},
["巴蜀府"] = {wp = "Prachuap Khiri Khan Province"},
["拉廊府"] = {wp = "Ranong Province"},
["叻丕府"] = {wp = "Ratchaburi Province"},
["羅勇府"] = {wp = "Rayong Province"},
["黎逸府"] = {wp = "Roi Et Province"},
["沙繳府"] = {wp = "Sa Kaeo Province"},
["色軍府"] = {wp = "Sakon Nakhon Province"},
["北欖府"] = {wp = "Samut Prakan Province"},
["沙沒沙空府"] = {wp = "Samut Sakhon Province"},
["沙沒頌堪府"] = {wp = "Samut Songkhram Province"},
["沙拉武里府"] = {wp = "Saraburi Province"},
["沙敦府"] = {wp = "Satun Province"},
["信武里府"] = {wp = "Sing Buri Province"},
["四色菊府"] = {wp = "Sisaket Province"},
["宋卡府"] = {wp = "Songkhla Province"},
["素可泰府"] = {wp = "Sukhothai Province"},
["素攀武里府"] = {wp = "Suphan Buri Province"},
["素叻他尼府"] = {wp = "Surat Thani Province"},
["素林府"] = {wp = "Surin Province"},
["達府"] = {wp = "Tak Province"},
["董里府"] = {wp = "Trang Province"},
["達叻府"] = {wp = "Trat Province"},
["烏汶府"] = {wp = "Ubon Ratchathani Province"},
["烏隆府"] = {wp = "Udon Thani Province"},
["烏泰他尼府"] = {wp = "Uthai Thani Province"},
["烏達拉勐府"] = {wp = "Uttaradit Province"},
["惹拉府"] = {wp = "Yala Province"},
["耶梭通府"] = {wp = "Yasothon Province"},
}
export.thailand_group = {
placename_to_key = false,
default_container = "泰國",
default_placetype = "province",
data = export.thailand_provinces,
}
-----------------------------------------------------------------------------------
-- Turkey provinces --
-----------------------------------------------------------------------------------
export.turkey_provinces = {
["阿達納省"] = {wp = "Adana Province"},
["阿德亞曼省"] = {wp = "Adıyaman Province"},
["阿菲永卡拉希薩爾省"] = {wp = "Afyonkarahisar Province"},
["阿里省"] = {wp = "Ağrı Province"},
["阿馬西亞省"] = {wp = "Amasya Province"},
["安卡拉省"] = {wp = "Ankara Province"},
["安塔利亞省"] = {wp = "Antalya Province"},
["阿爾特溫省"] = {wp = "Artvin Province"},
["艾登省"] = {wp = "Aydın Province"},
["巴勒克埃西爾省"] = {wp = "Balıkesir Province"},
["比萊吉克省"] = {wp = "Bilecik Province"},
["賓格爾省"] = {wp = "Bingöl Province"},
["比特利斯省"] = {wp = "Bitlis Province"},
["博盧省"] = {wp = "Bolu Province"},
["布爾杜爾省"] = {wp = "Burdur Province"},
["布爾薩省"] = {wp = "Bursa Province"},
["恰納卡萊省"] = {wp = "Çanakkale Province"},
["昌克勒省"] = {wp = "Çankırı Province"},
["喬魯姆省"] = {wp = "Çorum Province"},
["代尼茲利省"] = {wp = "Denizli Province"},
["迪亞巴克爾省"] = {wp = "Diyarbakır Province"},
["埃迪爾內省"] = {wp = "Edirne Province"},
["埃拉澤省"] = {wp = "Elazığ Province"},
["埃爾津詹省"] = {wp = "Erzincan Province"},
["埃爾祖魯姆省"] = {wp = "Erzurum Province"},
["埃斯基謝希爾省"] = {wp = "Eskişehir Province"},
["加濟安泰普省"] = {wp = "Gaziantep Province"},
["吉雷松省"] = {wp = "Giresun Province"},
["居米什哈內省"] = {wp = "Gümüşhane Province"},
["哈卡里省"] = {wp = "Hakkâri Province"},
["哈塔伊省"] = {wp = "Hatay Province"},
["伊斯帕爾塔省"] = {wp = "Isparta Province"},
["梅爾辛省"] = {wp = "Mersin Province"},
["伊茲密爾省"] = {wp = "İzmir Province"},
["卡爾斯省"] = {wp = "Kars Province"},
["卡斯塔莫努省"] = {wp = "Kastamonu Province"},
["開塞利省"] = {wp = "Kayseri Province"},
["柯克拉雷利省"] = {wp = "Kırklareli Province"},
["克爾謝希爾省"] = {wp = "Kırşehir Province"},
["科賈埃利省"] = {wp = "Kocaeli Province"},
["科尼亞省"] = {wp = "Konya Province"},
["屈塔希亞省"] = {wp = "Kütahya Province"},
["馬拉蒂亞省"] = {wp = "Malatya Province"},
["馬尼薩省"] = {wp = "Manisa Province"},
["卡赫拉曼馬拉什省"] = {wp = "Kahramanmaraş Province"},
["馬爾丁省"] = {wp = "Mardin Province"},
["穆拉省"] = {wp = "Muğla Province"},
["穆什省"] = {wp = "Muş Province"},
["內夫謝希爾省"] = {wp = "Nevşehir Province"},
["尼代省"] = {wp = "Niğde Province"},
["奧爾杜省"] = {wp = "Ordu Province"},
["里澤省"] = {wp = "Rize Province"},
["薩卡里亞省"] = {wp = "Sakarya Province"},
["薩姆松省"] = {wp = "Samsun Province"},
["錫爾特省"] = {wp = "Siirt Province"},
["錫諾普省"] = {wp = "Sinop Province"},
["錫瓦斯省"] = {wp = "Sivas Province"},
["泰基爾達省"] = {wp = "Tekirdağ Province"},
["托卡特省"] = {wp = "Tokat Province"},
["特拉布宗省"] = {wp = "Trabzon Province"},
["通傑利省"] = {wp = "Tunceli Province"},
["尚勒烏爾法省"] = {wp = "Şanlıurfa Province"},
["烏沙克省"] = {wp = "Uşak Province"},
["凡省"] = {wp = "Van Province"},
["約茲加特省"] = {wp = "Yozgat Province"},
["宗古爾達克省"] = {wp = "Zonguldak Province"},
["阿克薩賴省"] = {wp = "Aksaray Province"},
["拜布爾特省"] = {wp = "Bayburt Province"},
["卡拉曼省"] = {wp = "Karaman Province"},
["克勒克卡萊省"] = {wp = "Kırıkkale Province"},
["巴特曼省"] = {wp = "Batman Province"},
["蘇爾納克省"] = {wp = "Şırnak Province"},
["巴爾騰省"] = {wp = "Bartın Province"},
["阿爾達罕省"] = {wp = "Ardahan Province"},
["伊迪爾省"] = {wp = "Iğdır Province"},
["亞洛瓦省"] = {wp = "Yalova Province"},
["卡拉比克省"] = {wp = "Karabük Province"},
["基利斯省"] = {wp = "Kilis Province"},
["奧斯曼尼耶省"] = {wp = "Osmaniye Province"},
["迪茲傑省"] = {wp = "Düzce Province"},
}
export.turkey_group = {
placename_to_key = false,
default_container = "土耳其",
default_placetype = "province",
data = export.turkey_provinces,
}
-----------------------------------------------------------------------------------
-- Vietnam provinces --
-----------------------------------------------------------------------------------
export.vietnam_provinces = {
-- Northeast
["北江省"] = {wp = "Bắc Giang Province"},
["北件省"] = {wp = "Bắc Kạn Province"},
["高平省"] = {wp = "Cao Bằng Province"},
["河江省"] = {wp = "Hà Giang Province"},
["諒山省"] = {wp = "Lạng Sơn Province"},
["富壽省"] = {wp = "Phú Thọ Province"},
["廣寧省"] = {wp = "Quảng Ninh Province"},
["太原省"] = {wp = "Thái Nguyên Province"},
["宣光省"] = {wp = "Tuyên Quang Province"},
-- Northwest
["老街省"] = {wp = "Lào Cai Province"},
["安沛省"] = {wp = "Yên Bái Province"},
["奠邊省"] = {wp = "Điện Biên Province"},
["和平省"] = {wp = "Hoà Bình Province"},
["萊州省"] = {wp = "Lai Châu Province"},
["山羅省"] = {wp = "Sơn La Province"},
-- Red River Delta
["北寧省"] = {wp = "Bắc Ninh Province"},
["河南省"] = {wp = "Hà Nam Province"},
["海陽省"] = {wp = "Hải Dương Province"},
["興安省"] = {wp = "Hưng Yên Province"},
["南定省"] = {wp = "Nam Định Province"},
["寧平省"] = {wp = "Ninh Bình Province"},
["太平省"] = {wp = "Thái Bình Province"},
["永福省"] = {wp = "Vĩnh Phúc Province"},
-- North Central Coast
["河靜省"] = {wp = "Hà Tĩnh Province"},
["乂安省"] = {wp = "Nghệ An Province"},
["廣平省"] = {wp = "Quảng Bình Province"},
["廣治省"] = {wp = "Quảng Trị Province"},
["清化省"] = {wp = "Thanh Hoá Province"},
-- Central Highlands
["得樂省"] = {wp = "Đắk Lắk Province"},
["得農省"] = {wp = "Đăk Nông Province"},
["嘉萊省"] = {wp = "Gia Lai Province"},
["崑嵩省"] = {wp = "Kon Tum Province"},
["林同省"] = {wp = "Lâm Đồng Province"},
-- South Central Coast
["平定省"] = {wp = "Bình Định Province"},
["平順省"] = {wp = "Bình Thuận Province"},
["慶和省"] = {wp = "Khánh Hoà Province"},
["寧順省"] = {wp = "Ninh Thuận Province"},
["富安省"] = {wp = "Phú Yên Province"},
["廣南省"] = {wp = "Quảng Nam Province"},
["廣義省"] = {wp = "Quảng Ngãi Province"},
-- Southeast
["巴地-頭頓省"] = {wp = "Bà Rịa–Vũng Tàu Province"},
["平陽省"] = {wp = "Bình Dương Province"},
["平福省"] = {wp = "Bình Phước Province"},
["同奈省"] = {wp = "Đồng Nai Province"},
["西寧省"] = {wp = "Tây Ninh Province"},
-- Mekong Delta
["安江省"] = {wp = "An Giang Province"},
["薄寮省"] = {wp = "Bạc Liêu Province"},
["檳椥省"] = {wp = "Bến Tre Province"},
["金甌省"] = {wp = "Cà Mau Province"},
["同塔省"] = {wp = "Đồng Tháp Province"},
["後江省"] = {wp = "Hậu Giang Province"},
["堅江省"] = {wp = "Kiên Giang Province"},
["龍安省"] = {wp = "Long An Province"},
["朔莊省"] = {wp = "Sóc Trăng Province"},
["前江省"] = {wp = "Tiền Giang Province"},
["茶榮省"] = {wp = "Trà Vinh Province"},
["永隆省"] = {wp = "Vĩnh Long Province"},
}
export.vietnam_group = {
placename_to_key = false,
default_container = "越南",
default_placetype = "province",
data = export.vietnam_provinces,
}
-----------------------------------------------------------------------------------
-- Nigeria states --
-----------------------------------------------------------------------------------
export.nigeria_states = {
["阿比亞州"] = {wp = "Abia State"},
["阿達馬瓦州"] = {wp = "Adamawa State"},
["阿誇伊博姆州"] = {wp = "Akwa Ibom State"},
["阿南布拉州"] = {wp = "Anambra State"},
["包奇州"] = {wp = "Bauchi State"},
["貝耶薩州"] = {wp = "Bayelsa State"},
["貝努埃州"] = {wp = "Benue State"},
["博爾諾州"] = {wp = "Borno State"},
["跨河州"] = {wp = "Cross River State"},
["三角洲州"] = {wp = "Delta State"},
["埃博尼州"] = {wp = "Ebonyi State"},
["埃多州"] = {wp = "Edo State"},
["埃基蒂州"] = {wp = "Ekiti State"},
["埃努古州"] = {wp = "Enugu State"},
["阿布賈聯邦首都轄區"] = {placetype = {"federal territory", "territory", "state"}, the = true, wp = "Federal Capital Territory, Nigeria"},
["貢貝州"] = {wp = "Gombe State"},
["伊莫州"] = {wp = "Imo State"},
["吉加瓦州"] = {wp = "Jigawa State"},
["卡杜納州"] = {wp = "Kaduna State"},
["卡諾州"] = {wp = "Kano State"},
["卡齊納州"] = {wp = "Katsina State"},
["克比州"] = {wp = "Kebbi State"},
["科吉州"] = {wp = "Kogi State"},
["誇拉州"] = {wp = "Kwara State"},
["拉各斯州"] = {wp = "Lagos State"},
["納薩拉瓦州"] = {wp = "Nasarawa State"},
["尼日爾州"] = {wp = "Niger State"},
["奧貢州"] = {wp = "Ogun State"},
["翁多州"] = {wp = "Ondo State"},
["奧順州"] = {wp = "Osun State"},
["奧約州"] = {wp = "Oyo State"},
["高原州"] = {wp = "Plateau State"},
["河流州"] = {wp = "Rivers State"},
["索科托州"] = {wp = "Sokoto State"},
["塔拉巴州"] = {wp = "Taraba State"},
["約貝州"] = {wp = "Yobe State"},
["贊法拉州"] = {wp = "Zamfara State"},
}
export.nigeria_group = {
placename_to_key = false,
default_container = "奈及利亞",
default_placetype = "state",
data = export.nigeria_states,
}
-----------------------------------------------------------------------------------
-- Selected city groups --
-----------------------------------------------------------------------------------
-- Key world cities frequently used as holonyms (entries covered by dedicated city groups removed)
export.misc_cities = {
-- Americas
["費爾法克斯"] = {container = "弗吉尼亞", placetype = "city", is_city = true, wp = "Fairfax, Virginia"},
["斯克蘭頓"] = {container = "賓夕法尼亞", placetype = "city", is_city = true, wp = "Scranton, Pennsylvania"},
["里約熱內盧市"] = {container = "巴西", placetype = "city", is_city = true, wp = "Rio de Janeiro"},
["布宜諾斯艾利斯"] = {container = "阿根廷", placetype = "city", is_city = true, wp = "Buenos Aires"},
["聖地牙哥"] = {container = "智利", placetype = "city", is_city = true, wp = "Santiago"},
["波哥大"] = {container = "哥倫比亞", placetype = "city", is_city = true, wp = "Bogotá"},
["利馬"] = {container = "秘魯", placetype = "city", is_city = true, wp = "Lima"},
-- Europe
["阿姆斯特丹"] = {container = "荷蘭", placetype = "city", is_city = true, wp = "Amsterdam"},
["布魯塞爾"] = {container = "比利時", placetype = "city", is_city = true, wp = "Brussels"},
["維也納"] = {container = "奧地利", placetype = "city", is_city = true, wp = "Vienna"},
["伊斯坦布爾"] = {container = "土耳其", placetype = "city", is_city = true, wp = "Istanbul"},
["基輔"] = {container = "烏克蘭", placetype = "city", is_city = true, wp = "Kyiv"},
["華沙"] = {container = "波蘭", placetype = "city", is_city = true, wp = "Warsaw"},
["布拉格"] = {container = "捷克", placetype = "city", is_city = true, wp = "Prague"},
["布達佩斯"] = {container = "匈牙利", placetype = "city", is_city = true, wp = "Budapest"},
["斯德哥爾摩"] = {container = "瑞典", placetype = "city", is_city = true, wp = "Stockholm"},
["赫爾辛基"] = {container = "芬蘭", placetype = "city", is_city = true, wp = "Helsinki"},
["奧斯陸"] = {container = "挪威", placetype = "city", is_city = true, wp = "Oslo"},
["哥本哈根"] = {container = "丹麥", placetype = "city", is_city = true, wp = "Copenhagen"},
["里斯本"] = {container = "葡萄牙", placetype = "city", is_city = true, wp = "Lisbon"},
["雅典"] = {container = "希臘", placetype = "city", is_city = true, wp = "Athens"},
["蘇黎世"] = {container = "瑞士", placetype = "city", is_city = true, wp = "Zurich"},
["日內瓦"] = {container = "瑞士", placetype = "city", is_city = true, wp = "Geneva"},
["第比利斯"] = {container = "格魯吉亞", placetype = "city", is_city = true, wp = "Tbilisi"},
["貝爾格勒"] = {container = "塞爾維亞", placetype = "city", is_city = true, wp = "Belgrade"},
["薩格勒布"] = {container = "克羅埃西亞", placetype = "city", is_city = true, wp = "Zagreb"},
["都柏林"] = {container = "愛爾蘭", placetype = "city", is_city = true, wp = "Dublin"},
-- Asia
["北京市"] = {container = "北京", placetype = "city", is_city = true, wp = "Beijing"},
["上海市"] = {container = "上海", placetype = "city", is_city = true, wp = "Shanghai"},
["德里市"] = {container = "德里", placetype = "city", is_city = true, wp = "Delhi"},
["曼谷"] = {container = "泰國", placetype = "city", is_city = true, wp = "Bangkok"},
["吉隆坡"] = {container = "馬來西亞", placetype = "city", is_city = true, wp = "Kuala Lumpur"},
["開羅"] = {container = "埃及", placetype = "city", is_city = true, wp = "Cairo"},
["德黑蘭"] = {container = "伊朗", placetype = "city", is_city = true, wp = "Tehran"},
["安卡拉"] = {container = "土耳其", placetype = "city", is_city = true, wp = "Ankara"},
-- Oceania
["奧克蘭"] = {container = "紐西蘭", placetype = "city", is_city = true, wp = "Auckland"},
-- Africa
["開普敦"] = {container = "南非", placetype = "city", is_city = true, wp = "Cape Town"},
["約翰尼斯堡"] = {container = "南非", placetype = "city", is_city = true, wp = "Johannesburg"},
["奈洛比"] = {container = "肯亞", placetype = "city", is_city = true, wp = "Nairobi"},
}
export.misc_cities_group = {
placename_to_key = false,
default_placetype = "city",
default_is_city = true,
data = export.misc_cities,
}
-----------------------------------------------------------------------------------
-- Brazil states (for testcase coverage) --
-----------------------------------------------------------------------------------
export.brazil_states = {
["里約熱內盧州"] = {wp = "Rio de Janeiro (state)"},
["里約熱內盧"] = {alias_of = "里約熱內盧州"},
["聖保羅州"] = {wp = "São Paulo (state)"},
["米納斯吉拉斯"] = {wp = "Minas Gerais"},
["巴伊亞"] = {wp = "Bahia"},
["亞馬遜州"] = {wp = "Amazonas (Brazilian state)"},
["帕拉州"] = {wp = "Pará"},
["伯南布哥州"] = {wp = "Pernambuco"},
["南里奧格蘭德州"] = {wp = "Rio Grande do Sul"},
["巴西聯邦區"] = {wp = "Federal District (Brazil)"},
["塞阿拉州"] = {wp = "Ceará"},
["巴拉那州"] = {wp = "Paraná (state)"},
["戈亞斯州"] = {wp = "Goiás"},
["聖埃斯皮里圖州"] = {wp = "Espírito Santo"},
["馬拉尼昂州"] = {wp = "Maranhão"},
["北里奧格蘭德州"] = {wp = "Rio Grande do Norte"},
["聖卡塔琳娜州"] = {wp = "Santa Catarina (state)"},
["阿拉戈亞斯州"] = {wp = "Alagoas"},
["帕拉伊巴州"] = {wp = "Paraíba"},
["皮奧伊州"] = {wp = "Piauí"},
["阿克里州"] = {wp = "Acre (state)"},
["阿馬帕州"] = {wp = "Amapá"},
["馬托格羅索州"] = {wp = "Mato Grosso"},
["南馬托格羅索州"] = {wp = "Mato Grosso do Sul"},
["朗多尼亞州"] = {wp = "Rondônia"},
["羅賴馬州"] = {wp = "Roraima"},
["塞爾希培州"] = {wp = "Sergipe"},
["托坎廷斯州"] = {wp = "Tocantins"},
}
export.brazil_group = {
placename_to_key = false,
default_container = "巴西",
default_placetype = "state",
data = export.brazil_states,
}
-----------------------------------------------------------------------------------
-- France regions --
-----------------------------------------------------------------------------------
export.france_administrative_regions = {
["奧弗涅-隆河-阿爾卑斯大區"] = {wp = "Auvergne-Rhône-Alpes"},
["勃艮第-弗朗什-孔泰大區"] = {wp = "Bourgogne-Franche-Comté"},
["布列塔尼大區"] = {wp = "Brittany (administrative region)"},
["中央-羅亞爾河谷大區"] = {wp = "Centre-Val de Loire"},
["科西嘉大區"] = {wp = "Corsica"},
["大東部大區"] = {wp = "Grand Est"},
["上法蘭西大區"] = {wp = "Hauts-de-France"},
["法蘭西島大區"] = {wp = "Île-de-France"},
["諾曼底大區"] = {wp = "Normandy"},
["新阿基坦大區"] = {wp = "Nouvelle-Aquitaine"},
["奧克西塔尼大區"] = {wp = "Occitanie"},
["盧瓦爾河地區大區"] = {wp = "Pays de la Loire"},
["普羅旺斯-阿爾卑斯-蔚藍海岸大區"] = {wp = "Provence-Alpes-Côte d'Azur"},
-- Old region names (pre-2016) as aliases
["北部-加萊海峽大區"] = {wp = "Nord-Pas-de-Calais"},
["加來海峽大區"] = {alias_of = "北部-加萊海峽大區"},
}
export.france_group = {
placename_to_key = false,
default_container = "法國",
default_placetype = "region",
data = export.france_administrative_regions,
}
-- France departments (abbreviated list)
export.france_departments = {
["北部省"] = {wp = "Nord (department)", container = "上法蘭西大區"},
["加來海峽省"] = {wp = "Pas-de-Calais", container = "上法蘭西大區"},
["巴黎市"] = {wp = "Paris", container = "法蘭西島大區"},
["上塞納省"] = {wp = "Hauts-de-Seine", container = "法蘭西島大區"},
}
export.france_departments_group = {
placename_to_key = false,
default_container = "法國",
default_placetype = "department",
data = export.france_departments,
}
-----------------------------------------------------------------------------------
-- Austria states --
-----------------------------------------------------------------------------------
export.austria_states = {
["維也納州"] = {wp = "Vienna (state)"},
["下奧地利州"] = {wp = "Lower Austria"},
["上奧地利州"] = {wp = "Upper Austria"},
["施泰爾馬克州"] = {wp = "Styria"},
["蒂羅爾州"] = {wp = "Tyrol (state)"},
["克恩頓州"] = {wp = "Carinthia"},
["薩爾茨堡州"] = {wp = "Salzburg (state)"},
["福拉爾貝格州"] = {wp = "Vorarlberg"},
["布根蘭州"] = {wp = "Burgenland"},
}
export.austria_group = {
placename_to_key = false,
default_container = "奧地利",
default_placetype = "state",
data = export.austria_states,
}
-----------------------------------------------------------------------------------
-- Bangladesh divisions --
-----------------------------------------------------------------------------------
export.bangladesh_divisions = {
["巴里薩爾專區"] = {wp = "Barisal Division"},
["吉大港專區"] = {wp = "Chittagong Division"},
["達卡專區"] = {wp = "Dhaka Division"},
["庫爾納專區"] = {wp = "Khulna Division"},
["邁門辛專區"] = {wp = "Mymensingh Division"},
["拉吉沙希專區"] = {wp = "Rajshahi Division"},
["朗普爾專區"] = {wp = "Rangpur Division"},
["錫爾赫特專區"] = {wp = "Sylhet Division"},
}
export.bangladesh_group = {
placename_to_key = false,
default_container = "孟加拉國",
default_placetype = "division",
data = export.bangladesh_divisions,
}
-----------------------------------------------------------------------------------
-- Egypt governorates --
-----------------------------------------------------------------------------------
export.egypt_governorates = {
["開羅省"] = {wp = "Cairo Governorate"},
["吉薩省"] = {wp = "Giza Governorate"},
["夏爾基亞省"] = {wp = "Sharqia Governorate"},
["達卡利亞省"] = {wp = "Dakahlia Governorate"},
["貝海拉省"] = {wp = "Beheira Governorate"},
["明亞省"] = {wp = "Minya Governorate"},
["蓋柳比亞省"] = {wp = "Qalyubia Governorate"},
["索哈傑省"] = {wp = "Sohag Governorate"},
["亞歷山大省"] = {wp = "Alexandria Governorate"},
["加爾比亞省"] = {wp = "Gharbia Governorate"},
["艾斯尤特省"] = {wp = "Asyut Governorate"},
["莫諾菲亞省"] = {wp = "Monufia Governorate"},
["法尤姆省"] = {wp = "Faiyum Governorate"},
["卡夫爾謝赫省"] = {wp = "Kafr El Sheikh Governorate"},
["基納省"] = {wp = "Qena Governorate"},
["本尼蘇威夫省"] = {wp = "Beni Suef Governorate"},
["達米埃塔省"] = {wp = "Damietta Governorate"},
["阿斯旺省"] = {wp = "Aswan Governorate"},
["伊斯梅利亞省"] = {wp = "Ismailia Governorate"},
["盧克索省"] = {wp = "Luxor Governorate"},
["蘇伊士省"] = {wp = "Suez Governorate"},
["塞德港省"] = {wp = "Port Said Governorate"},
["馬特魯省"] = {wp = "Matrouh Governorate"},
["北西奈省"] = {wp = "North Sinai Governorate"},
["紅海省"] = {wp = "Red Sea Governorate"},
["新河谷省"] = {wp = "New Valley Governorate"},
["南西奈省"] = {wp = "South Sinai Governorate"},
}
export.egypt_group = {
placename_to_key = false,
default_container = "埃及",
default_placetype = "governorate",
data = export.egypt_governorates,
}
-----------------------------------------------------------------------------------
-- Finland regions --
-----------------------------------------------------------------------------------
export.finland_regions = {
["拉普蘭省"] = {wp = "Lapland (Finland)"},
["北奧斯特博滕省"] = {wp = "North Ostrobothnia"},
["卡亞尼省"] = {wp = "Kainuu"},
["北卡累利亞省"] = {wp = "North Karelia"},
["北薩沃省"] = {wp = "Northern Savonia"},
["南薩沃省"] = {wp = "Southern Savonia"},
["南卡累利亞省"] = {wp = "South Karelia"},
["中芬蘭省"] = {wp = "Central Finland"},
["南奧斯特博滕省"] = {wp = "South Ostrobothnia"},
["奧斯特博滕省"] = {wp = "Ostrobothnia (region)"},
["中奧斯特博滕省"] = {wp = "Central Ostrobothnia"},
["皮爾卡馬省"] = {wp = "Pirkanmaa"},
["薩塔昆塔省"] = {wp = "Satakunta"},
["派亞特哈米省"] = {wp = "Päijät-Häme"},
["坎塔哈米省"] = {wp = "Tavastia Proper"},
["屈米河谷省"] = {wp = "Kymenlaakso"},
["烏西馬省"] = {wp = "Uusimaa"},
["西南芬蘭省"] = {wp = "Southwest Finland"},
["奧蘭群島"] = {wp = "Åland", placetype = {"autonomous region", "region"}},
}
export.finland_group = {
placename_to_key = false,
default_container = "芬蘭",
default_placetype = "region",
data = export.finland_regions,
}
-----------------------------------------------------------------------------------
-- Greece regions --
-----------------------------------------------------------------------------------
export.greece_regions = {
["阿提卡大區"] = {wp = "Attica (region)"},
["中希臘大區"] = {wp = "Central Greece (administrative region)"},
["中馬其頓大區"] = {wp = "Central Macedonia"},
["克里特大區"] = {wp = "Crete"},
["東馬其頓和色雷斯大區"] = {wp = "Eastern Macedonia and Thrace"},
["伊庇魯斯大區"] = {wp = "Epirus (region)"},
["愛奧尼亞群島大區"] = {wp = "Ionian Islands (region)"},
["北愛琴大區"] = {wp = "North Aegean"},
["伯羅奔尼撒大區"] = {wp = "Peloponnese (region)"},
["南愛琴大區"] = {wp = "South Aegean"},
["塞薩利大區"] = {wp = "Thessaly"},
["西希臘大區"] = {wp = "Western Greece"},
["西馬其頓大區"] = {wp = "Western Macedonia"},
["阿托斯山"] = {wp = "Monastic community of Mount Athos", placetype = {"autonomous region", "region"}},
}
export.greece_group = {
placename_to_key = false,
default_container = "希臘",
default_placetype = "region",
data = export.greece_regions,
}
-----------------------------------------------------------------------------------
-- Indonesia provinces --
-----------------------------------------------------------------------------------
export.indonesia_provinces = {
["亞齊省"] = {wp = "Aceh"},
["峇里省"] = {wp = "Bali"},
["邦加勿里洞省"] = {wp = "Bangka Belitung Islands"},
["萬丹省"] = {wp = "Banten"},
["明古魯省"] = {wp = "Bengkulu"},
["中爪哇省"] = {wp = "Central Java"},
["中加里曼丹省"] = {wp = "Central Kalimantan"},
["中巴布亞省"] = {wp = "Central Papua"},
["中蘇拉威西省"] = {wp = "Central Sulawesi"},
["東爪哇省"] = {wp = "East Java"},
["東加里曼丹省"] = {wp = "East Kalimantan"},
["東努沙登加拉省"] = {wp = "East Nusa Tenggara"},
["哥倫打洛省"] = {wp = "Gorontalo"},
["巴布亞高地省"] = {wp = "Highland Papua"},
["雅加達首都特區"] = {wp = "Jakarta"},
["占碑省"] = {wp = "Jambi"},
["楠榜省"] = {wp = "Lampung"},
["馬魯古省"] = {wp = "Maluku"},
["北加里曼丹省"] = {wp = "North Kalimantan"},
["北馬魯古省"] = {wp = "North Maluku"},
["北蘇拉威西省"] = {wp = "North Sulawesi"},
["北巴布亞省"] = {wp = "North Papua"},
["北蘇門答臘省"] = {wp = "North Sumatra"},
["巴布亞省"] = {wp = "Papua (province)"},
["廖內省"] = {wp = "Riau"},
["廖內群島省"] = {wp = "Riau Islands"},
["東南蘇拉威西省"] = {wp = "Southeast Sulawesi"},
["南加里曼丹省"] = {wp = "South Kalimantan"},
["南巴布亞省"] = {wp = "South Papua"},
["南蘇拉威西省"] = {wp = "South Sulawesi"},
["南蘇門答臘省"] = {wp = "South Sumatra"},
["西南巴布亞省"] = {wp = "Southwest Papua"},
["西爪哇省"] = {wp = "West Java"},
["西加里曼丹省"] = {wp = "West Kalimantan"},
["西努沙登加拉省"] = {wp = "West Nusa Tenggara"},
["西巴布亞省"] = {wp = "West Papua (province)"},
["西蘇拉威西省"] = {wp = "West Sulawesi"},
["西蘇門答臘省"] = {wp = "West Sumatra"},
["日惹特區"] = {wp = "Special Region of Yogyakarta"},
}
export.indonesia_group = {
placename_to_key = false,
default_container = "印度尼西亞",
default_placetype = "province",
data = export.indonesia_provinces,
}
-----------------------------------------------------------------------------------
-- Lebanon governorates --
-----------------------------------------------------------------------------------
export.lebanon_governorates = {
["阿卡爾省"] = {wp = "Akkar Governorate"},
["巴勒貝克-赫爾梅勒省"] = {wp = "Baalbek-Hermel Governorate"},
["貝魯特省"] = {wp = "Beirut Governorate"},
["貝卡省"] = {wp = "Beqaa Governorate"},
["克塞旺-裘拜勒省"] = {wp = "Keserwan-Jbeil Governorate"},
["黎巴嫩山省"] = {wp = "Mount Lebanon Governorate"},
["納巴蒂耶省"] = {wp = "Nabatieh Governorate"},
["北部省(黎巴嫩)"] = {wp = "North Governorate (Lebanon)", no_auto_augment_container = true},
["南部省(黎巴嫩)"] = {wp = "South Governorate (Lebanon)", no_auto_augment_container = true},
}
export.lebanon_group = {
placename_to_key = false,
default_container = "黎巴嫩",
default_placetype = "governorate",
data = export.lebanon_governorates,
}
-----------------------------------------------------------------------------------
-- Malaysia states --
-----------------------------------------------------------------------------------
export.malaysia_states = {
["柔佛州"] = {wp = "Johor"},
["吉打州"] = {wp = "Kedah"},
["吉蘭丹州"] = {wp = "Kelantan"},
["馬六甲州"] = {wp = "Malacca"},
["森美蘭州"] = {wp = "Negeri Sembilan"},
["彭亨州"] = {wp = "Pahang"},
["檳城州"] = {wp = "Penang"},
["霹靂州"] = {wp = "Perak"},
["玻璃市州"] = {wp = "Perlis"},
["沙巴州"] = {wp = "Sabah"},
["砂拉越州"] = {wp = "Sarawak"},
["雪蘭莪州"] = {wp = "Selangor"},
["登嘉樓州"] = {wp = "Terengganu"},
}
export.malaysia_group = {
placename_to_key = false,
default_container = "馬來西亞",
default_placetype = "state",
data = export.malaysia_states,
}
-----------------------------------------------------------------------------------
-- Malta regions --
-----------------------------------------------------------------------------------
export.malta_regions = {
["東部區(馬爾他)"] = {wp = "Eastern Region, Malta", no_auto_augment_container = true},
["戈佐區"] = {wp = "Gozo Region"},
["北部區(馬爾他)"] = {wp = "Northern Region, Malta", no_auto_augment_container = true},
["港口區"] = {wp = "Port Region, Malta"},
["南部區(馬爾他)"] = {wp = "Southern Region, Malta", no_auto_augment_container = true},
["西部區(馬爾他)"] = {wp = "Western Region, Malta", no_auto_augment_container = true},
}
export.malta_group = {
placename_to_key = false,
default_container = "馬爾他",
default_placetype = "region",
data = export.malta_regions,
}
-----------------------------------------------------------------------------------
-- Mexico states --
-----------------------------------------------------------------------------------
export.mexico_states = {
["阿瓜斯卡連特斯州"] = {wp = "Aguascalientes"},
["下加利福尼亞州"] = {wp = "Baja California"},
["南下加利福尼亞州"] = {wp = "Baja California Sur"},
["坎佩切州"] = {wp = "Campeche"},
["恰帕斯州"] = {wp = "Chiapas"},
["奇瓦瓦州"] = {wp = "Chihuahua (state)"},
["科阿韋拉州"] = {wp = "Coahuila"},
["科利馬州"] = {wp = "Colima"},
["杜蘭戈州"] = {wp = "Durango"},
["瓜納華托州"] = {wp = "Guanajuato"},
["格雷羅州"] = {wp = "Guerrero"},
["伊達爾戈州"] = {wp = "Hidalgo (state)"},
["哈利斯科州"] = {wp = "Jalisco"},
["墨西哥州"] = {wp = "State of Mexico"},
["米卻肯州"] = {wp = "Michoacán"},
["莫雷洛斯州"] = {wp = "Morelos"},
["納亞里特州"] = {wp = "Nayarit"},
["新萊昂州"] = {wp = "Nuevo León"},
["瓦哈卡州"] = {wp = "Oaxaca"},
["普埃布拉州"] = {wp = "Puebla"},
["克雷塔羅州"] = {wp = "Querétaro"},
["金塔納羅奧州"] = {wp = "Quintana Roo"},
["聖路易斯波托西州"] = {wp = "San Luis Potosí"},
["錫那羅亞州"] = {wp = "Sinaloa"},
["索諾拉州"] = {wp = "Sonora"},
["塔巴斯科州"] = {wp = "Tabasco (state)"},
["塔毛利帕斯州"] = {wp = "Tamaulipas"},
["特拉斯卡拉州"] = {wp = "Tlaxcala"},
["韋拉克魯斯州"] = {wp = "Veracruz"},
["尤卡坦州"] = {wp = "Yucatán"},
["薩卡特卡斯州"] = {wp = "Zacatecas"},
}
export.mexico_group = {
placename_to_key = false,
default_container = "墨西哥",
default_placetype = "state",
data = export.mexico_states,
}
-----------------------------------------------------------------------------------
-- Moldova districts and ATUs --
-----------------------------------------------------------------------------------
export.moldova_districts = {
["阿內尼諾伊區"] = {wp = "Anenii Noi District"},
["巴薩拉比亞斯卡區"] = {wp = "Basarabeasca District"},
["布里切尼區"] = {wp = "Briceni District"},
["卡胡爾區"] = {wp = "Cahul District"},
["坎特米爾區"] = {wp = "Cantemir District"},
["克勒拉希區"] = {wp = "Călărași District"},
["考沙尼區"] = {wp = "Căușeni District"},
["奇米什利亞區"] = {wp = "Cimișlia District"},
["克里烏列尼區"] = {wp = "Criuleni District"},
["東杜沙尼區"] = {wp = "Dondușeni District"},
["德羅基亞區"] = {wp = "Drochia District"},
["杜巴薩里區"] = {wp = "Dubăsari District"},
["埃迪涅茨區"] = {wp = "Edineț District"},
["法勒什蒂區"] = {wp = "Fălești District"},
["弗洛雷什蒂區"] = {wp = "Florești District"},
["格洛德尼區"] = {wp = "Glodeni District"},
["欣切什蒂區"] = {wp = "Hîncești District"},
["亞洛韋尼區"] = {wp = "Ialoveni District"},
["萊奧瓦區"] = {wp = "Leova District"},
["尼斯波雷尼區"] = {wp = "Nisporeni District"},
["奧克尼察區"] = {wp = "Ocnița District"},
["奧爾海伊區"] = {wp = "Orhei District"},
["雷齊納區"] = {wp = "Rezina District"},
["雷什卡尼區"] = {wp = "Rîșcani District"},
["辛格雷伊區"] = {wp = "Sîngerei District"},
["索羅卡區"] = {wp = "Soroca District"},
["斯特拉沙尼區"] = {wp = "Strășeni District"},
["紹爾達涅什蒂區"] = {wp = "Șoldănești District"},
["斯蒂凡沃達區"] = {wp = "Ștefan Vodă District"},
["塔拉克利亞區"] = {wp = "Taraclia District"},
["泰萊涅什蒂區"] = {wp = "Telenești District"},
["翁格尼區"] = {wp = "Ungheni District"},
["基希訥烏市"] = {wp = "Chișinău", placetype = "municipality"},
["巴爾茨市"] = {wp = "Bălți", placetype = "municipality"},
["加告茲自治領土"] = {wp = "Gagauzia", placetype = {"autonomous territorial unit", "autonomous region", "region"}},
["本德爾市"] = {wp = "Bender, Moldova", placetype = "municipality"},
["德涅斯特河沿岸"] = {wp = "Transnistria", placetype = {"autonomous territorial unit", "autonomous region", "region"}},
}
export.moldova_group = {
placename_to_key = false,
default_container = "摩爾多瓦",
default_placetype = {"district", "raion"},
data = export.moldova_districts,
}
-----------------------------------------------------------------------------------
-- Morocco regions --
-----------------------------------------------------------------------------------
export.morocco_regions = {
["丹吉爾-得土安-霍賽馬大區"] = {wp = "Tangier-Tetouan-Al Hoceima"},
["東方大區(摩洛哥)"] = {wp = "Oriental, Morocco"},
["非斯-梅克內斯大區"] = {wp = "Fez-Meknes"},
["拉巴特-薩累-肯尼特拉大區"] = {wp = "Rabat-Salé-Kénitra"},
["貝尼梅拉勒-赫尼夫拉大區"] = {wp = "Béni Mellal-Khénifra"},
["卡薩布蘭卡-塞塔特大區"] = {wp = "Casablanca-Settat"},
["馬拉喀什-薩菲大區"] = {wp = "Marrakesh-Safi"},
["德拉阿-塔菲拉勒特大區"] = {wp = "Drâa-Tafilalet"},
["蘇斯-馬薩大區"] = {wp = "Souss-Massa"},
["蓋勒明-烏德農大區"] = {wp = "Guelmim-Oued Noun"},
["拉阿永-薩基亞-哈姆拉大區"] = {wp = "Laâyoune-Sakia El Hamra"},
["達赫拉-奧以德達赫卜大區"] = {wp = "Dakhla-Oued Ed-Dahab"},
}
export.morocco_group = {
placename_to_key = false,
default_container = "摩洛哥",
default_placetype = "region",
data = export.morocco_regions,
}
-----------------------------------------------------------------------------------
-- Netherlands provinces --
-----------------------------------------------------------------------------------
export.netherlands_provinces = {
["德倫特省"] = {wp = "Drenthe"},
["弗萊福蘭省"] = {wp = "Flevoland"},
["弗里斯蘭省"] = {wp = "Friesland"},
["格爾德蘭省"] = {wp = "Gelderland"},
["格羅寧根省"] = {wp = "Groningen (province)"},
["林堡省(荷蘭)"] = {wp = "Limburg (Netherlands)"},
["北布拉班特省"] = {wp = "North Brabant"},
["北荷蘭省"] = {wp = "North Holland"},
["上艾瑟爾省"] = {wp = "Overijssel"},
["南荷蘭省"] = {wp = "South Holland"},
["烏特勒支省"] = {wp = "Utrecht (province)"},
["澤蘭省"] = {wp = "Zeeland"},
}
export.netherlands_group = {
placename_to_key = false,
default_container = "荷蘭",
default_placetype = "province",
data = export.netherlands_provinces,
}
-----------------------------------------------------------------------------------
-- New Zealand regions --
-----------------------------------------------------------------------------------
export.new_zealand_regions = {
["北地大區"] = {wp = "Northland Region"},
["奧克蘭大區"] = {wp = "Auckland Region"},
["懷卡托大區"] = {wp = "Waikato Region"},
["豐盛灣大區"] = {wp = "Bay of Plenty Region"},
["吉斯伯恩大區"] = {wp = "Gisborne District", placetype = {"region", "district"}},
["霍克斯灣大區"] = {wp = "Hawke's Bay Region"},
["塔拉納基大區"] = {wp = "Taranaki Region"},
["馬納瓦圖-旺阿努伊大區"] = {wp = "Manawatū-Whanganui Region"},
["惠靈頓大區"] = {wp = "Wellington Region"},
["塔斯曼大區"] = {wp = "Tasman District", placetype = {"region", "district"}},
["納爾遜大區"] = {wp = "Nelson, New Zealand", placetype = {"region", "city"}, is_city = true},
["馬爾堡大區"] = {wp = "Marlborough District", placetype = {"region", "district"}},
["西海岸大區"] = {wp = "West Coast Region"},
["坎特伯雷大區"] = {wp = "Canterbury Region"},
["奧塔哥大區"] = {wp = "Otago Region"},
["南地大區"] = {wp = "Southland Region"},
}
export.new_zealand_group = {
placename_to_key = false,
default_container = "紐西蘭",
default_placetype = "region",
data = export.new_zealand_regions,
}
-----------------------------------------------------------------------------------
-- Norway counties --
-----------------------------------------------------------------------------------
export.norwegian_counties = {
["奧斯陸縣"] = {wp = "Oslo"},
["羅加蘭縣"] = {wp = "Rogaland"},
["莫雷-羅姆斯達爾縣"] = {wp = "Møre og Romsdal"},
["諾爾蘭縣"] = {wp = "Nordland"},
["東福爾縣"] = {wp = "Østfold"},
["阿克斯胡斯縣"] = {wp = "Akershus"},
["布斯克呂縣"] = {wp = "Buskerud"},
["因蘭德縣"] = {wp = "Innlandet"},
["西福爾縣"] = {wp = "Vestfold"},
["泰勒馬克縣"] = {wp = "Telemark"},
["阿格德爾縣"] = {wp = "Agder"},
["西地縣"] = {wp = "Vestland"},
["特倫德拉格縣"] = {wp = "Trøndelag"},
["特羅姆斯縣"] = {wp = "Troms"},
["芬馬克縣"] = {wp = "Finnmark"},
}
export.norway_group = {
placename_to_key = false,
default_container = "挪威",
default_placetype = "county",
data = export.norwegian_counties,
}
-----------------------------------------------------------------------------------
-- Pakistan provinces and territories --
-----------------------------------------------------------------------------------
export.pakistan_provinces_and_territories = {
["自由克什米爾"] = {wp = "Azad Kashmir", placetype = {"administrative territory", "autonomous territory", "territory"}},
["俾路支省"] = {wp = "Balochistan, Pakistan"},
["吉爾吉特-巴爾蒂斯坦"] = {wp = "Gilgit-Baltistan", placetype = {"administrative territory", "territory"}},
["伊斯蘭馬巴德首都直轄區"] = {wp = "Islamabad Capital Territory", placetype = {"federal territory", "administrative territory", "territory"}},
["開伯爾-普赫圖赫瓦省"] = {wp = "Khyber Pakhtunkhwa"},
["旁遮普省(巴基斯坦)"] = {wp = "Punjab, Pakistan"},
["信德省"] = {wp = "Sindh"},
}
export.pakistan_group = {
placename_to_key = false,
default_container = "巴基斯坦",
default_placetype = "province",
data = export.pakistan_provinces_and_territories,
}
-----------------------------------------------------------------------------------
-- Philippines provinces --
-----------------------------------------------------------------------------------
export.philippines_provinces = {
["阿布拉省"] = {wp = "Abra (province)"},
["北阿古桑省"] = {wp = "Agusan del Norte"},
["南阿古桑省"] = {wp = "Agusan del Sur"},
["阿克蘭省"] = {wp = "Aklan"},
["阿爾拜省"] = {wp = "Albay"},
["安蒂克省"] = {wp = "Antique (province)"},
["阿帕亞沃省"] = {wp = "Apayao"},
["奧羅拉省"] = {wp = "Aurora (province)"},
["巴西蘭省"] = {wp = "Basilan"},
["巴丹省"] = {wp = "Bataan"},
["巴達內斯省"] = {wp = "Batanes"},
["八打雁省"] = {wp = "Batangas"},
["本格特省"] = {wp = "Benguet"},
["比利蘭省"] = {wp = "Biliran"},
["保和省"] = {wp = "Bohol"},
["布基農省"] = {wp = "Bukidnon"},
["布拉干省"] = {wp = "Bulacan"},
["卡加延省"] = {wp = "Cagayan"},
["北甲馬仁省"] = {wp = "Camarines Norte"},
["南甲馬仁省"] = {wp = "Camarines Sur"},
["卡米金省"] = {wp = "Camiguin"},
["卡皮斯省"] = {wp = "Capiz"},
["卡坦端內斯省"] = {wp = "Catanduanes"},
["甲米地省"] = {wp = "Cavite"},
["宿霧省"] = {wp = "Cebu"},
["哥打巴托省"] = {wp = "Cotabato"},
["達沃德奧羅省"] = {wp = "Davao de Oro"},
["北達沃省"] = {wp = "Davao del Norte"},
["南達沃省"] = {wp = "Davao del Sur"},
["西達沃省"] = {wp = "Davao Occidental"},
["東達沃省"] = {wp = "Davao Oriental"},
["迪納加特群島省"] = {wp = "Dinagat Islands"},
["東薩馬省"] = {wp = "Eastern Samar"},
["吉馬拉斯省"] = {wp = "Guimaras"},
["伊富高省"] = {wp = "Ifugao"},
["北伊羅科斯省"] = {wp = "Ilocos Norte"},
["南伊羅科斯省"] = {wp = "Ilocos Sur"},
["伊洛伊洛省"] = {wp = "Iloilo"},
["伊莎貝拉省"] = {wp = "Isabela (province)"},
["卡林加省"] = {wp = "Kalinga (province)"},
["拉烏尼翁省"] = {wp = "La Union"},
["拉古納省"] = {wp = "Laguna (province)"},
["北拉瑙省"] = {wp = "Lanao del Norte"},
["南拉瑙省"] = {wp = "Lanao del Sur"},
["萊特省"] = {wp = "Leyte (province)"},
["北馬京達瑙省"] = {wp = "Maguindanao del Norte"},
["南馬京達瑙省"] = {wp = "Maguindanao del Sur"},
["馬林杜克省"] = {wp = "Marinduque"},
["馬斯巴特省"] = {wp = "Masbate"},
["西米薩米斯省"] = {wp = "Misamis Occidental"},
["東米薩米斯省"] = {wp = "Misamis Oriental"},
["山岳省"] = {wp = "Mountain Province"},
["西內格羅斯省"] = {wp = "Negros Occidental"},
["東內格羅斯省"] = {wp = "Negros Oriental"},
["北薩馬省"] = {wp = "Northern Samar"},
["新怡詩夏省"] = {wp = "Nueva Ecija"},
["新比斯開省"] = {wp = "Nueva Vizcaya"},
["西民都洛省"] = {wp = "Occidental Mindoro"},
["東民都洛省"] = {wp = "Oriental Mindoro"},
["巴拉望省"] = {wp = "Palawan"},
["邦板牙省"] = {wp = "Pampanga"},
["邦阿西楠省"] = {wp = "Pangasinan"},
["奎松省"] = {wp = "Quezon"},
["基里諾省"] = {wp = "Quirino"},
["黎剎省"] = {wp = "Rizal (province)"},
["朗布隆省"] = {wp = "Romblon"},
["薩馬省"] = {wp = "Samar (province)"},
["薩蘭加尼省"] = {wp = "Sarangani"},
["錫基霍爾省"] = {wp = "Siquijor"},
["索索貢省"] = {wp = "Sorsogon"},
["南哥打巴托省"] = {wp = "South Cotabato"},
["南萊特省"] = {wp = "Southern Leyte"},
["蘇丹庫達拉省"] = {wp = "Sultan Kudarat"},
["蘇祿省"] = {wp = "Sulu"},
["北蘇里高省"] = {wp = "Surigao del Norte"},
["南蘇里高省"] = {wp = "Surigao del Sur"},
["塔拉克省"] = {wp = "Tarlac"},
["塔威塔威省"] = {wp = "Tawi-Tawi"},
["三描禮士省"] = {wp = "Zambales"},
["北三寶顏省"] = {wp = "Zamboanga del Norte"},
["南三寶顏省"] = {wp = "Zamboanga del Sur"},
["三寶顏錫布蓋省"] = {wp = "Zamboanga Sibugay"},
["馬尼拉都會區"] = {wp = "Metro Manila", placetype = {"region", "province"}},
}
export.philippines_group = {
placename_to_key = false,
default_container = "菲律賓",
default_placetype = "province",
data = export.philippines_provinces,
}
-----------------------------------------------------------------------------------
-- Poland voivodeships --
-----------------------------------------------------------------------------------
export.poland_voivodeships = {
["下西里西亞省"] = {wp = "Lower Silesian Voivodeship"},
["庫亞維-波美拉尼亞省"] = {wp = "Kuyavian-Pomeranian Voivodeship"},
["盧布林省"] = {wp = "Lublin Voivodeship"},
["盧布斯省"] = {wp = "Lubusz Voivodeship"},
["羅茲省"] = {wp = "Łódź Voivodeship"},
["小波蘭省"] = {wp = "Lesser Poland Voivodeship"},
["馬佐夫舍省"] = {wp = "Masovian Voivodeship"},
["奧波萊省"] = {wp = "Opole Voivodeship"},
["喀爾巴阡山省"] = {wp = "Subcarpathian Voivodeship"},
["波德拉謝省"] = {wp = "Podlaskie Voivodeship"},
["波美拉尼亞省"] = {wp = "Pomeranian Voivodeship"},
["西里西亞省"] = {wp = "Silesian Voivodeship"},
["神聖十字省"] = {wp = "Świętokrzyskie Voivodeship"},
["瓦爾米亞-馬祖里省"] = {wp = "Warmian-Masurian Voivodeship"},
["大波蘭省"] = {wp = "Greater Poland Voivodeship"},
["西波美拉尼亞省"] = {wp = "West Pomeranian Voivodeship"},
}
export.poland_group = {
placename_to_key = false,
default_container = "波蘭",
default_placetype = "voivodeship",
data = export.poland_voivodeships,
}
-----------------------------------------------------------------------------------
-- Portugal districts and autonomous regions --
-----------------------------------------------------------------------------------
export.portugal_districts_and_autonomous_regions = {
["亞速爾群島"] = {wp = "Azores", placetype = {"autonomous region", "region"}},
["阿維羅區"] = {wp = "Aveiro District"},
["貝雅區"] = {wp = "Beja District"},
["布拉加區"] = {wp = "Braga District"},
["布拉干薩區"] = {wp = "Bragança District"},
["卡斯特洛布蘭科區"] = {wp = "Castelo Branco District"},
["科英布拉區"] = {wp = "Coimbra District"},
["埃武拉區"] = {wp = "Évora District"},
["法魯區"] = {wp = "Faro District"},
["瓜達區"] = {wp = "Guarda District"},
["萊里亞區"] = {wp = "Leiria District"},
["里斯本區"] = {wp = "Lisbon District"},
["馬德拉島"] = {wp = "Madeira", placetype = {"autonomous region", "region"}},
["波塔萊格里區"] = {wp = "Portalegre District"},
["波爾圖區"] = {wp = "Porto District"},
["聖塔倫區"] = {wp = "Santarém District"},
["塞圖巴爾區"] = {wp = "Setúbal District"},
["維亞納堡區"] = {wp = "Viana do Castelo District"},
["維拉雷亞爾區"] = {wp = "Vila Real District"},
["維塞烏區"] = {wp = "Viseu District"},
}
export.portugal_group = {
placename_to_key = false,
default_container = "葡萄牙",
default_placetype = "district",
data = export.portugal_districts_and_autonomous_regions,
}
-----------------------------------------------------------------------------------
-- Russia federal subjects --
-----------------------------------------------------------------------------------
local russia_oblast = {placetype = "oblast"}
local russia_krai = {placetype = "krai"}
local russia_republic = {placetype = "republic"}
local russia_autonomous_okrug = {placetype = {"autonomous okrug", "okrug"}}
export.russia_federal_subjects = {
-- autonomous oblast
["猶太自治州"] = {placetype = {"autonomous oblast", "oblast"}, wp = "Jewish Autonomous Oblast"},
-- autonomous okrugs
["楚科奇自治區"] = {wp = "Chukotka Autonomous Okrug", placetype = {"autonomous okrug", "okrug"}},
["漢特-曼西自治區"] = {wp = "Khanty-Mansi Autonomous Okrug", placetype = {"autonomous okrug", "okrug"}},
["漢特-曼西亞"] = {alias_of = "漢特-曼西自治區"},
["涅涅茨自治區"] = {wp = "Nenets Autonomous Okrug", placetype = {"autonomous okrug", "okrug"}},
["亞馬洛-涅涅茨自治區"] = {wp = "Yamalo-Nenets Autonomous Okrug", placetype = {"autonomous okrug", "okrug"}},
-- krais
["阿爾泰邊疆區"] = {wp = "Altai Krai", placetype = "krai"},
["堪察加邊疆區"] = {wp = "Kamchatka Krai", placetype = "krai"},
["哈巴羅夫斯克邊疆區"] = {wp = "Khabarovsk Krai", placetype = "krai"},
["克拉斯諾達爾邊疆區"] = {wp = "Krasnodar Krai", placetype = "krai"},
["克拉斯諾亞爾斯克邊疆區"] = {wp = "Krasnoyarsk Krai", placetype = "krai"},
["彼爾姆邊疆區"] = {wp = "Perm Krai", placetype = "krai"},
["濱海邊疆區"] = {wp = "Primorsky Krai", placetype = "krai"},
["斯塔夫羅波爾邊疆區"] = {wp = "Stavropol Krai", placetype = "krai"},
["外貝加爾邊疆區"] = {wp = "Zabaykalsky Krai", placetype = "krai"},
-- oblasts
["阿穆爾州"] = russia_oblast,
["阿爾漢格爾斯克州"] = russia_oblast,
["阿斯特拉罕州"] = russia_oblast,
["別爾哥羅德州"] = russia_oblast,
["布良斯克州"] = russia_oblast,
["車裡雅賓斯克州"] = russia_oblast,
["伊爾庫茨克州"] = russia_oblast,
["伊萬諾沃州"] = russia_oblast,
["加里寧格勒州"] = russia_oblast,
["卡盧加州"] = russia_oblast,
["克麥羅沃州"] = russia_oblast,
["基洛夫州"] = russia_oblast,
["科斯特羅馬州"] = russia_oblast,
["庫爾干州"] = russia_oblast,
["庫爾斯克州"] = russia_oblast,
["列寧格勒州"] = russia_oblast,
["利佩茨克州"] = russia_oblast,
["馬加丹州"] = russia_oblast,
["莫斯科州"] = russia_oblast,
["摩爾曼斯克州"] = russia_oblast,
["下諾夫哥羅德州"] = russia_oblast,
["諾夫哥羅德州"] = russia_oblast,
["新西伯利亞州"] = russia_oblast,
["鄂木斯克州"] = russia_oblast,
["奧倫堡州"] = russia_oblast,
["奧廖爾州"] = russia_oblast,
["奔薩州"] = russia_oblast,
["普斯科夫州"] = russia_oblast,
["羅斯托夫州"] = russia_oblast,
["梁贊州"] = russia_oblast,
["薩哈林州"] = {wp = "Sakhalin Oblast", placetype = "oblast"},
["薩馬拉州"] = russia_oblast,
["薩拉托夫州"] = russia_oblast,
["斯摩棱斯克州"] = russia_oblast,
["斯維爾德洛夫斯克州"] = russia_oblast,
["坦波夫州"] = russia_oblast,
["托木斯克州"] = russia_oblast,
["圖拉州"] = russia_oblast,
["特維爾州"] = russia_oblast,
["秋明州"] = russia_oblast,
["烏里揚諾夫斯克州"] = russia_oblast,
["弗拉基米爾州"] = russia_oblast,
["伏爾加格勒州"] = russia_oblast,
["沃洛格達州"] = russia_oblast,
["沃羅涅日州"] = russia_oblast,
["雅羅斯拉夫爾州"] = russia_oblast,
-- republics
["阿迪格共和國"] = russia_republic,
["巴什科爾托斯坦共和國"] = russia_republic,
["布里亞特共和國"] = russia_republic,
["達吉斯坦共和國"] = russia_republic,
["印古什共和國"] = russia_republic,
["卡爾梅克共和國"] = russia_republic,
["卡累利亞共和國"] = {wp = "Republic of Karelia", placetype = "republic"},
["哈卡斯共和國"] = russia_republic,
["莫爾多瓦共和國"] = russia_republic,
["北奧塞梯-阿蘭尼亞共和國"] = {wp = "North Ossetia–Alania", placetype = "republic"},
["北奧塞梯"] = {alias_of = "北奧塞梯-阿蘭尼亞共和國"},
["韃靼斯坦共和國"] = russia_republic,
["阿爾泰共和國"] = {wp = "Altai Republic", placetype = "republic"},
["車臣共和國"] = russia_republic,
["楚瓦什共和國"] = russia_republic,
["卡巴爾達-巴爾卡爾共和國"] = russia_republic,
["卡拉恰伊-切爾克斯共和國"] = russia_republic,
["科米共和國"] = {wp = "Komi Republic", placetype = "republic"},
["馬里埃爾共和國"] = russia_republic,
["薩哈共和國"] = {wp = "Sakha Republic", placetype = "republic"},
["雅庫特"] = {alias_of = "薩哈共和國"},
["圖瓦共和國"] = russia_republic,
["烏德穆爾特共和國"] = russia_republic,
}
export.russia_group = {
placename_to_key = false,
default_container = "俄羅斯",
default_placetype = "oblast",
data = export.russia_federal_subjects,
}
-----------------------------------------------------------------------------------
-- Saudi Arabia provinces --
-----------------------------------------------------------------------------------
export.saudi_arabia_provinces = {
["利雅得省"] = {wp = "Riyadh Province"},
["麥加省"] = {wp = "Mecca Province"},
["東部省(沙特)"] = {wp = "Eastern Province, Saudi Arabia", no_auto_augment_container = true},
["麥地那省"] = {wp = "Medina Province"},
["阿西爾省"] = {wp = "Asir"},
["吉贊省"] = {wp = "Jazan Province"},
["卡西姆省"] = {wp = "Al-Qassim Province"},
["塔布克省"] = {wp = "Tabuk Province"},
["哈伊爾省"] = {wp = "Ha'il Province"},
["焦夫省"] = {wp = "Al-Jawf Province"},
["納季蘭省"] = {wp = "Najran Province"},
["北部邊界省"] = {wp = "Northern Borders Province"},
["巴哈省"] = {wp = "Al-Bahah Province"},
}
export.saudi_arabia_group = {
placename_to_key = false,
default_container = "沙烏地阿拉伯",
default_placetype = "province",
data = export.saudi_arabia_provinces,
}
-----------------------------------------------------------------------------------
-- South Africa provinces --
-----------------------------------------------------------------------------------
export.south_africa_provinces = {
["東開普省"] = {wp = "Eastern Cape"},
["自由邦省"] = {wp = "Free State (South African province)"},
["豪登省"] = {wp = "Gauteng"},
["夸祖魯-納塔爾省"] = {wp = "KwaZulu-Natal"},
["林波波省"] = {wp = "Limpopo"},
["姆普馬蘭加省"] = {wp = "Mpumalanga"},
["西北省(南非)"] = {wp = "North West (South African province)"},
["北開普省"] = {wp = "Northern Cape"},
["西開普省"] = {wp = "Western Cape"},
}
export.south_africa_group = {
placename_to_key = false,
default_container = "南非",
default_placetype = "province",
data = export.south_africa_provinces,
}
-----------------------------------------------------------------------------------
-- Ukraine oblasts --
-----------------------------------------------------------------------------------
export.ukraine_oblasts = {
["切爾卡瑟州"] = {wp = "Cherkasy Oblast"},
["切爾尼戈夫州"] = {wp = "Chernihiv Oblast"},
["切爾諾夫策州"] = {wp = "Chernivtsi Oblast"},
["第聶伯羅彼得羅夫斯克州"] = {wp = "Dnipropetrovsk Oblast"},
["頓涅茨克州"] = {wp = "Donetsk Oblast"},
["伊萬諾-弗蘭科夫斯克州"] = {wp = "Ivano-Frankivsk Oblast"},
["哈爾科夫州"] = {wp = "Kharkiv Oblast"},
["赫爾松州"] = {wp = "Kherson Oblast"},
["赫梅利尼茨基州"] = {wp = "Khmelnytskyi Oblast"},
["基洛夫格勒州"] = {wp = "Kirovohrad Oblast"},
["基輔州"] = {wp = "Kyiv Oblast"},
["盧甘斯克州"] = {wp = "Luhansk Oblast"},
["利沃夫州"] = {wp = "Lviv Oblast"},
["尼古拉耶夫州"] = {wp = "Mykolaiv Oblast"},
["敖德薩州"] = {wp = "Odesa Oblast"},
["波爾塔瓦州"] = {wp = "Poltava Oblast"},
["羅夫諾州"] = {wp = "Rivne Oblast"},
["蘇梅州"] = {wp = "Sumy Oblast"},
["捷爾諾波爾州"] = {wp = "Ternopil Oblast"},
["文尼察州"] = {wp = "Vinnytsia Oblast"},
["沃里尼亞州"] = {wp = "Volyn Oblast"},
["外喀爾巴阡州"] = {wp = "Zakarpattia Oblast"},
["扎波羅熱州"] = {wp = "Zaporizhzhia Oblast"},
["日托米爾州"] = {wp = "Zhytomyr Oblast"},
}
export.ukraine_group = {
placename_to_key = false,
default_container = "烏克蘭",
default_placetype = "oblast",
data = export.ukraine_oblasts,
}
-----------------------------------------------------------------------------------
-- Wales principal areas --
-----------------------------------------------------------------------------------
export.wales_principal_areas = {
["布拉艾諾格溫特"] = {wp = "Blaenau Gwent"},
["布里真德"] = {wp = "Bridgend County Borough"},
["卡菲利"] = {wp = "Caerphilly County Borough"},
["卡馬森郡"] = {wp = "Carmarthenshire", placetype = "county"},
["克雷地基昂"] = {wp = "Ceredigion", placetype = "county"},
["科溫"] = {wp = "Conwy County Borough"},
["登比郡"] = {wp = "Denbighshire", placetype = "county"},
["弗林特郡"] = {wp = "Flintshire", placetype = "county"},
["格溫內德"] = {wp = "Gwynedd", placetype = "county"},
["安格爾西島"] = {wp = "Isle of Anglesey", placetype = "county"},
["默瑟蒂德菲爾"] = {wp = "Merthyr Tydfil County Borough"},
["蒙茅斯郡"] = {wp = "Monmouthshire", placetype = "county"},
["尼斯-波特塔爾博特"] = {wp = "Neath Port Talbot"},
["彭布羅克郡"] = {wp = "Pembrokeshire", placetype = "county"},
["波伊斯"] = {wp = "Powys", placetype = "county"},
["朗達坎農塔夫"] = {wp = "Rhondda Cynon Taf"},
["托爾范"] = {wp = "Torfaen"},
["格拉摩根谷"] = {wp = "Vale of Glamorgan"},
["雷克瑟姆"] = {wp = "Wrexham County Borough"},
}
export.wales_group = {
placename_to_key = false,
default_container = {key = "威爾斯", placetype = "constituent country"},
default_placetype = "county borough",
data = export.wales_principal_areas,
}
-----------------------------------------------------------------------------------
-- City groups --
-----------------------------------------------------------------------------------
export.australia_cities = {
["阿德萊德"] = {container = "南澳大利亞", wp = "Adelaide"},
["布里斯班"] = {container = "昆士蘭", wp = "Brisbane"},
["坎培拉"] = {container = "澳大利亞首都領地", wp = "Canberra"},
["墨爾本"] = {container = "維多利亞州", wp = "Melbourne"},
["紐卡素"] = {container = "新南威爾斯", wp = "Newcastle, New South Wales"},
["伯斯"] = {container = "西澳大利亞", wp = "Perth"},
["悉尼"] = {container = "新南威爾斯", wp = "Sydney"},
}
export.australia_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "澳大利亞",
default_placetype = "city",
default_is_city = true,
data = export.australia_cities,
}
export.brazil_cities = {
["聖保羅"] = {container = "聖保羅州", wp = "São Paulo"},
["里約熱內盧"] = {container = "里約熱內盧州", wp = "Rio de Janeiro"},
["貝洛奧里藏特"] = {container = "米納斯吉拉斯", wp = "Belo Horizonte"},
["累西腓"] = {container = "伯南布哥州", wp = "Recife"},
["阿雷格里港"] = {container = "南里奧格蘭德州", wp = "Porto Alegre"},
["巴西利亞"] = {container = "巴西聯邦區", wp = "Brasília"},
["福塔萊薩"] = {container = "塞阿拉州", wp = "Fortaleza"},
["薩爾瓦多"] = {container = "巴伊亞", wp = "Salvador, Bahia"},
["庫里蒂巴"] = {container = "巴拉那州", wp = "Curitiba"},
["坎皮納斯"] = {container = "聖保羅州", wp = "Campinas"},
["戈亞尼亞"] = {container = "戈亞斯州", wp = "Goiânia"},
["瑪瑙斯"] = {container = "亞馬遜州", wp = "Manaus"},
["伯利恆"] = {container = "帕拉州", wp = "Belém, Pará"},
["維多利亞"] = {container = "聖埃斯皮里圖州", wp = "Vitória, Espírito Santo"},
["聖路易斯"] = {container = "馬拉尼昂州", wp = "São Luís"},
["納塔爾"] = {container = "北里奧格蘭德州", wp = "Natal, Rio Grande do Norte"},
["弗洛里亞諾波利斯"] = {container = "聖卡塔琳娜州", wp = "Florianópolis"},
["馬塞約"] = {container = "阿拉戈亞斯州", wp = "Maceió"},
["若昂佩索阿"] = {container = "帕拉伊巴州", wp = "João Pessoa"},
["特雷齊納"] = {container = "皮奧伊州", wp = "Teresina"},
["隆德里納"] = {container = "巴拉那州", wp = "Londrina"},
}
export.brazil_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "巴西",
default_placetype = "city",
default_is_city = true,
data = export.brazil_cities,
}
export.canada_cities = {
["多倫多"] = {container = "安大略", wp = "Toronto"},
["蒙特婁"] = {container = "魁北克", wp = "Montreal"},
["溫哥華"] = {container = "英屬哥倫比亞", wp = "Vancouver"},
["卡加里"] = {container = "亞伯達", wp = "Calgary"},
["愛民頓"] = {container = "亞伯達", wp = "Edmonton"},
["渥太華"] = {container = "安大略", wp = "Ottawa"},
["魁北克城"] = {container = "魁北克", wp = "Quebec City"},
["溫尼伯"] = {container = "馬尼托巴", wp = "Winnipeg"},
["漢密爾頓"] = {container = "安大略", wp = "Hamilton, Ontario"},
}
export.canada_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "加拿大",
default_placetype = "city",
default_is_city = true,
data = export.canada_cities,
}
export.france_cities = {
["巴黎"] = {container = "法蘭西島大區", wp = "Paris"},
["里昂"] = {container = "奧弗涅-隆河-阿爾卑斯大區", wp = "Lyon"},
["馬賽"] = {container = "普羅旺斯-阿爾卑斯-蔚藍海岸大區", wp = "Marseille"},
["里爾"] = {container = "上法蘭西大區", wp = "Lille"},
["波爾多"] = {container = "新阿基坦大區", wp = "Bordeaux"},
["圖盧茲"] = {container = "奧克西塔尼大區", wp = "Toulouse"},
["尼斯"] = {container = "普羅旺斯-阿爾卑斯-蔚藍海岸大區", wp = "Nice"},
["南特"] = {container = "盧瓦爾河地區大區", wp = "Nantes"},
["史特拉斯堡"] = {container = "大東部大區", wp = "Strasbourg"},
["雷恩"] = {container = "布列塔尼大區", wp = "Rennes"},
}
export.france_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "region"),
default_container = "法國",
default_placetype = "city",
default_is_city = true,
data = export.france_cities,
}
export.germany_cities = {
["科隆"] = {container = "北萊茵-威斯特法倫", wp = "Cologne"},
["杜塞爾多夫"] = {container = "北萊茵-威斯特法倫", wp = "Düsseldorf"},
["多特蒙德"] = {container = "北萊茵-威斯特法倫", wp = "Dortmund"},
["埃森"] = {container = "北萊茵-威斯特法倫", wp = "Essen"},
["柏林"] = {wp = "Berlin"},
["法蘭克福"] = {container = "黑森", wp = "Frankfurt"},
["漢堡"] = {wp = "Hamburg"},
["慕尼黑"] = {container = "巴伐利亞", wp = "Munich"},
["斯圖加特"] = {container = "巴登-符騰堡", wp = "Stuttgart"},
["曼海姆"] = {container = "巴登-符騰堡", wp = "Mannheim"},
["紐倫堡"] = {container = "巴伐利亞", wp = "Nuremberg"},
["漢諾威"] = {container = "下薩克森", wp = "Hanover"},
["比勒費爾德"] = {container = "北萊茵-威斯特法倫", wp = "Bielefeld"},
["萊比錫"] = {container = "薩克森", wp = "Leipzig"},
["亞琛"] = {container = "北萊茵-威斯特法倫", wp = "Aachen"},
["不來梅"] = {wp = "Bremen"},
}
export.germany_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "德國",
default_placetype = "city",
default_is_city = true,
data = export.germany_cities,
}
export.india_cities = {
["德里"] = {container = {key = "德里", placetype = "union territory"}, wp = "Delhi"},
["孟買"] = {container = "馬哈拉施特拉邦", wp = "Mumbai"},
["加爾各答"] = {container = "西孟加拉邦", wp = "Kolkata"},
["班加羅爾"] = {container = "卡納塔克邦", wp = "Bengaluru"},
["金奈"] = {container = "泰米爾納德邦", wp = "Chennai"},
["海德拉巴"] = {container = "特倫甘納邦", wp = "Hyderabad"},
["艾哈邁達巴德"] = {container = "古吉拉特邦", wp = "Ahmedabad"},
["浦那"] = {container = "馬哈拉施特拉邦", wp = "Pune"},
["蘇拉特"] = {container = "古吉拉特邦", wp = "Surat"},
["勒克瑙"] = {container = "北方邦", wp = "Lucknow"},
["齋浦爾"] = {container = "拉賈斯坦邦", wp = "Jaipur"},
["坎普爾"] = {container = "北方邦", wp = "Kanpur"},
["那格浦爾"] = {container = "馬哈拉施特拉邦", wp = "Nagpur"},
["巴特那"] = {container = "比哈爾邦", wp = "Patna"},
["瓦拉納西"] = {container = "北方邦", wp = "Varanasi"},
["印多爾"] = {container = "中央邦", wp = "Indore"},
["博帕爾"] = {container = "中央邦", wp = "Bhopal"},
["阿格拉"] = {container = "北方邦", wp = "Agra"},
["科欽"] = {container = "喀拉拉邦", wp = "Kochi"},
["維沙卡帕特南"] = {container = "安得拉邦", wp = "Visakhapatnam"},
["齋普爾"] = {alias_of = "齋浦爾"},
}
export.india_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "印度",
default_placetype = "city",
default_is_city = true,
data = export.india_cities,
}
export.indonesia_cities = {
["雅加達"] = {container = "雅加達首都特區", wp = "Jakarta"},
["泗水"] = {container = "東爪哇省", wp = "Surabaya"},
["勿加泗"] = {container = "西爪哇省", wp = "Bekasi"},
["萬隆"] = {container = "西爪哇省", wp = "Bandung"},
["棉蘭"] = {container = "北蘇門答臘省", wp = "Medan"},
["德波"] = {container = "西爪哇省", wp = "Depok"},
["萬丹市"] = {container = "萬丹省", wp = "Tangerang"},
["巨港"] = {container = "南蘇門答臘省", wp = "Palembang"},
["三寶壟"] = {container = "中爪哇省", wp = "Semarang"},
["望加錫"] = {container = "南蘇拉威西省", wp = "Makassar"},
["武端"] = {container = "廖內群島省", wp = "Batam"},
["茂物"] = {container = "西爪哇省", wp = "Bogor"},
["北干巴魯"] = {container = "廖內省", wp = "Pekanbaru"},
["班達爾楠榜"] = {container = "楠榜省", wp = "Bandar Lampung"},
["巴東"] = {container = "西蘇門答臘省", wp = "Padang"},
["薩馬林達"] = {container = "東加里曼丹省", wp = "Samarinda"},
["瑪琅"] = {container = "東爪哇省", wp = "Malang"},
["日惹"] = {container = "日惹特區", wp = "Yogyakarta"},
["登巴薩"] = {container = "峇里省", wp = "Denpasar"},
["哲勒貢"] = {container = "西爪哇省", wp = "Cirebon"},
["梭羅"] = {container = "中爪哇省", wp = "Surakarta"},
["馬辰"] = {container = "南加里曼丹省", wp = "Banjarmasin"},
["打橫"] = {container = "西爪哇省", wp = "Tasikmalaya"},
}
export.indonesia_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "印度尼西亞",
default_placetype = "city",
default_is_city = true,
data = export.indonesia_cities,
}
export.italy_cities = {
["米蘭"] = {container = "倫巴第", wp = "Milan"},
["那不勒斯"] = {container = "坎帕尼亞", wp = "Naples"},
["羅馬"] = {container = "拉齊奧", wp = "Rome"},
["都靈"] = {container = "皮埃蒙特", wp = "Turin"},
["威尼斯"] = {container = "威尼托", wp = "Venice"},
["佛羅倫斯"] = {container = "托斯卡納", wp = "Florence"},
["巴里"] = {container = "普利亞", wp = "Bari"},
["巴勒莫"] = {container = "西西里", wp = "Palermo"},
["卡塔尼亞"] = {container = "西西里", wp = "Catania"},
["布雷西亞"] = {container = "倫巴第", wp = "Brescia"},
["熱那亞"] = {container = "利古里亞", wp = "Genoa"},
}
export.italy_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "region"),
default_container = "意大利",
default_placetype = "city",
default_is_city = true,
data = export.italy_cities,
}
export.japan_cities = {
["東京"] = {container = "東京都", wp = "Tokyo", placetype = {"city", "prefecture"}},
["橫濱"] = {container = "神奈川縣", wp = "Yokohama"},
["大阪"] = {container = "大阪府", wp = "Osaka"},
["名古屋"] = {container = "愛知縣", wp = "Nagoya"},
["札幌"] = {container = "北海道", wp = "Sapporo"},
["福岡"] = {container = "福岡縣", wp = "Fukuoka"},
["神戶"] = {container = "兵庫縣", wp = "Kobe"},
["京都"] = {container = "京都府", wp = "Kyoto"},
["川崎"] = {container = "神奈川縣", wp = "Kawasaki, Kanagawa"},
["廣島"] = {container = "廣島縣", wp = "Hiroshima"},
["仙台"] = {container = "宮城縣", wp = "Sendai"},
["北九州"] = {container = "福岡縣", wp = "Kitakyushu"},
["新潟"] = {container = "新潟縣", wp = "Niigata (city)"},
["靜岡"] = {container = "靜岡縣", wp = "Shizuoka (city)"},
["岡山"] = {container = "岡山縣", wp = "Okayama"},
["熊本"] = {container = "熊本縣", wp = "Kumamoto"},
["鹿兒島"] = {container = "鹿兒島縣", wp = "Kagoshima"},
}
export.japan_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "prefecture"),
default_container = "日本",
default_placetype = "city",
default_is_city = true,
data = export.japan_cities,
}
export.mexico_cities = {
["墨西哥城"] = {wp = "Mexico City"},
["蒙特雷"] = {container = "新萊昂州", wp = "Monterrey"},
["瓜達拉哈拉"] = {container = "哈利斯科州", wp = "Guadalajara"},
["普埃布拉市"] = {container = "普埃布拉州", wp = "Puebla (city)"},
["托盧卡"] = {container = "墨西哥州", wp = "Toluca"},
["蒂華納"] = {container = "下加利福尼亞州", wp = "Tijuana"},
["萊昂"] = {container = "瓜納華托州", wp = "León, Guanajuato"},
["克雷塔羅市"] = {container = "克雷塔羅州", wp = "Querétaro (city)"},
["華雷斯城"] = {container = "奇瓦瓦州", wp = "Ciudad Juárez"},
["托雷翁"] = {container = "科阿韋拉州", wp = "Torreón"},
["梅里達"] = {container = "尤卡坦州", wp = "Mérida, Yucatán"},
["聖路易斯波托西市"] = {container = "聖路易斯波托西州", wp = "San Luis Potosí (city)"},
["阿瓜斯卡連特斯市"] = {container = "阿瓜斯卡連特斯州", wp = "Aguascalientes (city)"},
["墨西卡利"] = {container = "下加利福尼亞州", wp = "Mexicali"},
}
export.mexico_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "墨西哥",
default_placetype = "city",
default_is_city = true,
data = export.mexico_cities,
}
export.nigeria_cities = {
["拉各斯"] = {container = "拉各斯州", wp = "Lagos"},
["卡諾市"] = {container = "卡諾州", wp = "Kano (city)"},
["伊巴丹"] = {container = "奧約州", wp = "Ibadan"},
["阿布賈"] = {container = {key = "阿布賈聯邦首都轄區", placetype = "federal territory"}, wp = "Abuja"},
["哈科特港"] = {container = "河流州", wp = "Port Harcourt"},
["卡杜納市"] = {container = "卡杜納州", wp = "Kaduna (city)"},
["貝寧城"] = {container = "埃多州", wp = "Benin City"},
["阿巴"] = {container = "阿比亞州", wp = "Aba, Nigeria"},
["奧尼查"] = {container = "阿南布拉州", wp = "Onitsha"},
["邁杜古里"] = {container = "博爾諾州", wp = "Maiduguri"},
["伊洛林"] = {container = "誇拉州", wp = "Ilorin"},
["索科托市"] = {container = "索科托州", wp = "Sokoto (city)"},
["喬斯"] = {container = "高原州", wp = "Jos"},
["扎里亞"] = {container = "卡杜納州", wp = "Zaria"},
["埃努古市"] = {container = "埃努古州", wp = "Enugu (city)"},
}
export.nigeria_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "奈及利亞",
default_placetype = "city",
default_is_city = true,
data = export.nigeria_cities,
}
export.pakistan_cities = {
["卡拉奇"] = {container = "信德省", wp = "Karachi"},
["拉合爾"] = {container = "旁遮普省(巴基斯坦)", wp = "Lahore"},
["拉瓦爾品第"] = {container = "旁遮普省(巴基斯坦)", wp = "Rawalpindi"},
["伊斯蘭馬巴德"] = {container = {key = "伊斯蘭馬巴德首都直轄區", placetype = "federal territory"}, wp = "Islamabad"},
["費薩拉巴德"] = {container = "旁遮普省(巴基斯坦)", wp = "Faisalabad"},
["古傑蘭瓦拉"] = {container = "旁遮普省(巴基斯坦)", wp = "Gujranwala"},
["海德拉巴(巴基斯坦)"] = {container = "信德省", wp = "Hyderabad, Pakistan"},
["木爾坦"] = {container = "旁遮普省(巴基斯坦)", wp = "Multan"},
["白沙瓦"] = {container = "開伯爾-普赫圖赫瓦省", wp = "Peshawar"},
["奎達"] = {container = "俾路支省", wp = "Quetta"},
["薩戈達"] = {container = "旁遮普省(巴基斯坦)", wp = "Sargodha"},
["錫亞爾科特"] = {container = "旁遮普省(巴基斯坦)", wp = "Sialkot"},
}
export.pakistan_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "巴基斯坦",
default_placetype = "city",
default_is_city = true,
data = export.pakistan_cities,
}
export.philippines_cities = {
["奎松市"] = {container = {key = "馬尼拉都會區", placetype = "region"}, wp = "Quezon City"},
["馬尼拉"] = {container = {key = "馬尼拉都會區", placetype = "region"}, wp = "Manila"},
["達沃市"] = {container = "南達沃省", wp = "Davao City"},
["卡洛坎"] = {container = {key = "馬尼拉都會區", placetype = "region"}, wp = "Caloocan"},
["三寶顏市"] = {container = "南三寶顏省", wp = "Zamboanga City"},
["宿霧市"] = {container = "宿霧省", wp = "Cebu City"},
["安蒂波洛"] = {container = "黎剎省", wp = "Antipolo"},
["卡加延德奧羅"] = {container = "東米薩米斯省", wp = "Cagayan de Oro"},
["達斯馬里尼亞斯"] = {container = "甲米地省", wp = "Dasmariñas"},
["棉蘭老將軍城"] = {container = "南哥打巴托省", wp = "General Santos"},
["聖何塞德爾蒙特"] = {container = "布拉干省", wp = "San Jose del Monte"},
["巴科洛德"] = {container = "西內格羅斯省", wp = "Bacolod"},
["卡蘭巴"] = {container = "拉古納省", wp = "Calamba, Laguna"},
["天使城"] = {container = "邦板牙省", wp = "Angeles City"},
["伊洛伊洛市"] = {container = "伊洛伊洛省", wp = "Iloilo City"},
}
export.philippines_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "菲律賓",
default_placetype = "city",
default_is_city = true,
data = export.philippines_cities,
}
export.russia_cities = {
["莫斯科"] = {wp = "Moscow"},
["聖彼得堡"] = {wp = "Saint Petersburg"},
["新西伯利亞"] = {container = "新西伯利亞州", wp = "Novosibirsk"},
["葉卡捷琳堡"] = {container = "斯維爾德洛夫斯克州", wp = "Yekaterinburg"},
["下諾夫哥羅德"] = {container = "下諾夫哥羅德州", wp = "Nizhny Novgorod"},
["喀山"] = {container = {key = "韃靼斯坦共和國", placetype = "republic"}, wp = "Kazan"},
["車裡雅賓斯克市"] = {container = "車裡雅賓斯克州", wp = "Chelyabinsk"},
["頓河畔羅斯托夫"] = {container = "羅斯托夫州", wp = "Rostov-on-Don"},
["克拉斯諾達爾市"] = {container = {key = "克拉斯諾達爾邊疆區", placetype = "krai"}, wp = "Krasnodar"},
["薩馬拉市"] = {container = "薩馬拉州", wp = "Samara"},
["克拉斯諾亞爾斯克市"] = {container = {key = "克拉斯諾亞爾斯克邊疆區", placetype = "krai"}, wp = "Krasnoyarsk"},
["烏法"] = {container = {key = "巴什科爾托斯坦共和國", placetype = "republic"}, wp = "Ufa"},
["薩拉托夫市"] = {container = "薩拉托夫州", wp = "Saratov"},
["鄂木斯克市"] = {container = "鄂木斯克州", wp = "Omsk"},
["沃羅涅日市"] = {container = "沃羅涅日州", wp = "Voronezh"},
["伏爾加格勒市"] = {container = "伏爾加格勒州", wp = "Volgograd"},
["彼爾姆市"] = {container = {key = "彼爾姆邊疆區", placetype = "krai"}, wp = "Perm, Russia"},
}
export.russia_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "oblast"),
default_container = "俄羅斯",
default_placetype = "city",
default_is_city = true,
data = export.russia_cities,
}
export.saudi_arabia_cities = {
["利雅得"] = {container = "利雅得省", wp = "Riyadh"},
["吉達"] = {container = "麥加省", wp = "Jeddah"},
["達曼"] = {container = "東部省(沙特)", wp = "Dammam"},
["麥加"] = {container = "麥加省", wp = "Mecca"},
["麥地那"] = {container = "麥地那省", wp = "Medina"},
["霍夫夫"] = {container = "東部省(沙特)", wp = "Hofuf"},
["哈米斯穆沙伊特"] = {container = "阿西爾省", wp = "Khamis Mushait"},
}
export.saudi_arabia_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "沙烏地阿拉伯",
default_placetype = "city",
default_is_city = true,
data = export.saudi_arabia_cities,
}
export.south_korea_cities = {
["首爾"] = {wp = "Seoul"},
["釜山"] = {wp = "Busan"},
["仁川"] = {wp = "Incheon"},
["大邱"] = {wp = "Daegu"},
["大田"] = {wp = "Daejeon"},
["光州"] = {wp = "Gwangju"},
["蔚山"] = {wp = "Ulsan"},
}
export.south_korea_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "南韓",
default_placetype = "city",
default_is_city = true,
data = export.south_korea_cities,
}
export.spain_cities = {
["馬德里"] = {container = "馬德里自治區", wp = "Madrid"},
["巴塞羅那"] = {container = "加泰羅尼亞", wp = "Barcelona"},
["瓦倫西亞"] = {container = "巴倫西亞", wp = "Valencia"},
["塞維利亞"] = {container = "安達盧西亞", wp = "Seville"},
["畢爾包"] = {container = "巴斯克", wp = "Bilbao"},
}
export.spain_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "autonomous community"),
default_container = "西班牙",
default_placetype = "city",
default_is_city = true,
data = export.spain_cities,
}
export.united_kingdom_cities = {
["倫敦"] = {container = {key = "大倫敦", placetype = "county"}, wp = "London"},
["曼徹斯特"] = {container = {key = "大曼徹斯特", placetype = "county"}, wp = "Manchester"},
["伯明翰"] = {container = {key = "西密德蘭", placetype = "county"}, wp = "Birmingham"},
["利物浦"] = {container = {key = "默西賽德郡", placetype = "county"}, wp = "Liverpool"},
["格拉斯哥"] = {container = {key = "Glasgow市", placetype = "council area"}, wp = "Glasgow"},
["利茲"] = {container = {key = "西約克郡", placetype = "county"}, wp = "Leeds"},
["布里斯托"] = {container = {key = "英格蘭", placetype = "constituent country"}, wp = "Bristol"},
["卡地夫"] = {container = {key = "威爾斯", placetype = "constituent country"}, wp = "Cardiff"},
["愛丁堡"] = {container = {key = "Edinburgh市", placetype = "council area"}, wp = "Edinburgh"},
["斯旺西"] = {container = {key = "威爾斯", placetype = "constituent country"}, wp = "Swansea"},
["紐波特"] = {container = {key = "威爾斯", placetype = "constituent country"}, wp = "Newport, Wales"},
}
export.united_kingdom_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "county"),
default_container = "英國",
default_placetype = "city",
default_is_city = true,
data = export.united_kingdom_cities,
}
export.united_states_cities = {
["紐約市"] = {container = "紐約", wp = "New York City"},
["洛杉磯"] = {container = "加利福尼亞", wp = "Los Angeles"},
["芝加哥"] = {container = "伊利諾伊", wp = "Chicago"},
["華盛頓特區"] = {wp = "Washington, D.C."},
["巴爾的摩"] = {container = "馬里蘭", wp = "Baltimore"},
["聖荷西"] = {container = "加利福尼亞", wp = "San Jose, California"},
["舊金山"] = {container = "加利福尼亞", wp = "San Francisco"},
["波士頓"] = {container = "麻薩諸塞", wp = "Boston"},
["達拉斯"] = {container = "德克薩斯", wp = "Dallas"},
["費城"] = {container = "賓夕法尼亞", wp = "Philadelphia"},
["休士頓"] = {container = "德克薩斯", wp = "Houston"},
["邁阿密"] = {container = "佛羅里達", wp = "Miami"},
["亞特蘭大"] = {container = "喬治亞", wp = "Atlanta"},
["底特律"] = {container = "密西根", wp = "Detroit"},
["鳳凰城"] = {container = "亞利桑那", wp = "Phoenix"},
["西雅圖"] = {container = "華盛頓州", wp = "Seattle"},
["明尼阿波利斯"] = {container = "明尼蘇達", wp = "Minneapolis"},
["克里夫蘭"] = {container = "俄亥俄", wp = "Cleveland"},
["丹佛"] = {container = "科羅拉多", wp = "Denver"},
["聖地牙哥(美國)"] = {container = "加利福尼亞", wp = "San Diego"},
["波特蘭(俄勒岡)"] = {container = "俄勒岡", wp = "Portland"},
["聖路易斯"] = {container = "密蘇里", wp = "St. Louis"},
["夏洛特"] = {container = "北卡羅來納", wp = "Charlotte"},
["薩克拉門托"] = {container = "加利福尼亞", wp = "Sacramento"},
["匹茲堡"] = {container = "賓夕法尼亞", wp = "Pittsburgh"},
["鹽湖城"] = {container = "猶他", wp = "Salt Lake City"},
["聖安東尼奧"] = {container = "德克薩斯", wp = "San Antonio"},
["哥倫布"] = {container = "俄亥俄", wp = "Columbus"},
["堪薩斯城"] = {container = "密蘇里", wp = "Kansas City metropolitan area"},
["印第安納波利斯"] = {container = "印第安納", wp = "Indianapolis"},
["拉斯維加斯"] = {container = "內華達", wp = "Las Vegas"},
["辛辛那提"] = {container = "俄亥俄", wp = "Cincinnati"},
["奧斯汀"] = {container = "德克薩斯", wp = "Austin"},
["密爾沃基"] = {container = "威斯康辛", wp = "Milwaukee"},
["羅利"] = {container = "北卡羅來納", wp = "Raleigh"},
["納什維爾"] = {container = "田納西", wp = "Nashville"},
["傑克遜維爾"] = {container = "佛羅里達", wp = "Jacksonville"},
["新奧爾良"] = {container = "路易斯安那", wp = "New Orleans"},
["路易斯維爾"] = {container = "肯塔基", wp = "Louisville"},
["奧克拉荷馬城"] = {container = "奧克拉荷馬", wp = "Oklahoma City"},
["孟菲斯"] = {container = "田納西", wp = "Memphis"},
["伯明翰(美國)"] = {container = "阿拉巴馬", wp = "Birmingham, Alabama"},
["弗雷斯諾"] = {container = "加利福尼亞", wp = "Fresno"},
["里奇蒙"] = {container = "弗吉尼亞", wp = "Richmond"},
["水牛城"] = {container = "紐約", wp = "Buffalo"},
["艾爾帕索"] = {container = "德克薩斯", wp = "El Paso"},
["阿爾伯克基"] = {container = "新墨西哥", wp = "Albuquerque"},
["塔森"] = {container = "亞利桑那", wp = "Tucson"},
["科羅拉多斯普林斯"] = {container = "科羅拉多", wp = "Colorado Springs"},
["奧馬哈"] = {container = "內布拉斯加", wp = "Omaha"},
["塔爾薩"] = {container = "奧克拉荷馬", wp = "Tulsa"},
}
export.united_states_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "state"),
default_container = "美國",
default_placetype = "city",
default_is_city = true,
data = export.united_states_cities,
}
export.vietnam_cities = {
["胡志明市"] = {wp = "Ho Chi Minh City"},
["西貢"] = {alias_of = "胡志明市"},
["河內"] = {wp = "Hanoi"},
["峴港"] = {wp = "Da Nang"},
["海防"] = {wp = "Haiphong"},
["邊和"] = {container = "同奈省", wp = "Biên Hòa", placetype = "city"},
["芹苴"] = {wp = "Cần Thơ"},
["順化"] = {wp = "Huế"},
}
export.vietnam_cities_group = {
placename_to_key = false,
canonicalize_key_container = make_canonicalize_key_container(nil, "province"),
default_container = "越南",
default_placetype = {"municipality", "city"},
default_is_city = true,
data = export.vietnam_cities,
}
-----------------------------------------------------------------------------------
-- locations list --
-----------------------------------------------------------------------------------
export.locations = {
export.continents_group,
export.countries_group,
export.country_like_entities_group,
export.former_countries_group,
export.united_states_group,
export.united_kingdom_group,
export.scotland_group,
export.england_group,
export.northern_ireland_group,
export.ireland_group,
export.wales_group,
export.china_group,
export.china_prefecture_level_cities_group,
export.taiwan_group,
export.canada_group,
export.australia_group,
export.india_group,
export.japan_group,
export.brazil_group,
export.france_group,
export.france_departments_group,
export.germany_group,
export.italy_group,
export.spain_group,
export.austria_group,
export.bangladesh_group,
export.egypt_group,
export.finland_group,
export.greece_group,
export.indonesia_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.norway_group,
export.pakistan_group,
export.philippines_group,
export.poland_group,
export.portugal_group,
export.romania_group,
export.bulgaria_group,
export.iran_group,
export.russia_group,
export.saudi_arabia_group,
export.south_africa_group,
export.laos_group,
export.north_korea_group,
export.south_korea_group,
export.thailand_group,
export.turkey_group,
export.ukraine_group,
export.vietnam_group,
export.nigeria_group,
export.new_york_boroughs_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.united_kingdom_cities_group,
export.united_states_cities_group,
export.vietnam_cities_group,
export.misc_cities_group,
}
return export
tr1ibjufv6auh4fv5ruoqdaxsz7r66i
Module:Place/placetypes
828
3437750
9758127
2026-05-12T23:18:52Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「local export = {} export.force_cat = false -- set to true for testing local m_locations = require("Module:place/locations") local m_links = require("Module:links") local m_table = require("Module:table") local m_strutils = require("Module:string utilities") local debug_track_module = "Module:debug/track" local en_utilities_module = "Module:en-utilities" local dump = mw.dumpObject local insert = table.insert local concat = table.concat loca…」的新頁面
9758127
Scribunto
text/plain
local export = {}
export.force_cat = false -- set to true for testing
local m_locations = require("Module:place/locations")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_strutils = require("Module:string utilities")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local internal_error = m_locations.internal_error
export.internal_error = internal_error
local process_error = m_locations.process_error
export.process_error = process_error
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local ucfirst = m_strutils.ucfirst
local ulower = m_strutils.lower
local rmatch = m_strutils.match
local split = m_strutils.split
--[==[ intro:
This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code
to work with both placetypes and locations, as well as some placename-related info (FIXM誒話:Consider moving it to
[[Module:place/locations]]). See also [[Module:place/locations]], which has definitions of all known locations. You must
currently load this module using {{cd|require()}}, not using {{cd|mw.loadData()}}。
In particular, it contains two fundamental and tricky functions:
# `get_placetype_equivs`, which finds the equivalent placetypes to look under in order to find a given property, and in
the process correctly handles placetypes with qualifiers (including qualifiers that act similar to "type-raising"
operators in that they do something non-trivial to the placetype to their right) as well as form-of directives and
fallbacks.
# `find_matching_holonym_location`, which looks up a holonym to find a matching known location, but in the process
checks holonyms to the right to make sure there isn't a clash between the user-specified containing holonyms and the
containers of the known location being considered. This is done to prevent overcategorizing when either there are two
known locations with the same name (e.g. Birmingham in England and Birmingham, Alabama in the US), or more generally
two locations with the same name, one of which is a known location but where the other is not (e.g. we're processing
non-known-location Mérida, Spain and don't want it categorized like known location Mérida, Yucatán, Mexico).
Both of these functions are invoked repeatedly, and probably are invoked several times on the same inputs and as a
result are candidates for memoization to speed up the operation of {{tl|place}}。
]==]
------------------------------------------------------------------------------------------
-- Basic utilities --
------------------------------------------------------------------------------------------
--[==[
Return true if `force_cat` is set either in this module or in [[Module:place/locations]].
]==]
function export.get_force_cat()
return export.force_cat or m_locations.force_cat
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
function export.remove_links_and_html(text)
text = m_links.remove_links(text)
return text:gsub("<.->", "")
end
--[==[
Return the singular version of a maybe-plural placetype, or nil if not plural. This correctly handles placetypes with
irregular plurals such as `kibbutzim` plural of `kibbutz` by looking up in a table constructed from the `plural` values
specified in `placetype_data`. If a special plural value is not found, the regular singularization algorithm in
[[Module:en-utilities]] is invoked, which reverses the y -> ies change after vowels and the 'es' addition after sh/ch/x,
and otherwise just subtracts a final 's' (which will incorrectly generate 'passe' for plural 'passes'; FIXM誒話:consider
changing this for words ending in '-sses'). If the generated singular is the same as the passed-in value, nil is
returned.
]==]
function export.maybe_singularize_placetype(placetype)
if not placetype then
return nil
end
if export.plural_placetype_to_singular[placetype] then
return export.plural_placetype_to_singular[placetype]
end
local retval = require(en_utilities_module).singularize(placetype)
if retval == placetype then
return nil
end
return retval
end
-- Return the correct plural of a placetype, and (if `do_ucfirst` is given) make the first letter uppercase. We first
-- look up the plural in `placetype_data`, falling back to pluralize() in [[Module:en-utilities]], which is almost
-- always correct.
function export.pluralize_placetype(placetype, do_ucfirst)
local ptdata = export.placetype_data[placetype]
if ptdata and ptdata.plural then
placetype = ptdata.plural
else
placetype = require(en_utilities_module).pluralize(placetype)
end
if do_ucfirst then
return ucfirst(placetype)
else
return placetype
end
end
--[==[
Get the data associated with a placetype, which may be in its singular or plural form. If `from_category` is specified,
we also look for category-only placetypes (generally plural) followed by `!`. Return three values: (a) the placetype
under which the data can be looked up (i.e. in its singular form if the passed-in `placetype` is plural and did not
match a category-only placetype followed by `!`); (b) the placetype data structure; (c) the type of `placetype` match
that occurred, one of `"direct"` if the canonical placetype is the same as the passed-in `placetype` and also the same
as the key under which `ptdata` was looked up, or `"direct-category"` if the `ptdata` was looked up under a key formed
from the passed-in `placetype` by adding `!`, or `"plural"` if the `ptdata` was looked up under the singularized version
of the plural passed-in `placetype`.
]==]
function export.get_placetype_data(placetype, from_category)
local ptdata = export.placetype_data[placetype]
if ptdata then
return placetype, ptdata, "direct"
end
if from_category then
ptdata = export.placetype_data[placetype .. "!"]
if ptdata then
return placetype .. "!", ptdata, "direct-category"
end
end
local sg_placetype = export.maybe_singularize_placetype(placetype)
if sg_placetype then
ptdata = export.placetype_data[sg_placetype]
if ptdata then
return sg_placetype, ptdata, "plural"
end
end
return nil
end
--[==[
Check for special pseudo-placetypes that should be ignored for categorization purposes.
]==]
function export.placetype_is_ignorable(placetype)
return placetype == "and" or placetype == "or" or placetype:find("^%(")
end
function export.resolve_placetype_aliases(placetype)
return export.placetype_aliases[placetype] or placetype
end
--[==[
Return a property from `placetype_data` for a given placetype. If the placetype isn't found in `placetype_data`, or the
key isn't found in the placetype's entry in `placetype_data`, return nil.
]==]
function export.get_placetype_prop(placetype, key)
-- Usually we are called on equivalent placetypes returned from `get_placetype_equivs`, in which case placetype
-- aliases have been resolved, but sometimes not, e.g. when fetching the indefinite article in
-- get_placetype_article(). `resolve_placetype_aliases` is just a simple lookup and it doesn't hurt to do it twice.
placetype = export.resolve_placetype_aliases(placetype)
if export.placetype_data[placetype] then
return export.placetype_data[placetype][key]
else
return nil
end
end
--[==[
Given a placetype, split the placetype into one or more potential ''splits'', each consisting of a three-element list
{ {``prev_qualifiers``, ``this_qualifier``, ``reduced_placetype``}}, i.e.
# the concatenation of zero or more previously-recognized qualifiers on the left, normally canonicalized (if there are
zero such qualifiers, the value will be nil);
# a single recognized qualifier, normally canonicalized (if there is no qualifier, the value will be nil);
# the "reduced placetype" on the right.
Splitting between the qualifier in (2) and the reduced placetype in (3) happens at each space character, proceeding from
left to right, and stops if a qualifier isn't recognized. All placetypes are canonicalized by checking for aliases
in `placetype_aliases`, but no other checks are made as to whether the reduced placetype is recognized. Canonicalization
of qualifiers does not happen if `no_canon_qualifiers` is specified.
For example, given the placetype `"small beachside unincorporated community"`, the return value will be
{ {
{nil, nil, "small beachside unincorporated community"},
{nil, "small", "beachside unincorporated community"},
{"small", "[[beachfront]]", "unincorporated community"},
{"small [[beachfront]]", "[[unincorporated]]", "community"},
}}
Here, `"beachside"` is canonicalized to `"[[beachfront]]"` and `"unincorporated"` is canonicalized to
`"[[unincorporated]]"`, in both cases according to the entry in `placetype_qualifiers`.
On the other hand, if given `"small former haunted community"`, the return value will be
{ {
{nil, nil, "small former haunted community"},
{nil, "small", "former haunted community"},
{"small", "former", "haunted community"},
}}
because `"small"` and `"former"` but not `"haunted"` are recognized as qualifiers.
Finally, if given `"former adr"`, the return value will be
{ {
{nil, nil, "former adr"},
{nil, "former", "administrative region"},
}}
because `"adr"` is a recognized placetype alias for `"administrative region"`.
]==]
function export.split_qualifiers_from_placetype(placetype, no_canon_qualifiers)
local splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
local prev_qualifier = nil
while true do
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if canon == nil then
break
end
local new_qualifier = qualifier
if type(canon) == "table" then
canon = canon.link
end
if not no_canon_qualifiers and canon ~= false then
if canon == true then
new_qualifier = "[[" .. qualifier .. "]]"
else
new_qualifier = canon
end
end
insert(splits, {prev_qualifier, new_qualifier, export.resolve_placetype_aliases(reduced_placetype)})
prev_qualifier = prev_qualifier and prev_qualifier .. " " .. new_qualifier or new_qualifier
placetype = reduced_placetype
else
break
end
end
return splits
end
--[==[
Given a `placetype` (which may be pluralized), return an ordered list of equivalent placetypes to look under to find the
placetype's properties (such as the category or categories to be inserted). The return value is actually an ordered list
of objects of the form `{qualifier=``qualifier``, placetype=``equiv_placetype``}` where ``equiv_placetype`` is a
placetype whose properties to look up, derived from the passed-in placetype or from a contiguous subsequence of the
words in the passed-in placetype (always including the rightmost word in the placetype, i.e. we successively chop off
qualifier words from the left and use the remainder to find equivalent placetypes). ``qualifier`` is the remaining words
not part of the subsequence used to find ``equiv_placetype``; or nil if all words in the passed-in placetype were used
to find ``equiv_placetype``. (FIXM誒話:This qualifier is not currently used anywhere.) Only placetypes for which there is
an entry in `placetype_data` are included. The placetype passed in is always checked first, and will form the first
entry if it exists in `placetype_data`.
'''NOT誒話:''' This is a tricky function as it implements handling of (a) qualifiers, (b) fallback logic, (c)
"type-raising" qualifiers such as `former`/`ancient`/etc. as well as `fictional` and `mythological`, and (d) form-of
directives, which act somewhat similarly to `former`, and allows interaction between more than one of these
simultaneously (e.g. official names of former places, which have their own categorization).
If {{tl|place}} gets too slow, one potential speedup is to memoize the results of this function, as it appears to be
getting called more than once on the same inputs. Another similar potential speedup is to memoize the results of
`iterate_matching_holonym_location()`.
For example, given the placetype `left tributary`, the following placetype/qualifier combinations are checked in turn:
```
{qualifier = nil, placetype="left tributary"}
{qualifier = "left", placetype="tributary"}
{qualifier = "left", placetype="river"}
```
and the return value will be
{ {
{qualifier = "left", placetype="tributary"},
{qualifier = "left", placetype="river"},
}}
The algorithm first enters the placetype itself into the list, then checks for `left tributary` as a recognized
placetype in `placetype_data` and doesn't find it, so it doesn't enter it into the returned list (if it found it, it
would add it as well as any fallbacks directly after it). It then splits off the recognized qualifier `left` to form the
''reduced placetype'' `tributary`, which is entered into the list because it is found in `placetype_data`. Then, because
it has a fallback `river`, which exists in `placetype_data`, the fallback is entered next.
Another example is `small rural fraziones` (where a ''frazione'' is type of subdivision of a ''comune'' or municipality,
often specifically an outlying hamlet). the placetype/qualifier combinations checked are:
```
{qualifier = nil, placetype="small rural fraziones"}
{qualifier = nil, placetype="small rural frazione"}
{qualifier = "small", placetype="rural fraziones"}
{qualifier = "small", placetype="rural frazione"}
{qualifier = "small [[rural]]", placetype="fraziones"}
{qualifier = "small [[rural]]", placetype="frazione"}
{qualifier = "small [[rural]]", placetype="hamlet"}
{qualifier = "small [[rural]]", placetype="village"}
```
The return value ends up as
{qualifier = "small [[rural]]", placetype="frazione"},
{qualifier = "small [[rural]]", placetype="hamlet"},
{qualifier = "small [[rural]]", placetype="village"},
}}
Here, because the result of singularizing `fraziones` returns a different value from the placetype itself, that
singularized value is checked after the original plural value. Also, in the process of splitting off qualifiers,
they are canonicalized if the entry in `placetype_qualifiers` says to do so; in this case, links are placed around
`rural`. Finally, `frazione` has `hamlet` as its fallback, which in turn has `village` as its fallback, so both
fallbacks end up being returned.
`no_fallback`, if set, disables returning equivalent placetypes based on the `fallback` setting for a placetype. This is
used in the first of two loops in find_placetype_cat_specs() in [[Module:place]] to prefer exact matches for placetypes
such as barangays with later holonyms to matches based on a fallback such as `neighborhood` with an earlier holonym.
See the comment in that function in [[Module:place]] for a more detailed explanation of why this is needed. Only the
placetype itself, and any reduced placetypes created by chopping off recognized qualifiers at the beginning, are
returned; but we do not return reduced placetypes if a containing placetype exists in `placetype_data`. (For example,
`"overseas territory"` has a fallback `"dependent territory"`, and `"overseas"` is also a recognized qualifier. When
`no_fallback` is in place, without the above proviso, we would return `"overseas territory"` followed by `"territory"`
with the incorrect effect of classifying an `"overseas territory"` of the United Kingdom such as `"Gibraltar"` under
[[:Category:Territories of the United Kingdom]] instead of [[:Category:Dependent territories of the United Kingdom]].)
As an exception, if `historical`, `ancient`, `former` or the like are found, they proceed ignoring `no_fallback`,
because it seems tricky to handle them correctly in the presence of `no_fallback`, and historical/former placetypes
rarely occur with exact match category specs anyway.
`no_split_qualifiers` prevents splitting off recognized qualifiers and returning the remainder of the placetype as an
equivalent placetype. Only the passed-in placetype, and any fallbacks, will be returned. This is used in
[[Module:category tree/topic cat/data/Places]] when looking up placetypes found in categories. Such placetypes won't
have qualifiers and so it doesn't make sense to try and look for them.
`from_category`, if set, causes category-only placetypes (those ending in `!`) to also be checked.
`form_of_directive`, if set, causes the specified form-of directive (e.g. `FORMER_NAME_OF`) to be prepended to checked
placetypes, their directive-specific type (e.g. `FORMER_NAME_OF_type`), and their classes (`class`) to get the
appropriate placetypes to check for form-of-directive categories. It falls back to the prepended generic `place` as a
placetype, e.g. `FORMER_NAME_OF place`, if nothing else matches.
`no_check_for_inherently_former` is used internally to prevent an infinite loop when checking for `inherently_former`.
`register_former_as_non_former` is a major hack used in `get_bare_categories` to deal with the mismatch between e.g.
known location `Yugoslavia` declaring itself a `country` but definitions of it declaring it a `former country`. It
causes the non-former version of the specified placetype to be included in the returned equivalents along with the
former placetypes. [FIXM誒話:This should apply only to the entries in `former_countries` but it's tricky to do that now;
fix this in the known-location refactor. -- The known-location refactor is already done but we haven't yet fixed this.]
]==]
function export.get_placetype_equivs(placetype, props)
local no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former
local form_of_directive
if props then
no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former =
props.no_fallback, props.no_split_qualifiers, props.no_check_for_inherently_former, props.from_category,
props.register_former_as_non_former
form_of_directive = props.form_of_directive
end
local equivs = {}
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. `qualifier` is
-- the preceding qualifier to insert into `equivs` along with the placetype (see comment at top of function). If
-- `from_category` is given, we also check for a category-specific entry consisting of the placetype followed by
-- `!`, and in all cases we also check to see if `placetype` is plural, and if so, insert the singularized version
-- along with its fallbacks (if any) in `placetype_data`. `form_of_prefix` is a form-of prefix such as
-- `OFFICIAL_NAME_OF`. If specified, we check the fallbacks of `placetype` without the prefix but then insert into
-- `equivs` the prefixed placetype. This way, if the user says e.g. {{tl|place|pt|@official name of:Cuba|島國|r/加勒比海}},
-- we will correctly categorize into [[:Category:Official names of countries]], rather than only trying to look up
-- `OFFICIAL_NAME_OF island country` and failing, falling back ultimately to [[:Category:Official names of places]].
local function insert_placetype_and_fallbacks(qualifier, placetype, form_of_prefix)
local function insert_equiv(pt)
if form_of_prefix then
-- Let's say the user says {{tl|place|pt|@official name of:Cuba|島國|r/加勒比海}} and we have
-- no entry for `OFFICIAL_NAME_OF island country` but we do for `OFFICIAL_NAME_OF country` (which we end
-- up processing because `island country` falls back to `country`), and that entry in turn is defined
-- using a fallback. We have to insert that fallback-of-fallback, and the easiest/cleanest way of
-- handling this is by calling ourselves recursively.
insert_placetype_and_fallbacks(qualifier, form_of_prefix .. " " .. pt)
else
insert(equivs, {qualifier=qualifier, placetype=pt})
end
end
-- Insert the placetype, along with any fallbacks.
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if ptdata then
insert_equiv(canon_placetype)
if no_fallback then
return
end
local first_placetype = #equivs + 1
local prev_placetype = nil
while true do
local pt_value = export.placetype_data[canon_placetype]
if not pt_value then
internal_error("Fallback value %s specified for placetype %s but is not in `placetype_data`",
canon_placetype, prev_placetype)
end
if pt_value.fallback then
insert_equiv(pt_value.fallback)
local last_placetype = #equivs
if last_placetype - first_placetype >= 10 then
local fallback_loop = {}
for i = first_placetype, last_placetype do
insert(fallback_loop, equivs[i].placetype)
end
internal_error("Apparent loop in fallback chain: %s", table.concat(fallback_loop, " -> "))
end
prev_placetype = canon_placetype
canon_placetype = pt_value.fallback
else
break
end
end
end
end
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. This is a
-- wrapper around the more basic `insert_placetype_and_fallbacks()` which handles form-of directives. If there is no
-- form-of directive, this function directly calls `insert_placetype_and_fallbacks()`. We do things this way so that
-- form-of directives correctly combine with `former`-type qualifiers. Note that we also have special backups for
-- form-of directives that check `DIRECTIVE place` (and before that, `DIRECTIVE FORMER/ANCIENT place` is there's a
-- `former`-type directive); these backups live outside this function because we want them done once, late, rather
-- than in each invocation of `process_and_insert_placetype()`.
local function process_and_insert_placetype(qualifier, reduced_placetype)
if form_of_directive then
-- First check for e.g. `OFFICIAL_NAME_OF island country` and its fallbacks; then we look for fallbacks of
-- `island country` and check e.g. `OFFICIAL_NAME_OF country` and its fallbacks. All of this is handled by
-- `insert_placetype_and_fallbacks()` with appropriate parameters. After that, check the general class of
-- the directive, e.g. `subpolity` if something like `district` is given. (Eventually, we check for
-- `OFFICIAL_NAME_OF place` as a backup, but this happens at the end outside the loop over qualifiers.)
insert_placetype_and_fallbacks(qualifier, reduced_placetype, form_of_directive)
if not no_fallback then
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype)
local directive_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, form_of_directive .. "_type") or
export.get_placetype_prop(pt, "class") end
)
if not directive_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s in conjunction with form-of directive %s, placetype data " ..
'located but directive-specific type property %s missing, and so is "class"; ' ..
"placetypes searched are %s", reduced_placetype, form_of_directive,
form_of_directive .. "_type", reduced_placetype_equivs)
else
-- This should be allowed, as we allow unrecognized placetypes in general.
end
elseif directive_type ~= "!" then
insert_placetype_and_fallbacks(qualifier, directive_type, form_of_directive)
end
end
else
insert_placetype_and_fallbacks(qualifier, reduced_placetype)
end
end
-- Successively split off recognized qualifiers and loop over successively greater sets of qualifiers from the left
-- (unless `no_split_qualifiers` is specified, in which case we don't check for qualifiers).
local splits
if no_split_qualifiers then
splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
else
splits = export.split_qualifiers_from_placetype(placetype)
end
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, reduced_placetype = unpack(split, 1, 3)
-- If a special "former" qualifier like `former` or `historical` isn't present, and
-- `no_check_for_inherently_former` is not given (this flag is used to avoid infinite loops), check for
-- "inherently former" placetypes like `satrapy` and `treaty port` that always refer to no-longer-existing
-- placetypes, and handle accordingly.
local unlinked_this_qualifier
if this_qualifier and this_qualifier:find("%[") then
unlinked_this_qualifier = export.remove_links_and_html(this_qualifier)
else
unlinked_this_qualifier = this_qualifier
end
local former_qualifiers = this_qualifier and export.former_qualifiers[unlinked_this_qualifier] or nil
if not former_qualifiers and not no_check_for_inherently_former then
former_qualifiers = export.get_equiv_placetype_prop(reduced_placetype,
function(pt) return export.get_placetype_prop(pt, "inherently_former") end,
{no_check_for_inherently_former = true})
end
-- If a special "former" qualifier like `former` or `historical` is present, map it to the appropriate internal
-- qualifiers (`ANCIENT` 和/或`FORMER`, which are written in all-caps to distinguish them from user-specified
-- qualifiers), fetch the `former_type` property, and treat the placetype as if a concatenation of the mapped
-- qualifier(s) and the value of `former_type`. For example, if `medieval village` is given, we map `medieval`
-- to `ANCIENT` and `FORMER`, and `village` to its `former_type` of `settlement`, and enter the placetypes
-- `ANCIENT settlement` and `FORMER settlement` (in that order) into `equivs`. If the placetype following the
-- "former" qualifier is recognized in `placetype_data` but has no `former_type` and no fallback with a
-- `former_type` specified, it is an internal error; but if the placetype isn't recognized (e.g. something like
-- `former greenhouse` is specified and we don't have an entry for `greenhouse`), just track the occurrence and
-- don't enter anything into `equivs`.
if former_qualifiers then
-- FIXM誒話:Should we respect `no_fallback` here? My instinct says no.
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype, {
no_check_for_inherently_former = true
})
local former_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, "former_type") or
export.get_placetype_prop(pt, "class") end
)
if not former_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s, placetype data located but `former_type` missing; " ..
"placetypes searched are %s", reduced_placetype, reduced_placetype_equivs)
else
-- Enable error when we've verified there aren't any examples.
track("bad-former-placetype")
track("bad-former-placetype/" .. reduced_placetype)
--process_error("For placetype '%s', unrecognized placetype following 'former'-type " ..
-- "qualifier; searched placetype(s) %s", reduced_placetype, dump(reduced_placetype_equivs))
end
elseif former_type ~= "!" then
-- First check directly for `ANCIENT/FORMER` + the original following placetype. This makes it possible
-- for (e.g.) former provinces of the Roman empire to be categorized specially.
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. reduced_placetype)
end
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. former_type)
end
-- HACK! See explanation above for `register_former_as_non_former`.
if register_former_as_non_former then
process_and_insert_placetype(prev_qualifier, reduced_placetype)
end
-- If we're processing a form-of directive, after doing everything else we do
-- `DIRECTIVE ANCIENT/FORMER place` e.g. `OFFICIAL_NAME_OF FORMER place` as a backup.
if form_of_directive and not no_fallback then
for _, former_qualifier in ipairs(former_qualifiers) do
insert_placetype_and_fallbacks(prev_qualifier, form_of_directive .. " " .. former_qualifier ..
" place")
end
end
-- Don't continue processing equivs. The reason is probably the same as the `break` below for
-- qualifier_to_placetype_equivs[]; categories for `former BLAH` are set using `default`, and
-- non-former equivs will otherwise take precedence.
break
end
end
-- Then see if the rightmost split-off qualifier is in qualifier_to_placetype_equivs
-- (e.g. 'fictional *' -> 'fictional location'). If so, add the mapping.
if this_qualifier and export.qualifier_to_placetype_equivs[unlinked_this_qualifier] then
insert(equivs, {
qualifier=prev_qualifier,
placetype=export.qualifier_to_placetype_equivs[unlinked_this_qualifier]
})
-- Don't continue processing equivs; otherwise, if we specify 'mythological city', even though the
-- equivalent entry for 'mythological location' gets inserted ahead of the entry for 'city', the
-- latter ends up generating the category because the category for 'mythological location' is set as
-- the default value, which is used only when no non-default category can be found.
break
end
-- Finally, join the rightmost split-off qualifier to the previously split-off qualifiers to form a combined
-- qualifier, and add it along with reduced_placetype and any mapping in placetype_data for reduced_placetype.
-- NOT誒話:The first time through this loop, both `prev_qualifier` and `this_qualifier` are nil, and this inserts
-- the full placetype into `equivs`.
local qualifier = prev_qualifier and prev_qualifier .. " " .. this_qualifier or this_qualifier
process_and_insert_placetype(qualifier, reduced_placetype)
-- If `no_fallback` and there's an entry in `placetype_data` for this placetype, don't include any reduced
-- placetypes to avoid the "overseas territory treated as a territory" issue describe above.
if no_fallback then
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(reduced_placetype, from_category)
if canon_placetype then
break
end
end
end
-- If we're processing a form-of directive, after doing everything else we do `DIRECTIVE place` e.g.
-- `OFFICIAL_NAME_OF place` as a backup; but only if either the placetype as a whole is recognized or the placetype
-- begins with a recognized qualifier. This latter check is to avoid categorizing into e.g.
-- {{C|en|Former names of places}} in an invocation like
-- {{place|en|@former name of:Democratic Republic of the Congo|國家|r/中非|;|used from 1971–1997}};
-- the `used from 1971–1997` gets treated as a placetype and we're called on it.
if form_of_directive and not no_fallback and (splits[2] or export.get_placetype_data(placetype, from_category)) then
insert_placetype_and_fallbacks(nil, form_of_directive .. " place")
end
return equivs
end
function export.get_equiv_placetype_prop_from_equivs(equivs, fun, continue_on_nil_only)
for _, equiv in ipairs(equivs) do
local retval = fun(equiv.placetype)
if continue_on_nil_only and retval ~= nil or not continue_on_nil_only and retval then
return retval, equiv
end
end
return nil, nil
end
--[==[
Given a placetype `placetype` and a function `fun` of one argument, iteratively call the function on equivalent
placetypes fetched from `get_placetype_equivs` until the function returns a non-falsy value (i.e. not {nil} or {false});
but if `continue_on_nil_only` is specified, the iterations continue until the function returns non non-{nil} value.
FIXM誒話:We should make `continue_on_nil_only` the default; but this requires changing some callers.) When `fun` returns a
non-falsy or non-{nil} value, `get_equiv_placetype_prop` returns two values: the value returned by `fun` and the
equivalent placetype that triggered the non-falsy (or non-{nil}) return value. If `fun` never returns a non-falsy (or
non-{nil}) value, `get_equiv_placetype_prop` returns {nil} for both return values. If `placetype` is passed in as {nil},
the return value is the result of calling `fun` on {nil} (whatever it is) with {nil} for the second return value.
]==]
function export.get_equiv_placetype_prop(placetype, fun, props)
if not placetype then
return fun(nil), nil
end
return export.get_equiv_placetype_prop_from_equivs(export.get_placetype_equivs(placetype, props), fun,
props and props.continue_on_nil_only)
end
--[==[
Return the article that is used with an entry placetype. We proceed as follows:
# See if there is a recognized qualifier at the beginning that specifies an article (including `false` for no article).
This takes precedence over anything else, so that e.g. `various capitals` gets no article rather than "`the"`.
# Then check the placetype or any equivalent placetype for the `entry_placetype_use_the` property, indicating that
`"the"` should be used.
# Otherwise we look to see if the placetype itself (not any equivalents, even those involving deleting a qualifier from
the beginning) has an entry in `placetype_data` that specifies the indefinite article using `entry_placetype_use_the`
(principally for use with placetypes like `union territory`).
# Otherwise, we use [[Module:en-utilities]] to apply the standard algorithm to generate `"an"` for words beginning with
a vowel and `"a"` otherwise.
If `ucfirst` is true, the first letter of the article is made upper-case.
]==]
function export.get_placetype_article(placetype, ucfirst)
local art
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if type(canon) == "table" then
art = canon.article
end
end
if art == false then
return art
end
if art == nil then
local placetype_use_the = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "entry_placetype_use_the") end)
if placetype_use_the then
art = "the"
else
art = export.get_placetype_prop(placetype, "entry_placetype_indefinite_article")
if not art then
art = require(en_utilities_module).get_indefinite_article(placetype)
end
end
end
if ucfirst then
art = m_strutils.ucfirst(art)
end
return art
end
--[==[
Return the preposition that should be used after `placetype` when occurring as an entry placetype or in categories
(e.g. `city >in< France` but `country >of< South America`). The preposition defaults to `"in"` if not specified.
]==]
function export.get_placetype_entry_preposition(placetype)
local pt_prep = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "preposition") end
)
return pt_prep or "in"
end
--[==[
Given a place desc (see top of file) and a holonym object (see top of file), add a key/value into the place desc's
`holonyms_by_placetype` field corresponding to the placetype and placename of the holonym. For example, corresponding
to the holonym "c/Italy", a key "country" with the list value {"Italy"} will be added to the place desc's
`holonyms_by_placetype` field. If there is already a key with that place type, the new placename will be added to the
end of the value's list.
]==]
function export.key_holonym_into_place_desc(place_desc, holonym)
if not holonym.placetype then
return
end
-- Key in equivalent placetypes, so that e.g. `cities/San Francisco` gets keyed under `city`; but don't do
-- fallbacks, as it doesn't seem correct for the "do other holonyms of the same placetype" algorithm to do holonyms
-- of different types just because they have the same fallback.
local equiv_placetypes = export.get_placetype_equivs(holonym.placetype, {no_fallback = true})
local unlinked_placename = holonym.unlinked_placename
for _, equiv in ipairs(equiv_placetypes) do
local placetype = equiv.placetype
if not place_desc.holonyms_by_placetype then
place_desc.holonyms_by_placetype = {}
end
if not place_desc.holonyms_by_placetype[placetype] then
place_desc.holonyms_by_placetype[placetype] = {unlinked_placename}
else
insert(place_desc.holonyms_by_placetype[placetype], unlinked_placename)
end
end
end
--[=[
Construct a formatted link from the raw link spec `link` given the canonical singular placetype `sg_placetype`. If the
placetype was originally plural, `orig_placetype` should contain this plural value; otherwise it should be nil. This
will construct the appropriate type of link that displays as `orig_placetype` (or otherwise `sg_placetype`) but links to
whatever the `link` spec specifies (which may be `sg_placetype`, a Wikipedia article, etc.). `ptdata` is the placetype
data structure for the placetype, and `from_category` indicates that we are generating the description of a category
(otherwise we are generating the display form of an entry placetype).
]=]
local function make_placetype_link(link, sg_placetype, orig_placetype, ptdata, from_category, noerror)
if not from_category and ptdata.disallow_in_entries then
if noerror then
return "[not meant to be specified directly, with warning: " .. ptdata.disallow_in_entries .. "]"
else
process_error("Placetype %s is not meant to be specified directly: " .. ptdata.disallow_in_entries, sg_placetype)
end
end
if link == nil then
internal_error("Placetype data present for placetype %s but no link= setting given", sg_placetype)
elseif link == true then
if orig_placetype then
return ("[[%s|%s]]"):format(sg_placetype, orig_placetype)
else
return ("[[%s]]"):format(sg_placetype)
end
elseif link == false then
process_error("Placetype %s is not meant to be specified directly, but is only for internal use", sg_placetype)
elseif link == "w" then
return ("[[w:%s|%s]]"):format(sg_placetype, orig_placetype or sg_placetype)
elseif link == "separately" then
if orig_placetype then
local sg_words = split(sg_placetype, " ")
local orig_words = split(orig_placetype, " ")
if #sg_words ~= #orig_words then
internal_error("Can't construct 'separately' link for plural placetype %s as original placetype %s " ..
"has different number of words", orig_placetype, sg_placetype)
else
for i = 1, #sg_words do
if sg_words[i] == orig_words[i] then
sg_words[i] = ("[[%s]]"):format(sg_words[i])
else
sg_words[i] = ("[[%s|%s]]"):format(sg_words[i], orig_words[i])
end
end
return concat(sg_words, " ")
end
else
return (sg_placetype:gsub("([^ ]+)", "[[%1]]"))
end
elseif link:find("^%+") then
link = link:sub(2) -- discard initial +
return ("[[%s|%s]]"):format(link, orig_placetype or sg_placetype)
elseif not orig_placetype then
return link
else
return require(en_utilities_module).pluralize(link)
end
end
--[==[
Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the
plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying
as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description
of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like
[[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or
`"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description
for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with
special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the
"full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is
prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be
disallowed.
]==]
function export.get_placetype_display_form(placetype, category_type, return_full, noerror)
local from_category = not not category_type
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if canon_placetype then
local raw_link
local function is_linked_string(str)
return type(str) == "string" and str:find("%[%[")
end
if category_type then
local fetched_full
local function fetch_maybe_full(prop)
local retval = ptdata["full_" .. prop]
if retval ~= nil then
if return_full then
return retval, true
else
internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval)
end
end
return ptdata[prop], false
end
local function maybe_prefix(str)
if return_full and not fetched_full then
return "names of " .. str
else
return str
end
end
-- Careful with `false` as possible value.
if category_type == "top-level" then
raw_link, fetched_full = fetch_maybe_full("category_link_top_level")
elseif category_type == "noncity" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity")
elseif category_type == "city" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_city")
else
internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"',
category_type)
end
if type(raw_link) == "string" then
return maybe_prefix(raw_link), ptdata
elseif raw_link ~= nil then
return raw_link, ptdata
end
raw_link, fetched_full = fetch_maybe_full("category_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
if ptmatch == "plural" then
raw_link, fetched_full = fetch_maybe_full("plural_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
end
if raw_link == nil then
raw_link, fetched_full = fetch_maybe_full("link")
end
if raw_link == false then
return raw_link, ptdata
end
return maybe_prefix(make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata
else
if ptmatch == "plural" then
raw_link = ptdata.plural_link
if raw_link == false then
process_error("Placetype %s cannot appear plural", placetype)
end
if is_linked_string(raw_link) then
return raw_link, ptdata
end
end
if raw_link == nil then
raw_link = ptdata.link
end
return make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata
end
end
return nil
end
local function resolve_unlinked_placename_display_aliases(placetype, placename)
local equiv_placetypes = export.get_placetype_equivs(placetype)
for i, equiv in ipairs(equiv_placetypes) do
equiv_placetypes[i] = equiv.placetype
end
local all_display_aliases_found = {}
local all_others_found = {}
for group, key, spec in m_locations.iterate_matching_location {
placetypes = equiv_placetypes,
placename = placename,
alias_resolution = "display",
} do
if spec.alias_of and spec.display then
insert(all_display_aliases_found, {group, key, spec, spec.display_as_full})
else
insert(all_others_found, {group, key, spec})
end
end
if not all_display_aliases_found[1] then
return placename
elseif all_display_aliases_found[2] then
internal_error("Found multiple matching display aliases for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
elseif all_others_found[1] then
internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
else
local group, key, spec, as_full = unpack(all_display_aliases_found[1])
local full, elliptical = m_locations.key_to_placename(group, key)
return as_full and full or elliptical
end
end
--[==[
If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged.
Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`,
`country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as
`United States`.
'''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they
should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed.
For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to
`Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political
connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!)
to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two
terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to
`North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly
display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve
alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and
consistency.
]==]
function export.resolve_placename_display_aliases(placetype, placename)
-- If the placename is a link, apply the alias inside the link.
-- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will
-- be empty.
local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$")
if link then
if linktext ~= "" then
local alias = resolve_unlinked_placename_display_aliases(placetype, linktext)
return "[[" .. link .. "|" .. alias .. "]]"
else
local alias = resolve_unlinked_placename_display_aliases(placetype, link)
return "[[" .. alias .. "]]"
end
else
return resolve_unlinked_placename_display_aliases(placetype, placename)
end
end
--[==[
Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key.
]==]
function export.get_prefixed_key(key, spec)
if spec.the then
return "the " .. key
else
return key
end
end
-- Necessary for use by [[Module:place]]. FIXM誒話:Reorganize the模塊 so this isn't necessary.
export.iterate_matching_location = m_locations.iterate_matching_location
--[=[
Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the
specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If
`first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is
specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified
by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the
holonym index and holonym structure, similar to `ipairs()`.
]=]
function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms)
local stop_at_also = not not first_holonym_index
return function(place_desc, index)
while true do
index = index + 1
local this_holonym = place_desc.holonyms[index]
-- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also`
-- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym
-- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with
-- `:also`.
if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then
return nil
end
-- If not placetype, we're processing raw text, which we normally want to skip.
if include_raw_text_holonyms or this_holonym.placetype then
return index, this_holonym
end
end
end, place_desc, first_holonym_index and first_holonym_index - 1 or 0
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all
such known locations, returning for each location the corresponding key, spec and group as well as the trail of
ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between
the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data`
are:
* `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with
`iterate_matching_location()`.
* `holonym_placename`: The placename of the holonym.
* `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the
holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms
following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none
exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.)
* `place_desc`: Description of the place; used for the holonyms, to check for container mismatches.
Returns four values: the location group, the canonical key by which the location is known, the spec object describing
the location and the trail of ancestral containers for the location. The first three values are the same as for
`iterate_matching_location`.
]==]
function export.iterate_matching_holonym_location(data)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
local matching_location_iterator = m_locations.iterate_matching_location {
placetypes = holonym_placetype,
placename = holonym_placename,
}
return function()
while true do
local group, key, spec = matching_location_iterator()
if not group then
return nil
end
local container_trail = {}
-- For each level of container, check that there are no mismatches (i.e. other location of the same
-- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container
-- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city
-- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of
-- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark,
-- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New
-- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough,
-- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If
-- there are no mismatches at any level we assume we're dealing with the right known location.
--
-- If at a given level there are multiple containing locations, we count a match if any holonym matches any
-- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any
-- containing location.
local containers_mismatch = false
for containers in m_locations.iterate_containers(group, key, spec) do
insert(container_trail, containers)
local match_at_level = false
local mismatch_at_level = false
for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc,
holonym_index and holonym_index + 1 or nil) do
local other_source_holonym = other_holonym.augmented_from_holonym
if other_source_holonym and other_source_holonym.placetype == holonym_placetype and
other_source_holonym.unlinked_placename ~= holonym_placename then
-- Ignore holonyms added during the augmentation process for other holonyms of the same
-- placetype as the placetype of the holonym we're considering. See comment in
-- augment_holonyms_with_container() for why we do this.
-- continue; grrr, no 'continue' in Lua
else
local holonym_matches_at_level = false
local holonym_exists_with_same_placetype = false
for _, container in ipairs(containers) do
if not container.spec.no_check_holonym_mismatch then
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
local placetypes = container.spec.placetype
if type(placetypes) ~= "table" then
placetypes = {placetypes}
end
local placetype_equivs = {}
for _, pt in ipairs(placetypes) do
m_table.extend(placetype_equivs, export.get_placetype_equivs(pt))
end
local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype and
(other_holonym.unlinked_placename == full_container_placename or
other_holonym.unlinked_placename == elliptical_container_placename)
end
)
if this_holonym_matches then
holonym_matches_at_level = true
break
end
local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype
end
)
if this_holonym_exists_with_same_placetype then
-- We seem to have a mismatch at this level. But before we decide conclusively that this
-- is the case, check to see whether the putative mismatch is an alias and matches when
-- we resolve the alias.
for oh_group, oh_key, oh_spec, oh_container_trail in
export.iterate_matching_holonym_location {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = place_desc,
} do
local oh_full_placename, oh_elliptical_placename =
m_locations.key_to_placename(oh_group, oh_key)
if oh_full_placename == full_container_placename or
oh_elliptical_placename == elliptical_container_placename then
-- Alias matched when resolved.
this_holonym_matches = true
break
end
end
if this_holonym_matches then
-- Alias matched above when resolved.
holonym_matches_at_level = true
break
else
-- Not an alias, or doesn't match when resolved. We have a true mismatch.
holonym_exists_with_same_placetype = true
end
end
end
end
if holonym_matches_at_level then
match_at_level = true
break
end
if holonym_exists_with_same_placetype then
mismatch_at_level = true
end
end
end
if not match_at_level and mismatch_at_level then
containers_mismatch = true
break
end
end
if not containers_mismatch then
return group, key, spec, container_trail
end
end
end
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the
corresponding key, spec and group as well as the trail of ancestral containers. This is like
`iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this
would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To
fix this, specify additional following disambiguating holonyms, e.g.
{{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}。
]==]
function export.find_matching_holonym_location(data)
local all_found = {}
for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do
insert(all_found, {group, key, spec, container_trail})
end
if not all_found[1] then
return nil
elseif all_found[2] then
local holonym_placetype = data.holonym_placetype
if type(holonym_placetype) == "table" then
holonym_placetype = concat(holonym_placetype, ",")
end
local found_keys = {}
for _, found in ipairs(all_found) do
local _, key, _, _ = unpack(found)
insert(found_keys, key)
end
error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " ..
"containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys)))
else
return unpack(all_found[1])
end
end
------------------------------------------------------------------------------------------
-- Placename and placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their
canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which
applies to categorization and other processes but not to display.
The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state",
"province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g.
"census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype.
Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be
interpreted as "department", "district" or "division").
]==]
export.placetype_aliases = {
["acomm"] = "autonomous community",
["adr"] = "administrative region",
["adterr"] = "administrative territory", -- Pakistan
["aobl"] = "autonomous oblast",
["aokr"] = "autonomous okrug",
["ap"] = "autonomous province",
["apref"] = "autonomous prefecture",
["aprov"] = "autonomous province",
["ar"] = "autonomous region",
["arch"] = "archipelago",
["arep"] = "autonomous republic",
["aterr"] = "autonomous territory",
["atu"] = "autonomous territorial unit",
["bor"] = "borough",
["c"] = "country",
["can"] = "canton",
["carea"] = "council area",
["cc"] = "constituent country",
["cdblock"] = "community development block",
["cdep"] = "Crown dependency",
["CDP"] = "census-designated place",
["cdp"] = "census-designated place",
["clcity"] = "county-level city",
["co"] = "county",
["cobor"] = "county borough",
["colcity"] = "county-level city",
["coll"] = "collectivity",
["comm"] = "community",
["cont"] = "continent",
["contr"] = "continental region",
["contregion"] = "continental region",
["cpar"] = "civil parish",
["damun"] = "direct-administered municipality",
["dep"] = "dependency",
["department capital"] = "departmental capital",
["dept"] = "department",
["depterr"] = "dependent territory",
["dist"] = "district",
["distmun"] = "district municipality",
["div"] = "division",
["emp"] = "empire",
["fpref"] = "French prefecture",
["gov"] = "governorate",
["govnat"] = "governorate",
["home-rule city"] = "home rule city",
["home-rule municipality"] = "home rule municipality",
["inner-city area"] = "inner city area",
["ires"] = "Indian reservation",
["isl"] = "island",
["lbor"] = "London borough",
["lga"] = "local government area",
["lgarea"] = "local government area",
["lgd"] = "local government district",
["lgdist"] = "local government district",
["metbor"] = "metropolitan borough",
["metcity"] = "metropolitan city",
["metmun"] = "metropolitan municipality",
["mtn"] = "mountain",
["mun"] = "municipality",
["mundist"] = "municipal district",
["nonmetropolitan county"] = "non-metropolitan county",
["obl"] = "oblast",
["okr"] = "okrug",
["p"] = "province",
["par"] = "parish",
["parmun"] = "parish municipality",
["pen"] = "peninsula",
["plcity"] = "prefecture-level city",
["plcolony"] = "Polish colony",
["pref"] = "prefecture",
["prefcity"] = "prefecture-level city",
["preflcity"] = "prefecture-level city",
["prov"] = "province",
["r"] = "region",
["range"] = "mountain range",
["rcm"] = "regional county municipality",
["rcomun"] = "regional county municipality",
["rdist"] = "regional district",
["rep"] = "republic",
["rhrom"] = "rural hromada",
["riv"] = "river",
["rmun"] = "regional municipality",
["robor"] = "royal borough",
["romp"] = "Roman province",
["runit"] = "regional unit",
["rurmun"] = "rural municipality",
["s"] = "state",
["sar"] = "special administrative region",
["shrom"] = "settlement hromada",
["spref"] = "subprefecture",
["sprefcity"] = "sub-prefectural city",
["sprovcity"] = "subprovincial city",
["submet city"] = "sub-metropolitan city",
["submetropolitan city"] = "sub-metropolitan city",
["sub-prefecture-level city"] = "sub-prefectural city",
["sub-provincial city"] = "subprovincial city",
["sub-provincial district"] = "subprovincial district",
["terr"] = "territory",
["terrauth"] = "territorial authority",
["twp"] = "township",
["twpmun"] = "township municipality",
["uauth"] = "unitary authority",
["ucomm"] = "unincorporated community",
["udist"] = "unitary district",
["uhrom"] = "urban hromada",
["uterr"] = "union territory",
["utwpmun"] = "united township municipality",
["val"] = "valley",
["vdc"] = "village development committee",
["vil"] = "village",
["voi"] = "voivodeship",
["wcomm"] = "Welsh community",
}
local no_link_def_article = {link = false, article = "the"}
local no_link_no_article = {link = false, article = false}
--[==[ var:
These qualifiers can be prepended onto any placetype and will be handled correctly. For example, the placetype
`large city` will be displayed as `large <nowiki>[[city]]</nowiki>` and categorized as if `city` were specified. If the
value in the following table is a string, the qualifier will display according to the string. If the value is `true`,
the qualifier will be linked to its corresponding Wiktionary entry. If the value is `false`, the qualifier will not be
linked but will appear as-is. Note that these qualifiers do not override placetypes with entries elsewhere that contain
those same qualifiers. For example, the entry for `inland sea` in `placetype_data` will apply in preference to treating
`inland sea` as equivalent to `sea`.
]==]
export.placetype_qualifiers = {
-- generic qualifiers
["huge"] = false,
["tiny"] = false,
["large"] = false,
["big"] = false,
["mid-size"] = false,
["mid-sized"] = false,
["small"] = false,
["sizable"] = false,
["important"] = false,
["long"] = false,
["short"] = false,
["major"] = false,
["minor"] = false,
["high"] = false,
["tall"] = false,
["low"] = false,
["left"] = false, -- left tributary
["right"] = false, -- right tributary
["modern"] = false, -- for use in opposition to "ancient" in another definition
-- "former" qualifiers
["abandoned"] = true,
["ancient"] = true,
["deserted"] = true,
["extinct"] = true,
["former"] = false,
["historic"] = "historical",
["historical"] = true,
["medieval"] = true,
["mediaeval"] = true,
["ruined"] = true,
["traditional"] = true,
-- sea qualifiers
["coastal"] = true,
["inland"] = true, -- note, we also have an entry in placetype_data for 'inland sea' to get a link to [[inland sea]]
["maritime"] = true,
["overseas"] = true,
["seaside"] = true,
["beachfront"] = true,
["beachside"] = true,
["riverside"] = true,
-- lake qualifiers
["freshwater"] = true,
["saltwater"] = true,
["endorheic"] = true,
["oxbow"] = true,
["ox-bow"] = "[[oxbow]]", -- [[ox-bow]] is a red link
["tidal"] = true,
-- land qualifiers
["hilltop"] = true,
["hilly"] = true,
["insular"] = true,
["peninsular"] = true,
["chalk"] = true,
["karst"] = true,
["limestone"] = true,
["mountainous"] = true,
["mountaintop"] = true,
["alpine"] = true,
["volcanic"] = true, -- for an island
-- political status qualifiers
["autonomous"] = true,
["incorporated"] = true,
["special"] = true,
["unincorporated"] = true,
["coterminous"] = true,
-- monetary status/etc. qualifiers
["fashionable"] = true,
["wealthy"] = true,
["affluent"] = true,
["declining"] = true,
-- city vs. rural qualifiers
["urban"] = true,
["suburban"] = true,
["exurban"] = true,
["outlying"] = true,
["remote"] = true,
["rural"] = true,
["outback"] = true,
["inner"] = false,
["inner-city"] = true,
["central"] = false,
["outer"] = false,
-- land use qualifiers
["residential"] = true,
["agricultural"] = true,
["business"] = true,
["commercial"] = true,
["industrial"] = true,
-- business use qualifiers
["railroad"] = true,
["railway"] = true,
["farming"] = true,
["fishing"] = true,
["mining"] = true,
["logging"] = true,
["cattle"] = true,
-- tourism use qualifiers
["resort"] = true, -- note, we also have 'resort city' and 'resort town', that take precedecne
["spa"] = true, -- note, we also have 'spa city' and 'spa town', that take precedecne
["ski"] = true, -- note, we also have 'ski resort city' and 'ski resort town', that take precedecne
-- religious qualifiers
["holy"] = true,
["sacred"] = true,
["religious"] = true,
["secular"] = true,
-- qualifiers for nonexistent places
["claimed"] = false,
["fictional"] = true,
["legendary"] = true,
["mythical"] = true,
["mythological"] = true,
-- directional qualifiers
["northern"] = false,
["southern"] = false,
["eastern"] = false,
["western"] = false,
["north"] = false,
["south"] = false,
["east"] = false,
["west"] = false,
["northeastern"] = false,
["southeastern"] = false,
["northwestern"] = false,
["southwestern"] = false,
["northeast"] = false,
["southeast"] = false,
["northwest"] = false,
["southwest"] = false,
-- seasonal qualifiers
["summer"] = true, -- e.g. for 'summer capital'
["winter"] = true,
-- legal status qualifiers
-- FIXM誒話:Two-word qualifiers don't work yet. But you can enter "de-facto" and it's canonicalized to [[de facto]].
["official"] = true,
["unofficial"] = true,
["de facto"] = true, -- 'de facto capital'
["de-facto"] = "[[de facto]]", -- [[de-facto]] is a red link
["de jure"] = true, -- 'de jure capital'
["de-jure"] = "[[de jure]]", -- [[de-jure]] is a red link
-- NOT誒話:'unrecognized/unrecognised' are handled as placetypes 'unrecognized country', 'unrecognized state'
-- misc. qualifiers
["planned"] = true,
["chartered"] = true,
["landlocked"] = true,
["uninhabited"] = true,
-- superlative qualifiers
["first"] = no_link_def_article,
["second"] = no_link_def_article, -- for "second largest" etc.
["third"] = no_link_def_article,
["fourth"] = no_link_def_article,
["last"] = no_link_def_article,
["only"] = no_link_def_article,
["sole"] = no_link_def_article,
["main"] = no_link_def_article,
["largest"] = no_link_def_article,
["biggest"] = no_link_def_article,
["smallest"] = no_link_def_article,
["shortest"] = no_link_def_article,
["longest"] = no_link_def_article,
["tallest"] = no_link_def_article,
["highest"] = no_link_def_article,
["lowest"] = no_link_def_article,
["leftmost"] = no_link_def_article,
["rightmost"] = no_link_def_article,
["innermost"] = no_link_def_article,
["outermost"] = no_link_def_article,
["northernmost"] = no_link_def_article,
["southernmost"] = no_link_def_article,
["westernmost"] = no_link_def_article,
["easternmost"] = no_link_def_article,
["northwesternmost"] = no_link_def_article,
["southwesternmost"] = no_link_def_article,
["northeasternmost"] = no_link_def_article,
["southeasternmost"] = no_link_def_article,
-- several/various
["several"] = no_link_no_article,
["various"] = no_link_no_article,
["numerous"] = no_link_no_article,
["multiple"] = no_link_no_article,
["many"] = no_link_no_article,
["other"] = no_link_no_article,
}
--[==[ var:
In this table, the key qualifiers should be treated the same as the value qualifiers for categorization purposes. This
is overridden by `placetype_data` and `qualifier_to_placetype_equivs`.
]==]
export.former_qualifiers = {
["abandoned"] = {"FORMER"},
["ancient"] = {"ANCIENT", "FORMER"},
["former"] = {"FORMER"},
["extinct"] = {"FORMER"},
["historic"] = {"FORMER"},
["historical"] = {"FORMER"},
["medieval"] = {"ANCIENT", "FORMER"},
["mediaeval"] = {"ANCIENT", "FORMER"},
["ruined"] = {"ANCIENT", "FORMER"},
["traditional"] = {"FORMER"},
}
--[==[ var:
In this table, any placetypes containing these qualifiers that do not occur in `placetype_data` should be mapped to the
specified placetypes for categorization purposes. Entries here are overridden by `placetype_data`.
]==]
export.qualifier_to_placetype_equivs = {
["fictional"] = "fictional location",
["legendary"] = "mythological location",
["mythical"] = "mythological location",
["mythological"] = "mythological location",
-- For e.g. Taiwan as a "claimed province" of China; parts of Belize as claimed by Guatemala; various islands
-- claimed by various parties in East Asia. FIXM誒話:We should conditionalize on what is being claimed since there are
-- also claimed capitals, e.g. Israel and Palestine claim Jerusalem as their capital.
["claimed"] = "claimed political division",
}
--[==[ var:
Mapping from placetypes to the corresponding plural category-only placetype for a capital of that placetype. The reverse
mapping also exists.
]==]
export.placetype_to_capital_cat = {
["autonomous community"] = "autonomous community capitals",
["canton"] = "cantonal capitals",
["comarca"] = "comarca capitals",
["country"] = "national capitals",
-- The following are not obviously different from 'county seats' but the latte terminology is used in the US.
["county"] = "county capitals",
["department"] = "departmental capitals",
["district"] = "district capitals",
["division"] = "division capitals",
["emirate"] = "emirate capitals",
["governorate"] = "governorate capitals",
["hromada"] = "hromada capitals",
["krai"] = "krai capitals",
["metropolitan city"] = "metropolitan city capitals",
["municipality"] = "municipal capitals",
["oblast"] = "oblast capitals",
["okrug"] = "okrug capitals",
["prefecture"] = "prefectural capitals",
["province"] = "provincial capitals",
["raion"] = "raion capitals",
["regency"] = "regency capitals",
["region"] = "regional capitals",
["regional unit"] = "regional unit capitals",
["republic"] = "republic capitals",
["state"] = "state capitals",
["territory"] = "territorial capitals",
["voivodeship"] = "voivodeship capitals",
}
--[==[ var:
This contains placenames that should be preceded by an article (almost always "the"). '''NOTE''': There are multiple
ways that placenames can come to be preceded by "the":
# Listed here.
# Given in [[Module:place/locations]] with an initial "the". All such placenames are added to this map by the code
just below the map.
# The placetype of the placename has `holonym_use_the = true` in its placetype_data.
# A regex in placename_the_re matches the placename.
Note that "the" is added only before the first holonym in a place description.
]==]
export.placename_article = {
-- This should only contain info that can't be inferred from [[Module:place/locations]].
["archipelago"] = {
["Cyclades"] = "the",
["Dodecanese"] = "the",
},
["country"] = {
["Holy Roman Empire"] = "the",
},
["empire"] = {
["Holy Roman Empire"] = "the",
},
["island"] = {
["North Island"] = "the",
["South Island"] = "the",
},
["region"] = {
["Balkans"] = "the",
["Russian Far East"] = "the",
["Caribbean"] = "the",
["Caucasus"] = "the",
["Middle East"] = "the",
["New Territories"] = "the",
["North Caucasus"] = "the",
["South Caucasus"] = "the",
["West Bank"] = "the",
["Gaza Strip"] = "the",
},
["valley"] = {
["San Fernando Valley"] = "the",
},
}
--[==[ var:
Regular expressions to apply to determine whether we need to put 'the' before a holonym. The key "*" applies to all
holonyms, otherwise only the regexes for the holonym's placetype apply.
]==]
export.placename_the_re = {
-- We don't need entries for peninsulas, seas, oceans, gulfs or rivers
-- because they have holonym_use_the = true.
["*"] = {"^Isle of ", " Islands$", " Mountains$", " Empire$", " Country$", " Region$", " District$", "^City of "},
["bay"] = {"^Bay of "},
["lake"] = {"^Lake of "},
["country"] = {"^Republic of ", " Republic$"},
["republic"] = {"^Republic of ", " Republic$"},
["region"] = {" [Rr]egion$"},
["river"] = {" River$"},
["local government area"] = {"^Shire of "},
["county"] = {"^Shire of "},
["Indian reservation"] = {" Reservation", " Nation"},
["tribal jurisdictional area"] = {" Reservation", " Nation"},
}
--[==[ var:
If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of
holonyms for categorization (but not display) purposes.
]==]
export.cat_implications = {
["region"] = {
["Eastern Europe"] = {"cont/歐洲"},
["Central Europe"] = {"cont/歐洲"},
["Western Europe"] = {"cont/歐洲"},
["South Europe"] = {"cont/歐洲"},
["Southern Europe"] = {"cont/歐洲"},
["Northern Europe"] = {"cont/歐洲"},
["Northeast Europe"] = {"cont/歐洲"},
["Northeastern Europe"] = {"cont/歐洲"},
["Southeast Europe"] = {"cont/歐洲"},
["Southeastern Europe"] = {"cont/歐洲"},
["North Caucasus"] = {"cont/歐洲"},
["South Caucasus"] = {"cont/亞洲"},
["South Asia"] = {"cont/亞洲"},
["Southern Asia"] = {"cont/亞洲"},
["East Asia"] = {"cont/亞洲"},
["Eastern Asia"] = {"cont/亞洲"},
["Central Asia"] = {"cont/亞洲"},
["West Asia"] = {"cont/亞洲"},
["Western Asia"] = {"cont/亞洲"},
["Southeast Asia"] = {"cont/亞洲"},
["North Asia"] = {"cont/亞洲"},
["Northern Asia"] = {"cont/亞洲"},
["Anatolia"] = {"cont/亞洲"},
["Asia Minor"] = {"cont/亞洲"},
["Mesopotamia"] = {"cont/亞洲"},
["North Africa"] = {"cont/非洲"},
["Central Africa"] = {"cont/非洲"},
["West Africa"] = {"cont/非洲"},
["East Africa"] = {"cont/非洲"},
["Southern Africa"] = {"cont/非洲"},
["Central America"] = {"cont/中美洲"},
["Caribbean"] = {"cont/北美洲"},
["Polynesia"] = {"cont/大洋洲"},
["Micronesia"] = {"cont/大洋洲"},
["Melanesia"] = {"cont/大洋洲"},
["Siberia"] = {"country/Russia", "cont/亞洲"},
["Russian Far East"] = {"country/Russia", "cont/亞洲"},
["South Wales"] = {"constituent country/Wales", "cont/歐洲"},
["Balkans"] = {"cont/歐洲"},
["West Bank"] = {"country/Palestine", "cont/亞洲"},
["Gaza"] = {"country/Palestine", "cont/亞洲"},
["Gaza Strip"] = {"country/Palestine", "cont/亞洲"},
}
}
------------------------------------------------------------------------------------------
-- Category and display handlers --
------------------------------------------------------------------------------------------
local function city_type_cat_handler(data)
local entry_placetype = data.entry_placetype
local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities")
if not generic_before_non_cities then
internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" ..
" setting", entry_placetype)
end
local plural_entry_placetype = export.pluralize_placetype(entry_placetype)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and not spec.is_city then
-- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both
-- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.)
local cap_plural_entry_placetype = ucfirst(plural_entry_placetype)
local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities,
export.get_prefixed_key(key, spec))}
if container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities,
export.get_prefixed_key(container.key, container.spec)))
end
end
return retcats
end
end
local function capital_city_cat_handler(data, non_city)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
-- The first time we're called we want to return something; otherwise we will be called for later-mentioned
-- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in
-- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital
-- category/categories we add below.
local retcats
if not non_city and place_desc.holonyms then
for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do
local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename
retcats = city_type_cat_handler {
entry_placetype = "city",
holonym_placetype = h_placetype,
holonym_placename = h_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if retcats then
break
end
end
end
if not retcats then
retcats = {}
end
-- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we
-- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State
-- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory'
-- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's
-- an entry for 'autonomous community').
local capital_cat = export.placetype_to_capital_cat[holonym_placetype]
if not capital_cat then
capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")]
end
if capital_cat then
capital_cat = ucfirst(capital_cat)
local inserted_specific_variant_cat = false
if holonym_index then
-- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern
-- where we use :also to specify that a given city is the capital at multiple surrounding levels.
local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index
for h_index = holonym_index, #place_desc.holonyms do
if place_desc.holonyms[h_index].placetype then
matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location {
holonym_placetype = place_desc.holonyms[h_index].placetype,
holonym_placename = place_desc.holonyms[h_index].unlinked_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if matching_group then
matching_holonym_index = h_index
break
end
end
end
if matching_holonym_index == holonym_index then
if matching_container_trail[1] and not matching_spec.no_container_cat then
for _, container in ipairs(matching_container_trail[1]) do
insert(retcats, ("%s of %s"):format(capital_cat, export.get_prefixed_key(container.key,
container.spec)))
inserted_specific_variant_cat = true
end
end
elseif matching_holonym_index then
-- Check to make sure that the holonym placetype we were called on is listed among the
-- divtypes of the location we found.
local function insert_specific_variant_if_possible(key, spec)
return export.get_equiv_placetype_prop(holonym_placetype, function(pt)
local plural_holonym_placetype = export.pluralize_placetype(pt)
local saw_matching_div
if spec.divs then
local divs = spec.divs
if type(divs) ~= "table" then
divs = {divs}
end
for _, div in ipairs(divs) do
if type(div) ~= "table" then
div = {type = div}
end
if plural_holonym_placetype == div.type then
saw_matching_div = true
break
end
end
end
if saw_matching_div then
insert(retcats, ("%s of %s"):format(capital_cat, export.get_prefixed_key(key, spec)))
return true
end
return false
end)
end
if insert_specific_variant_if_possible(matching_key, matching_spec) then
inserted_specific_variant_cat = true
elseif not matching_spec.no_container_cat then
for _, containers in ipairs(matching_container_trail) do
local saw_no_container_cat = false
for _, container in ipairs(containers) do
if insert_specific_variant_if_possible(container.key, container.spec) then
inserted_specific_variant_cat = true
break
end
saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat
end
if inserted_specific_variant_cat or saw_no_container_cat then
break
end
end
end
end
else
-- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for
-- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing.
-- FIXM誒話:This may not be necessary. In the example just given, when processing Haryana we add to
-- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab.
-- Possibly we can just skip this case entirely.
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, ("%s of %s"):format(capital_cat, export.get_prefixed_key(container.key,
container.spec)))
inserted_specific_variant_cat = true
end
end
end
if not inserted_specific_variant_cat then
insert(retcats, capital_cat)
end
else
-- We didn't recognize the holonym placetype; just put in 'Capital cities'.
insert(retcats, "Capital cities")
end
return retcats
end
--[=[
This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used
in two ways:
# To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and
[[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym.
# To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym
description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this
case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments,
administrative regions, and for the entire country, and for example we only want to categorize a demonym into
[[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym
invocation only adds the most specific holonym category and not the category of any containing polity (hence if we
add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]).
This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston`
as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and
[[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities
having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]],
[[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing
polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`).
Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the
mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions
Ohio and a holonym for a Columbus in a different country is encountered, because of the function
`augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered.
The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding
language code).
]=]
local function generic_place_cat_handler(data)
local from_demonym = data.from_demonym
local retcats = {}
local function insert_retkey(key, spec)
if from_demonym then
insert(retcats, key)
else
insert(retcats, ("Places in %s"):format(export.get_prefixed_key(key, spec)))
end
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
if not spec.no_generic_place_cat then
-- This applies to continents and continental regions.
insert_retkey(key, spec)
end
-- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in
-- both {{C|地點 in Osaka Prefecture, Japan]] and [[Category|地點 in Japan}}。But not when
-- no_container_cat is set (e.g. for 'United Kingdom').
if not spec.no_container_cat then
for _, container_set in ipairs(container_trail) do
local stop_adding_containers = false
for _, container in ipairs(container_set) do
if not container.spec.no_generic_place_cat then
insert_retkey(container.key, container.spec)
end
if container.spec.no_container_cat then
stop_adding_containers = true
end
end
if stop_adding_containers then
break
end
end
end
return retcats
end
end
--[==[
Special category handler run for all placetypes that checks for specified division placetypes of known locations and
categorizes appropriately.
]==]
function export.political_division_cat_handler(data)
if data.from_demonym then
return
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
local divlists = {}
if spec.divs then
insert(divlists, spec.divs)
end
if spec.addl_divs then
insert(divlists, spec.addl_divs)
end
for _, divlist in ipairs(divlists) do
if type(divlist) ~= "table" then
divlist = {divlist}
end
for _, div in ipairs(divlist) do
if type(div) == "string" then
div = {type = div}
end
local sgdiv = export.maybe_singularize_placetype(div.type) or div.type
local prep = div.prep or "of"
local cat_as = div.cat_as or div.type
if type(cat_as) ~= "table" then
cat_as = {cat_as}
end
if not export.placetype_data[sgdiv] then
internal_error("Placetype %s associated with known location key %s and data %s not found in " ..
"`placetype_data`", sgdiv, key, spec)
end
if sgdiv == data.entry_placetype then
local retcats = {}
for _, pt_cat in ipairs(cat_as) do
if type(pt_cat) == "string" then
pt_cat = {type = pt_cat}
end
local pt_prep = pt_cat.prep or prep
insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " ..
export.get_prefixed_key(key, spec))
end
return retcats
end
end
end
end
end
--[==[
This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any
foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value
in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the
modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the
entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the
country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized
into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to
make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is
intended for Newark, New Jersey).
]==]
function export.get_bare_categories(args, overall_place_spec)
local bare_cats = {}
local place_descs = overall_place_spec.descs
local possible_placetypes_by_place_desc = {}
for i, place_desc in ipairs(place_descs) do
possible_placetypes_by_place_desc[i] = {}
for _, placetype in ipairs(place_desc.placetypes) do
if not export.placetype_is_ignorable(placetype) then
local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true})
for _, equiv in ipairs(equivs) do
insert(possible_placetypes_by_place_desc[i], equiv.placetype)
end
end
end
end
local function check_term(term)
-- Treat Wikipedia links like local ones.
term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[")
term = export.remove_links_and_html(term)
term = term:gsub("^the ", "")
for i, place_desc in ipairs(place_descs) do
-- Iterate over all matching locations in case there are multiple, as with Delhi defined as
-- {{place|en|megacity/and/union territory|c/India|containing the national capital [[New Delhi]]}}。
for group, key, spec, container_trail in export.iterate_matching_holonym_location {
holonym_placetype = possible_placetypes_by_place_desc[i],
holonym_placename = term,
place_desc = place_desc,
} do
insert(bare_cats, key)
end
end
end
-- FIXM誒話:Should we only do the following if the language is English (requires that the lang is passed in)?
-- We should always do it if `pagename` is given (as it is with {{tcl}}) but maybe not otherwise unless 1=en. There
-- are cases like [[Ankara]] = English name for capital of Turkey, but also the name in various languages for the
-- capital of Ghana (= English [[Accra]]). But this should get caught by mismatching the containing country. The
-- advantage of checking when the language isn't English is we catch those places that fail to give an English
-- translation but where the translation happens to be the same as the other-language spelling. However, I don't
-- know how often this situation occurs.
check_term(args.pagename or mw.loadData("Module:headword/data").pagename)
for _, t in ipairs(args.t) do
check_term(t)
end
local function check_termobj_list(terms)
for _, term in ipairs(terms) do
if term.eq then
check_term(term.eq)
end
if term.alt or term.term then
check_term(term.alt or term.term)
end
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
local arg = extra_info_terms.arg
if arg == "modern" or arg == "now" or arg == "full" or arg == "short" then
check_termobj_list(extra_info_terms.terms)
end
end
for _, directive in ipairs(overall_place_spec.directives) do
check_termobj_list(directive.terms)
end
return bare_cats
end
--[==[
This is used to augment the holonyms associated with a place description with the containing polities. For example,
given the following:
`# {{tl|place|en|subprefecture|pref/Hokkaido}}。`
We auto-add Japan as another holonym so that the term gets categorized into [[:Category:Subprefectures of Japan]].
To avoid over-categorizing we need to check to make sure no other countries are specified as holonyms.
]==]
function export.augment_holonyms_with_container(place_descs)
for _, place_desc in ipairs(place_descs) do
if place_desc.holonyms then
-- This ends up containing a copy of the original holonyms, with the augmented holonyms inserted in their
-- appropriate position. We don't just put them at the end because some holonyms have use the `:also`
-- modifier, which causes category processing to restart at that point after generating categories for a
-- preceding holonym, and we don't want the preceding holonym's augmented holonyms interfering with
-- categorization of a later holonym. We proceed from right to left, and each time we augment, we copy
-- the holonyms with the augmented holonym(s) inserted appropriately and replace the place description's
-- holonyms with the augmented ones before the next iteration. The reason for this is so that e.g.
-- {{place|neighborhood|city/Birmingham|co/West Midlands|cc/England}} doesn't throw an error during the
-- augmentation process due to 'Birmingham' referring to two known locations (in England and Alabama). If
-- we go left to right, we will throw an ambiguity error on `city/Birmingham` because code to exclude
-- Birmingham, Alabama needs `c/United Kingdom` present (to cause a mismatch with `c/United States`),
-- which isn't yet present as the augmentation code hasn't gotten to `cc/England` yet. For similar
-- reasons, we need to include the augmented holonyms in the holonyms considered in the next iteration
-- rather than modifying the place description once at athe end.
for i = #place_desc.holonyms, 1, -1 do
local holonym = place_desc.holonyms[i]
if holonym.placetype and not export.placetype_is_ignorable(holonym.placetype) then
local group, key, spec, container_trail = export.find_matching_holonym_location {
holonym_placetype = holonym.placetype,
holonym_placename = holonym.unlinked_placename,
holonym_index = i,
place_desc = place_desc,
}
if group and container_trail[1] and not spec.no_auto_augment_container then
local augmented_holonyms = {}
for j = 1, i do
insert(augmented_holonyms, place_desc.holonyms[j])
end
for _, containers in ipairs(container_trail) do
local any_no_auto_augment_container = false
for _, container in ipairs(containers) do
any_no_auto_augment_container = any_no_auto_augment_container or
container.spec.no_auto_augment_container
local containing_type = container.spec.placetype
if type(containing_type) == "table" then
-- If the containing type is a list, use the first element as the canonical variant.
containing_type = containing_type[1]
end
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
-- Don't side-effect holonyms while processing them.
local new_holonym = {
-- By the time we run, the display has already been generated so we don't need to
-- set display_placename.
placetype = containing_type,
-- placename_to_key() for the group should correctly handle both full and elliptical
-- placenames, but the full placename seems less likely to be ambiguous. FIXM誒話:We
-- should just store the key directly and use it when available to avoid having to
-- convert key to placename and back to key.
unlinked_placename = full_container_placename,
-- Indicate that this is an augmented holonym, and was derived from the specified
-- holonym. In iterate_matching_holonym_location(), we ignore augmented holonyms
-- derived from holonyms that are different from the holonym we're searching for but
-- of the same placetype. This is to correctly handle a situation like
-- {{place|river|dept/Ardèche,Gard,Vaucluse,Bouches-du-Rhône|c/France}}。Here,
-- `Ardèche` is in `r/Auvergne-Rhône-Alpes`, while `Gard` is in `r/Occitania` and
-- the other two are in `r/Provence-Alpes-Côte d'Azur`. Augmenting proceeds from
-- right to left, so after it adds `r/Provence-Alpes-Côte d'Azur` to
-- `Bouches-du-Rhône`, Vaucluse gets augmented correctly but `Gard` fails to match
-- in find_matching_holonym_location() because of the mismatch between augmented
-- `r/Provence-Alpes-Côte d'Azur` and actual `r/Occitania`. Similarly, all later
-- calls to find_matching_holonym_location() fail to match `Gard` (and likewise
-- `Ardèche`) against any known location. To deal with this, we mark augmented
-- holoynms as being augmented due to a source holonym, and when processing a given
-- holonym, ignore augmented holonyms from other holonyms of the same placetype.
-- The restriction to the same placetype is so that `Birmingham` still gets
-- correctly disambiguated to Birmingham, England in the example given above near
-- the top of this function, using the augmented holonym `c/United Kingdom` added by
-- the specified `cc/England` (whose placetype `constituent country` differs from
-- the placetype `city` of Birmingham).
augmented_from_holonym = holonym,
}
insert(augmented_holonyms, new_holonym)
-- But it is safe to modify other parts of the place_desc.
export.key_holonym_into_place_desc(place_desc, new_holonym)
end
if any_no_auto_augment_container then
break
end
end
for j = i + 1, #place_desc.holonyms do
insert(augmented_holonyms, place_desc.holonyms[j])
end
place_desc.holonyms = augmented_holonyms
end
end
end
end
end
end
-- Cat handler for district, areas, neighborhoods and suburbs. Districts are tricky because they can either be political
-- divisions or city neighborhoods. Areas similarly can be political divisions (rarely; specifically, in Kuwait), city
-- neighborhoods or larger geographical areas/regions. We handle this as follows:
-- (1) `placetype_data` cat entries for specific countries or country divisions take precedence over cat_handlers, so if
-- the user says {{tl|place|district|s/Maharashtra|c/India}}, we won't even be called because there is an entry that
-- categorizes into [[:Category|Districts of Maharashtra, India]].
-- (2) If we're called, we check the holonym we're called on to see if it is a recognized city, e.g. if we're called
-- using {{tl|place|district|city/Mumbai|s/Maharashtra|c/India}}。If so, we categorize under e.g.
-- [[:Category:Neighbourhoods of Mumbai]]. (Choosing the spelling "neighbourhoods" because we're in India.)
-- (3) If we're called and the holonym is not a recognized city, we check if the placetype has has_neighborhoods set.
-- If so, it's "city-like" and we categorize under the first containing polity that we recognize. For example, if
-- we're called using {{tl|place|district|town/Northampton|co/Hampshire|s/Massachusetts|c/US}}, we should recognize
-- town as "city-like" and categorize under [[:Category:Neighborhoods in Massachusetts]]. (Note "in" not "of", and
-- note the spelling "neighborhoods" because we're in the US.)
-- (4) If the holonym is not city-like, we do nothing. If there's a city or city-like placetype farther up (e.g. we're
-- called as {{tl|place|district|ward/Foo|mun/Bar|...}}), we will handle the city-like entity according to (2) or
-- (3) when called on that holonym. Otherwise either the categorization in (1) takes place or there's no
-- categorization.
local function district_neighborhood_cat_handler(data)
local function get_plural_entry_placetype(location_spec, container_trail)
if data.entry_placetype == "suburb" then
return "Suburbs"
else
-- Check for `british_spelling` setting on the spec itself or any container.
local uses_british_spelling = location_spec.british_spelling
if uses_british_spelling == nil and container_trail then
for _, container_set in ipairs(container_trail) do
local must_outer_break = false
for _, container in ipairs(container_set) do
if container.spec.british_spelling ~= nil then
uses_british_spelling = container.spec.british_spelling
must_outer_break = true
break
end
end
if must_outer_break then
break
end
end
end
return uses_british_spelling and "Neighbourhoods" or "Neighborhoods"
end
end
-- First check the immediate holonym to see if it's a city or a city-like top-level entity (Hong Kong, Bonaire,
-- etc.)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and spec.is_city then
return {get_plural_entry_placetype(spec, container_trail) .. " of " .. export.get_prefixed_key(key, spec)}
end
-- If the entry placetype is neighbo(u)rhood, assume it is a neighborhood even if there isn't a city-like
-- entity father up the chain. (E.g. due to a mistaken use of m/ instead of mun/ for municipality.)
local has_neighborhoods
local entry_placetype = data.entry_placetype
if entry_placetype == "neighborhood" or entry_placetype == "neighbourhood" or entry_placetype == "suburb" then
has_neighborhoods = true
else
-- Otherwise, make sure the current holonym is city-like.
has_neighborhoods = export.get_equiv_placetype_prop(data.holonym_placetype, function(pt)
return export.get_placetype_prop(pt, "has_neighborhoods")
end, {continue_on_nil_only = true})
end
if has_neighborhoods then
-- Loop up the holonyms, looking for city and city-like entities in case of e.g. [[Sepulveda]] written
-- {{place|en|neighborhood|valley/San Fernando Valley|city/Los Angeles|s/California|c/USA}}
-- but also look for a recognizable poldiv, and if so categorize as "Neighborhoods in POLDIV". We need
-- to start with the current holonym, which is especially important for neighborhoods and suburbs that
-- may have the first holonym be a recognizable province, etc. but can't hurt otherwise. (Previously
-- we skipped the first/current holonym.)
for other_holonym_index, other_holonym in export.get_holonyms_to_check(data.place_desc,
data.holonym_index) do
local other_holonym_data = {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = data.place_desc,
}
local group, key, spec, container_trail = export.find_matching_holonym_location(other_holonym_data)
if group and not spec.is_former_place then
return {get_plural_entry_placetype(spec, container_trail) .. (spec.is_city and " of " or " in ") ..
export.get_prefixed_key(key, spec)}
end
end
end
end
function export.check_already_seen_string(holonym_placename, already_seen_strings)
local canon_placename = ulower(m_links.remove_links(holonym_placename))
if type(already_seen_strings) ~= "table" then
already_seen_strings = {already_seen_strings}
end
for _, already_seen_string in ipairs(already_seen_strings) do
if canon_placename:find(already_seen_string) then
return true
end
end
return false
end
-- Prefix display handler that adds a prefix such as "Metropolitan Borough of " to the display
-- form of holonyms. We make sure the holonym doesn't contain the prefix or some variant already.
-- We do this by checking if any of the strings in ALREADY_SEEN_STRINGS, either a single string or
-- a list of strings, or the prefix if ALREADY_SEEN_STRINGS is omitted, are found in the holonym
-- placename, ignoring case and links. If the prefix isn't already present, we create a link that
-- uses the raw form as the link destination but the prefixed form as the display form, unless the
-- holonym already has a link in it, in which case we just add the prefix.
local function prefix_display_handler(prefix, holonym_placename, already_seen_strings)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(prefix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return prefix .. " " .. holonym_placename
end
return prefix .. " [[" .. holonym_placename .. "]]"
end
-- Suffix display handler that adds a suffix such as " parish" to the display form of holonyms.
-- Works identically to prefix_display_handler but for suffixes instead of prefixes.
local function suffix_display_handler(suffix, holonym_placename, already_seen_strings, include_suffix_in_link)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(suffix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return holonym_placename .. " " .. suffix
end
if include_suffix_in_link then
return "[[" .. holonym_placename .. " " .. suffix .. "]]"
else
return "[[" .. holonym_placename .. "]] " .. suffix
end
end
-- Display handler for boroughs. New York City boroughs are display as-is. Others are suffixed
-- with "borough".
local function borough_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.new_york_boroughs[unlinked_placename] then
-- Hack: don't display "borough" after the names of NYC boroughs
return holonym_placename
end
return suffix_display_handler("borough", holonym_placename)
end
local function county_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
-- Display handler for Irish counties. Irish counties are displayed as e.g. "County [[Cork]]".
if m_locations.ireland_counties["County " .. unlinked_placename .. ", Ireland"] or
m_locations.northern_ireland_counties["County " .. unlinked_placename .. ", Northern Ireland"] then
return prefix_display_handler("County", holonym_placename)
end
-- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County".
if m_locations.taiwan_counties[unlinked_placename .. " County, Taiwan"] then
return suffix_display_handler("County", holonym_placename)
end
-- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County".
if m_locations.romania_counties[unlinked_placename .. " County, Romania"] then
return suffix_display_handler("County", holonym_placename)
end
-- FIXME, we need the same for US counties but need to key off the country, not the specific county.
-- Others are displayed as-is.
return holonym_placename
end
-- Display handler for prefectures. Japanese prefectures are displayed as e.g. "[[Fukushima]] Prefecture".
-- Others are displayed as e.g. "[[Fthiotida]] prefecture".
local function prefecture_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
local suffix = m_locations.japan_prefectures[unlinked_placename .. " Prefecture, Japan"] and "Prefecture" or "prefecture"
return suffix_display_handler(suffix, holonym_placename)
end
-- Display handler for provinces of Bulgaria, Iran, Laos, North and South Korea, Thailand, Turkey and Vietnam. Recognized
-- provinces are displayed as e.g. "[[Gyeonggi]] Province" or "[[Antalya]] Province". Others are displayed as-is.
local function province_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if
m_locations.bulgaria_provinces[unlinked_placename .. "Province, Bulgaria"] or
m_locations.iran_provinces[unlinked_placename .. " Province, Iran"] or
m_locations.laos_provinces[unlinked_placename .. " Province, Laos"] or
m_locations.north_korea_provinces[unlinked_placename .. " Province, North Korea"] or
m_locations.south_korea_provinces[unlinked_placename .. " Province, South Korea"] or
m_locations.thailand_provinces[unlinked_placename .. " Province, Thailand"] or
m_locations.turkey_provinces[unlinked_placename .. " Province, Turkey"] or
m_locations.vietnam_provinces[unlinked_placename .. " Province, Vietnam"] then
return suffix_display_handler("Province", holonym_placename)
end
return holonym_placename
end
-- Display handler for Nigerian states. Nigerian states are display as "[[Kano]] State". Others are displayed as-is.
local function state_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.nigeria_states[unlinked_placename .. " State, Nigeria"] then
return suffix_display_handler("State", holonym_placename)
end
return holonym_placename
end
-- Display handler for voivodeships. Display as e.g. [[Subcarpathian Voivodeship]].
local function voivodesip_display_handler(holonym_placetype, holonym_placename)
return suffix_display_handler("Voivodeship", holonym_placename, nil, "include_suffix_in_link")
end
------------------------------------------------------------------------------------------
-- Placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
Main placetype data structure. This specifies, for each canonicalized placetype, various properties. The keys are
placetypes (in the singular, except for category-only placetypes, which are plural and followed by `!`), and the value
is a table of properties. The `"*"` key is special and is used for adding "generic" categories of the form
`Places in ``location`` `; it runs for all entry placetypes. Keys in the form of plural placetypes followed by `!` are
used only in [[Module:category tree/topic cat/data/Places]] for specifying the properties of categories containing the
specified placetype, esp. bare categories like [[:Category:States and territories]] (rather than qualified categories
like [[:Category:States and territories of Australia]]).
Keys under the value table for a given placetype of are two types: ''property keys'' (which specify the value of
specific properties) and ''categorization keys'' (which tell how to categorize certain sorts of holonyms if the
placetype in question occurs as an entry placetype). Categorization keys are either the special value `default` or are
wildcard strings with a slash in them, such as `"country/*"`. Note that only wildcard strings are currently allowed
directly in the placetype data; everything else is handled through category handlers, either per-placetype or special
(such as `political_division_cat_handler`). The algorithm for how category keys and handlers are used to generate
categories is described at the top of [[Module:place]].
There are several recognized property keys, of various types:
1. The following link-related property keys are recognized:
* `link`: '''Required''' except in category-only placetypes ending in `!`. Describes how to link and display the
placetype in the formatted description when occurring as an entry placetype. Also used for formatting pluralized
placetypes (which may occur in entry placetypes, esp. new-format ones, such as `two <<islands>>`) and may occur in
categories). The possible values are:
*# `true`: Link to the same-named Wiktionary entry. This creates a raw link, e.g. `<nowiki>[[city]]</nowiki>`, which is
converted to an English-specific link by JavaScript postprocessing. If the placetype is plural, this creates a
two-part raw link e.g. `<nowiki>[[city|城市]]</nowiki>`.
*# `"w"`: Link to the same-named Wikipedia entry. This creates a two-part link, e.g.
`<nowiki>[[w:census town|census town]]</nowiki>`, or `<nowiki>[[w:census town|census towns]]</nowiki>` if the
placetype is given plural.
*# `"+..."`: Create a two-part link to the entry following the `+` sign. For example, if `cercle` specifies
`"+w:cercles of Mali"`, a two-part link `<nowiki>[[w:cercles of Mali|cercle]]</nowiki>` will be generated, or
`<nowiki>[[w:cercles of Mali|cercles]]</nowiki>` if plural `cercles` is specified.
*# `"separately"`: Link each word separately. For example, if `administrative territory` specifies `"separately"`, it
will be linked as `<nowiki>[[administrative]] [[territory]]</nowiki>`, or as
`<nowiki>[[administrative]] [[territory|territories]]</nowiki>` if plural `administrative territories` is given.
*# another string: Use that string directly. If the placetype is plural, `pluralize()` in [[Module:en-utilities]] is
called on the string, which will correctly pluralize most strings, including those with links in them. (If there
are multiple links, the display form of the last link is pluralized.)
*# `false`: This placetype is not allowed as an entry placetype. An error will be thrown if this placetype is given as
an entry placetype. This is specified for internal-use placetypes, especially placetypes used in conjunction with
the qualifiers `former`, `ancient`, `historical` and such.
* `plural_link`: If specified and the placetype is plural, use the value in place of generating a pluralized version of
the link spec in `link`. Most commonly, this is either a string with links in it (which is used directly) or the
value `false`, indicating that the placetype cannot occur plural. (This is used for example by `caplc`, which displays
as `<nowiki>[[capital]] and [[large]]st [[city]]</nowiki>`, where a plural version doesn't make sense.) Generally if
this is specified, `plural` also needs to be specified to give a special placetype plural; this situation occurs
especially with multiword placetypes where something other than the last word is pluralized. An example is
`town with bystatus`, whose plural is `towns with bystatus`, which needs to be explicitly given. This example uses
`link = <nowiki>"[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>` ({{m|nb|bystatus}}) is a Norwegian
Bokmål word, and template calls aren't currently permitted in link strings), along with
`plural_link = <nowiki>"[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>`.
* `category_link`: Spec indicating how to display the placetype when occurring in category descriptions. Defaults to
the value of `link`, and in turn is overridden by more specific `category_link_*` keys; see below. Category-only
placetypes (which are plural and end in `!`) usually use `category_link` in preference to `link`. The value of
`category_link` can be any of the types of specs given above, but most commonly is a plural string with links in it,
spelling out the description; in this case it is used directly. When both `category_link` and `link` are given, the
value in `category_link` is typically longer and more descriptive. For example, `polity` uses `link = true`, which
just generates a link `<nowiki>[[polity]]</nowiki>` or plural `<nowiki>[[polity|政體]]</nowiki>`, but specifies a
separate `category_link = <nowiki>"[[independent]] or [[semi-]][[independent]] [[polity|政體]]"</nowiki>`, which
clarifies in the category description what a polity is.
* `category_link_top_level`: Spec indicating how to display top-level (bare/unqualified) categories, i.e. categories
where the placetype is not followed by `in ``location`` ` or `of ``location`` `. If given, this overrides
`category_link` for this type of category.
* `category_link_before_noncity`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` does not refer to a city. If given, this overrides
`category_link` for this type of category.
* `category_link_before_city`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` refer to a city. If given, this overrides `category_link` for
this type of category. An example where this is given is `neighborhood`, which uses the following specs:<ol>
<li>`link = true`</li>
<li>`category_link = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions of [[city|城市]]"</nowiki>`</li>
<li>`category_link_before_city = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions"</nowiki>`</li>
</ol> This has the effect of making the entry placetype `neighborhood` display as just
`<nowiki>[[neighborhood]]</nowiki>`, while e.g. a category like `Neighborhoods of Chicago` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[Chicago]], ...</nowiki>` and a category like
`Neighborhoods in Illinois, USA` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[city|城市]] in [[Illinois]], ...</nowiki>`.
* `disallow_in_entries`: If specified, this placetype cannot occur as an entry placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
* `disallow_in_holonyms`: If specified, this placetype cannot occur as a holonym placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
2. There is currently one fallback-related property key recognized:
* `fallback`: If specified, its value is a placetype which will be used for categorization purposes if no categories
get added using the placetype itself. As an example, `branch` sets a fallback of `river` but also sets
`preposition = "of"`, meaning that {{tl|place|en|branch|riv/Mississippi}} displays as `a branch of the Mississippi`
(whereas `river` itself uses the preposition `in`), but otherwise categorizes the same as `river`. A more complex
example is `area`, which sets a fallback of `geographic and cultural area` and also sets a category handler that
checks for cities or city-like entities (e.g. boroughs) occurring as holonyms and categorizes the toponym under
[[:Category:Neighborhoods of CITY]] (for recognized cities) or otherwise [[:Category:Neighborhoods of POLDIV]] (for
the nearest containing recognized location). In addition, `area` is set as a political division of Kuwait, meaning if
`c/Kuwait` occurs as holonym, the toponym is categorized under [[:Category:Areas of Kuwait]]. If none of these
categories trigger, the fallback of `geographic and cultural area` will take effect, and the toponym will be
categorized as e.g. [[:Category:Geographic and cultural areas of England]].
3. There is currently one property to control irregular plurals of placetypes:
* `plural`: If specified, its value is the plural of the placetype. Otherwise, the default pluralization algorithm in
[[Module:en-utilities]] applies (which correctly pluralizes most words, including those ending in `-y`, `-ch`, `-sh`,
`-x`, etc.). The value of `plural` is also used when converting a pluralized placetype into its singular equivalent;
for example, since the placetype `kibbutz` has `plural = "kibbutzim"`, the placetype `kibbutzim` will be recognized
as a plural and singularized to `kibbutz`. For this reason, it's occasionally necessary to specify a `plural` value
even when the default pluralization algorithm works correctly, if the default singularization algorithm won't
correctly reverse the pluralization (as with `pass` and other terms ending in `-ss`).
4. The following property keys relate to generating categories for entry placetypes and specifying the parents of those
categories:
* `class`: The general class of placetype. This is used for various purposes: (a) to categorize placetypes preceded by
a qualifier such as `former`, `ancient`, `medieval` or `historical` (note that these placetypes are not all treated
alike); (b) to determine the parent category of bare placetype categories (e.g. [[:Category:Villages]] for placetype
`village`); (c) to determine whether to add a parent category `political divisions of specific countries` to
qualified placetype categories (e.g. [[:Category:Villages in Mali]]). The possible values are:
*# `polity`: a more-or-less sovereign/independent polity, such as a country, kingdom or empire.
*# `subpolity`: a non-sovereign division of a polity, above the level of an individual settlement.
*# `settlement`: a city or smaller equivalent, such as a village. This also includes administrative divisions of a
settlement, such as wards and barangays.
*# `non-admin settlement`: similar to a settlement but without administrative or political significance, such as an
unincorporated community, farm or neighborhood.
*# `capital`: a settlement that is a capital. A former capital is generally still in existence, just not the capital
any more.
*# `natural feature`: any non-man-made feature, such as a lake, mountain, island, ocean, etc.
*# `man-made structure`: a man-made feature below the level of a neighborhood, such as a house, airport, university,
metro station, park or the like.
*# `geographic region`: a geographic or cultural region or area that has no administrative significance. These may vary
greatly in size but typically have some sort of cultural significance (possibly historical). The `former`, `ancient`,
etc. qualifier has no effect on the category of these placetypes.
*# `generic place`: a place that isn't further qualified into any specific subtype.
* `former_type`: The class of placetype used for categorizing placetypes preceded by a qualifier such as `former`,
`ancient`, `medieval` or `historical`. The possible values are the same as for `class` but with the addition of
`dependent territory` (for colonies, protectorates and the like) and `!` (ignore the historical/former/ancient/etc.
qualifier; used e.g. with `fictional location` and `mythological location`). If not specified, the value of `class`
is used. When a qualifier such as `former`, `ancient`, `medieval` or `historical` is encountered (specifically, those
in `former_qualifiers`), it is mapped using `former_qualifiers` to the appropriate internal qualifier or qualifiers
(one or both of `ANCIENT` 和/或`FORMER`, which are written in all-caps to distinguish them from user-specified
qualifiers), which is prepended to the value of `former_type` or `class` to form a placetype whose properties are
looked up to determine how to categorize the toponym in question. For example, if `medieval village` is given, we map
`medieval` to `ANCIENT` and `FORMER`, and `village` to its `class` of `settlement`, and enter the placetypes
`ANCIENT settlement` and `FORMER settlement` (in that order) into the list of equivalent placetypes returned by
`get_placetype_equivs`. In this case, there is an entry in `placetype_data` for `ANCIENT settlement`, so its default
category spec `Ancient settlements` is used as the category. If on the other hand `medieval kingdom` is given, where
`kingdom` has a `class` value `polity`, we first look up `ANCIENT polity`, see there is no entry in `placetype_data`
for it, and then look up `FORMER polity`, which exists and has a default category spec `Former polities`, which is
used as the category. Note that if the placetype following the "former" qualifier is recognized in `placetype_data`
but has no `former_type` or `class` and no fallback with a `former_type` or `class` specified, it is an internal
error; but if the placetype isn't recognized (e.g. something like `former greenhouse` is specified and we don't have
an entry for `greenhouse`), we just track the occurrence and end up not categorizing.
* `bare_category_parent`: This specifies the first parent category of a bare placetype category named according to the
placetype in question (e.g. [[:Category:Atolls]] for placetype `atoll`, or [[:Category:Named buildings]] for
placetype `named buildings!`). If not specified, the first parent category is determined by the value of `class`,
using the mapping `class_to_bare_category_parent` in [[Module:category tree/topic cat/data/Places]].
* `addl_bare_category_parents`: Extra parent categories to add a bare placetype category to (see `bare_category_parent`
just above).
* `bare_category_breadcrumb`: Breadcrumb for bare placetype categories. Also used as the sort key of
`bare_category_parent` if it is a string.
* `inherently_former`: If specified and the given placetype is used as an entry placetype, act as if `former` or
`ancient` (depending on the value of `inherently_former`) were prefixed to the placetype. This is for placetypes that
always refer to no-longer-existing entities, such as `satrapy` and `treaty port`. The value of `inherently_former` is
a list of internal qualifiers (one or more of `ANCIENT` 和/或`FORMER`), just as for `former_qualifiers`, and the
implementation is the same.
* `cat_handler`: Handler used to generate the categories to add a given toponym to, if its entry placetype is the
placetype in question. Generally the `cat_handler` function checks the holonyms specified in order to determine which
category or categories to generate. For example, `district_neighborhood_cat_handler` handles placetypes `district`,
`neighborhood`, `subdivision`, `suburb` and the like, and either adds the toponym to a category like
`Neighborhoods of ``city`` ` (if a recognized city is given as a holonym), or otherwise a category like
`Neighborhoods in ``location`` ` (for the first recognized non-city location given as a holonym, if an unrecognized
city or city-like entity is given before the recognized non-city). The algorithm that runs the category handlers
iterates over holonyms from left to right, running the `cat_handler` function on each holonym in turn until one or
more categories are returned; see below for more specifics. (Note that countries for which e.g. a `district` is a
political division do not get the corresponding category added by the `district_neighborhood_cat_handler` function but
by `political_division_cat_handler`.) `cat_handler` functions are called with one argument, `data`, describing the
resolved entry placetype (i.e. after resolving placetype aliases and fallbacks) and the holonym being processed. The
return value should be a list of category specs (categories minus the langcode prefix, with `+++` standing for the
holonym key, or the value `true`, which stands for ` ``Placetypes`` in/of ``Holonym`` `, i.e. the pluralized placetype
with the appropriate preposition as specified in `placetype_data`). `data` contains the following fields:
** `entry_placetype`: the resolved entry placetype for the entry placetype being processed (i.e. it will always have an
entry in `placetype_data` but may not be the original placetype given by the user);
** `holonym_placetype` and `holonym_placename`: the holonym placetype and placename being processed;
** `holonym_index`: the index of the holonym being processed, or {nil} if we're handling an overriding holonym (FIXM誒話: we will change the overriding holonym algorithm so there will be an index even when processing overriding holonyms);
** `place_desc`: a full description of the {{tl|place}} call, as specified at the top of [[Module:place]];
** `from_demonym`: If set, we are called from [[Module:demonym]], triggered by {{tl|demonym-adj}} or
{{tl|demonym-noun}}, instead of being triggered by {{tl|place}}。
* `has_neighborhoods`: If `true`, the specified placetype is city-like. This is used in the
`district_neighborhood_cat_handler` to determine whether to add a category such as `Neighborhoods in ``location`` `;
see the section just above on `cat_handler`.
5. The following preposition-related property keys are recognized:
* `preposition`: The preposition used after this placetype when it occurs as an entry placetype. Defaults to `"in"`.
* `generic_before_non_cities`: If specified, the appropriate category description handler in
[[Module:category tree/topic cat/data/Places]] will recognize categories of the form
` ``Placetype`` in/of ``location`` ` for the specified placetype and preposition, if ``location`` is a non-city. This
is used to generate descriptions for categories added by category handlers and by explicit category specs in the
placetype data. All placetypes that specify `generic_before_non_cities` or `generic_before_cities` *MUST* also specify
a value for `class` so that the category tree code can determine whether it's a political or non-political division.
* `generic_before_cities`: Like `generic_before_non_cities` but for locations referring to cities.
6. The following property keys control the auto-addition of affixes when formatting holonyms of a particular placetype:
* `affix_type`: If specified, add the placetype as an affix before or after holonyms of this placetype. Possible values
are:
*# `"pref"` (the holonym will display as `(the) placetype of Holonym`, where `the` appears when the holonym directly
follows an entry placetype);
*# `"Pref"` (same as `"pref"` but the placetype is capitalized; each word is capitalized if there are multiple);
*# `"suf"` (the holonym will display as `Holonym placetype`);
*# `"Suf"` (the holonym will display as `Holonym Placetype`, i.e. same as `"suf"` but the placetype is capitalized).
* `suffix`: String to use in place of the placetype itself when the placetype is displayed as a suffix after a holonym.
Note that `suffix` can be used independently of `affix_type` because the user can also request a suffix explicitly
using a syntax like `adr:suf/Occitania`, which will display as `Occitania region` because the placetype
`administrative region` specifies `suffix = "region"`.
* `prefix`: Like `suffix` but for use when the placetype is displayed as a prefix before the holonym.
* `affix`: Like `suffix` and `prefix` but for use when the placetype is displayed as an affix either before or after the
holonym. If both `suffix` or `prefix` and `affix` are given for a single placetype, `suffix` or `prefix` take
precedence.
* `no_affix_strings`: String or list of strings that, if they occur in the holonym, suppress the addition of any affix
requested using `affix_type`. Defaults to the placetype itself. For example, `autonomous okrug` specifies
`affix_type = "Suf"` so that `aokr/Nenets` displays as `Nenets Autonomous Okrug`, but also specifies
`no_affix_strings = "okrug"` so that `aokr/Nenets Okrug` or `aokr/Nenets Autonomous Okrug` displays as specified,
without a redundant `Autonomous Okrug` added. Matching is case-insensitive but whole-word.
* `display_handler`: A function of two arguments, `holonym_placetype` and `holonym_placename` (specifying a holonym).
Its return value is a string specifying the display form of the holonym.
7. The following property keys control the indefinite and definite articles used before entry placetypes 和/或holonyms
of the specified placetype.
* `entry_placetype_use_the`: Use `"the"` before this placetype when it occurs as an entry placetype.
* `entry_placetype_indefinite_article`: Indefinite article used before this placetype when it occurs as an entry
placetype (usually `"a"`, specifically for placetypes beginning with u- that don't take the indefinite article
`"an"`). Defaults to the appropriate indefinite article (`"a"` or `"an"` depending on whether the placetype begins
with a vowel). Overridden by `entry_placetype_use_the`, and unlike for most properties, does not apply to equivalent
placetypes (i.e. fallbacks or those formed by removing a qualifier from the beginning); only to the exact placetype
specified.
* `holonym_use_the`: Use `"the"` before holonyms of this placetype.
'''NOT誒話:'''
# The `link` property must be specified on all placetypes, except those ending in `!` (category-only placetypes), which
must have either `link` or `category_link` specified.
# Either the `class` or `former_type` property must be specified on all placetypes not ending in `!` that do not have a
fallback (if a placetype has a fallback and omits the `class` and `former_type` properties, they are taken from the
fallback). An internal error will result if a placetype has no `class` or `former_type` property derivable either
directly or through a fallback, if an attempt is made to categorize a former/ancient/historical/etc. entity of this
placetype.
# It is possible to have multiple levels of fallback (e.g. `frazione` falls back to `hamlet`, which falls back
to `village`). Fallback loops will cause an internal error. All placetypes specified as fallbacks must exist in
`placetype_data` or an internal error occurs.
]==]
export.placetype_data = {
--[=[
If you need to sort the following, do this (using Vim):
1. Make sure all full-line comments are within the { ... } table, or are moved after and on the same line as single-line
entries.
2. Make sure the table uses tabs everywhere for indent, and not spaces.
3. Mark the top of the table with `ma`, go to the bottom and execute the following two lines in sequence:
:'a,.s/\
/\
/g
:s/\
\(\ \[\)/\r\1/g
The first command converts every newline to a literal `\
` sequence, so the whole thing becomes a single line, while
the second command restores the newlines before the beginning of each entry. The effect is to convert all entries to
a single line while not losing any information. (Potentially a negative lookahead could be used to do it all in one
command.)
4. Execute the following to sort:
:'a,.!perl -pe 's/^(\ \[")(.*?)(".*)$/$2 @@@ $1$2$3/' | sort -f | perl -pe 's/.*? @@@ //'
Note that a simple `sort -f` (where `-f` means case-insensitive) would almost work, but it would sort "hill station"
before "hill" and "county borough" before "county" because the space after e.g. "hill station" sorts before the
quotation mark after e.g. "hill". The above command deals with this by extracting the key, prepending it followed by
` @@@ `, sorting, and then removing key (the classic decorate-sort-undecorate pattern).
5. Put the table back to multi-line format by marking the top of the table with `ma`, going to the bottom and executing
:'a,.s/\
/\r/g
Note that for some reason, in order to get a match a newline in the left side of a replacement, you must use \
, but
to insert a newline in the right sode of a replacement you must use \r.
]=]
["*"] = {
link = false,
cat_handler = generic_place_cat_handler,
},
["administrative atoll"] = {
-- Maldives
link = "+w:administrative divisions of the Maldives",
preposition = "of",
class = "subpolity",
},
["administrative capital"] = {
link = "w",
fallback = "capital city",
},
["administrative center"] = {
link = "w",
fallback = "non-city capital",
},
["administrative centre"] = {
link = "w",
fallback = "administrative center",
},
["administrative county"] = {
link = "w",
fallback = "county",
},
["administrative district"] = {
link = "w",
fallback = "district",
},
["administrative headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["administrative region"] = {
link = true,
preposition = "of",
suffix = "region", -- but prefix is still "administrative region (of)"
fallback = "region",
class = "subpolity",
},
["administrative seat"] = {
link = "w",
fallback = "administrative centre",
},
["administrative territory"] = {
link = "separately",
preposition = "of",
suffix = "territory", -- but prefix is still "administrative territory (of)"
fallback = "territory",
class = "subpolity",
},
["administrative unit"] = {
-- Grrr, it's difficult to generalize about "administrative units". In Albania, "administrative unit" is an
-- official term for a city-level division of municipalities; Wikipedia renders it using the more practical term
-- "commune". In Pakistan, "administrative unit" is a collective term used to refer to all the different types
-- of first-level divisions (four provinces, one federal territory, and two "disputed territories", i.e. Azad
-- Kashmir and Gilgit-Balistan, that are variously described). For this reason, we set no fallback, but we need
-- to include this so that it can be used as a placetype for Albania, categorizing as communes.
link = "w",
class = "subpolity",
},
["administrative village"] = {
link = "w",
preposition = "of",
has_neighborhoods = true,
class = "settlement",
},
["aimag"] = {
-- used in Mongolia, Russia and China (Inner Mongolia); in Mongolia,等價於 a province;
-- in China,等價於 a prefecture (below a province); in Russia,等價於 a municipal district.
link = "w",
fallback = "prefecture",
},
["airport"] = {
link = true,
class = "man-made structure",
default = {true},
},
["alliance"] = {
link = true,
fallback = "confederation",
},
["archipelago"] = {
link = true,
fallback = "island",
},
["area"] = {
link = true,
preposition = "of",
fallback = "geographic and cultural area",
-- Areas can either be administrative divisions (specifically of Kuwait) or geographic areas. Assume the former
-- when categorizing 'Areas' but the latter when handling e.g. 'historical area'.
class = "subpolity",
former_type = "geographic region",
cat_handler = district_neighborhood_cat_handler,
},
["arm"] = {
link = true,
preposition = "of",
class = "natural feature",
default = {"Seas"},
},
["arrondissement"] = {
link = true,
preposition = "of",
-- FIXME!!! Grrrrr!!! In some countries, arrondissements are divisions of cities; in others, they are divisions
-- of departments or provinces. Need to conditionalize on the country for both of the following.
class = "subpolity",
has_neighborhoods = true,
},
["associated province"] = {
link = "separately",
fallback = "province",
},
["atoll"] = {
-- FIXME! Atolls are administrative divisions of the Maldives but natural features elsewhere. Need to
-- conditionalize `class` on the country. See also `administrative atoll`.
link = true,
class = "natural feature",
bare_category_parent = "islands",
default = {true},
},
["autonomous city"] = {
link = "w",
preposition = "of",
fallback = "city",
has_neighborhoods = true,
},
["autonomous community"] = {
-- Spain; refers to regional entities, not village-like entities, as might be expected from "community"
link = true,
preposition = "of",
class = "subpolity",
},
["autonomous island"] = {
-- Comoros; seems like an administrative atoll of the Maldives.
link = "+w:autonomous islands of Comoros",
preposition = "of",
class = "subpolity",
},
["autonomous oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "oblast",
class = "subpolity",
},
["autonomous okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "okrug",
class = "subpolity",
},
["autonomous prefecture"] = {
link = true,
fallback = "prefecture",
},
["autonomous province"] = {
link = "w",
fallback = "province",
},
["autonomous region"] = {
link = "w",
preposition = "of",
fallback = "administrative region",
-- "administrative region" sets an affix of "region" but we want to display as "Tibet Autonomous Region"
-- if the user writes 'ar:Suf/Tibet'.
affix = "autonomous region",
},
["autonomous republic"] = {
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territorial unit"] = {
-- Moldova; only two of them, one for Gagauzia and one for Transnistria.
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territory"] = {
link = "w",
fallback = "dependent territory",
},
["bailiwick"] = {
-- Jersey, etc.
link = true,
fallback = "polity",
},
["barangay"] = {
-- Philippines
link = true,
class = "settlement",
-- Barangays are formal administrative divisions of a city rather than informal neighborhoods, but can use
-- some of the properties of a neighborhood.
fallback = "neighborhood",
},
["barrio"] = {
-- Spanish-speaking countries; Philippines
link = true,
-- FIXM誒話:Not completely correct, in some countries barrios are formal administrative divisions of a city.
-- `class` will need to conditionalize on the country to be completely correct.
fallback = "neighborhood",
},
["basin"] = {
link = true,
fallback = "lake",
},
["bay"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["beach"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"water"},
default = {true},
},
["beach resort"] = {
link = "w",
fallback = "resort town",
},
["bishopric"] = {
link = true,
fallback = "polity",
},
["bodies of water!"] = {
-- FIXM誒話:This is (maybe?) a type category not a name category. There should be an option for this. We need to
-- straighten out the type vs. name vs. related-to issue.
category_link = "[[body of water|水體]]",
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems", "water"},
},
["borough"] = {
link = true,
preposition = "of",
display_handler = borough_display_handler,
has_neighborhoods = true,
-- "former borough" could be a former settlement or a former part of a city but seems more likely to
-- be a former subpolity, particularly in England. FIXME, we really need a handler to take care of this
-- properly.
class = "subpolity",
-- Grr, some boroughs are city-like but some (e.g. in Britain) may be larger.
},
["borough seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["branch"] = {
link = true,
preposition = "of",
fallback = "river",
},
["bridge"] = {
link = true,
class = "man-made structure",
default = {"Named bridges"},
},
["building"] = {
link = true,
class = "man-made structure",
default = {"Named buildings"},
},
["built-up area"] = {
link = "w",
fallback = "area",
},
["burgh"] = {
link = true,
fallback = "borough",
},
["business park"] = {
link = true,
fallback = "park",
},
["caliphate"] = {
link = true,
fallback = "polity",
},
["canton"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["cape"] = {
link = true,
fallback = "headland",
},
["capital"] = {
link = true,
fallback = "capital city",
},
["capital city"] = {
link = true,
category_link = "[[capital city|首都]]: the [[seat of government|seats of government]] for a country or [[political]] [[division]] of a country",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
bare_category_parent = "cities",
cat_handler = capital_city_cat_handler,
default = {true},
-- The following is necessary so that e.g. [[Melbourne]] defined as {{place|en|capital city|s/Victoria|c/Australia}}
-- gets categorized in the bare category {{C|en|Melbourne}}; otherwise placetype 'capital city' wouldn't
-- match against the placetype 'city' of Melbourne.
fallback = "city",
},
["caplc"] = {
link = "[[capital]] and [[large]]st [[city]]",
plural_link = false,
fallback = "capital city",
},
["captaincy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["caravan city"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"ANCIENT", "FORMER"},
},
["castle"] = {
link = true,
fallback = "building",
},
["cathedral city"] = {
link = true,
fallback = "city",
},
["cattle station"] = {
-- Australia
link = true,
fallback = "farm",
},
["census area"] = {
link = true,
affix_type = "Suf",
has_neighborhoods = true,
class = "non-admin settlement",
},
["census-designated place"] = {
-- United States
link = true,
class = "non-admin settlement",
},
["census division"] = {
-- Canada
link = "w",
preposition = "of",
class = "subpolity",
},
["census town"] = {
link = "w",
fallback = "town",
},
["central business district"] = {
link = true,
fallback = "neighborhood",
},
["cercle"] = {
-- Mali
link = "+w:cercles of Mali",
preposition = "of",
class = "subpolity",
},
["ceremonial county"] = {
link = true,
fallback = "county",
},
["chain of islands"] = {
link = "[[chain]] of [[island]]s",
plural = "chains of islands",
plural_link = "[[chain]]s of [[island]]s",
fallback = "island",
},
["channel"] = {
link = true,
fallback = "strait",
},
["charter community"] = {
-- Northwest Territories, Canada
link = "w",
fallback = "village",
},
["city"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["city-state"] = {
link = true,
category_link = "[[sovereign]] [[microstate]]s consisting of a single [[city]] and [[w:dependent territory|屬地]]",
has_neighborhoods = true,
class = "settlement",
["cont/*"] = {"City-states", "Cities in +++", "Countries in +++", "National capitals"},
default = {"City-states", "Cities", "Countries", "National capitals"},
},
["civil parish"] = {
-- Mostly England; similar to municipalities
link = true,
preposition = "of",
affix_type = "suf",
has_neighborhoods = true,
class = "subpolity",
},
["claimed political division"] = {
link = "[[claim]]ed [[political]] [[division]]",
class = "subpolity",
default = {true},
},
["co-capital"] = {
link = "[[co-]][[capital]]",
fallback = "capital city",
},
["coal city"] = {
link = "+w:coal town",
fallback = "city",
},
["coal town"] = {
link = "w",
fallback = "town",
},
["collectivity"] = {
link = "w",
preposition = "of",
-- No default; these are weird one-off governmental divisions in France (esp. for overseas collectivities)
class = "subpolity",
},
["colony"] = {
link = true,
fallback = "dependent territory",
},
["comarca"] = {
-- per Wikipedia: traditional region or local administrative division found in Portugal, Spain, and some of
-- their former colonies, like Brazil, Nicaragua, and Panama. In the Valencian Community, for example, it
-- sits between municipalities and provinces, something like a county or district.
link = true,
preposition = "of",
class = "subpolity",
},
["commandery"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["commonwealth"] = {
link = true,
preposition = "of",
-- No default; applies specifically to Puerto Rico
class = "subpolity",
},
["commune"] = {
link = true,
fallback = "municipality",
},
["community"] = {
link = true,
category_link = "[[community|社區]] of all sizes",
fallback = "village",
},
["community development block"] = {
-- in India; appears to be similar to a rural municipality; groups several villages, unclear if there will be
-- neighborhoods so I'm not setting `has_neighborhoods` for now
link = "w",
affix_type = "suf",
no_affix_strings = "block",
class = "subpolity",
},
["comune"] = {
-- Italy, Switzerland
link = true,
fallback = "municipality",
},
["condominium"] = {
link = true,
fallback = "polity",
},
["confederacy"] = {
link = true,
fallback = "confederation",
},
["confederation"] = {
link = true,
fallback = "polity",
},
["constituency"] = {
-- currently we have them as political divisions of Namibia but many countries have them
link = true,
preposition = "of",
class = "subpolity",
},
["constituent country"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["constituent part"] = {
link = "separately",
preposition = "of",
class = "subpolity",
},
["constituent republic"] = {
-- Of Russia, Yugoslavia, etc.
link = "separately",
preposition = "of",
class = "subpolity",
},
["counties and county-level cities!"] = {
-- This is used when grouping counties and county-level cities under prefecture-level cities in China.
category_link = "[[county|counties]] and [[county-level city|county-level cities]]",
class = "subpolity",
},
["continent"] = {
link = true,
category_link = false, -- can't occur as a bare category
class = "natural feature",
default = {"Continents and continental regions"},
},
["continental region"] = {
link = "separately",
category_link = false, -- can't occur as a bare category
class = "geographic region",
fallback = "continent",
},
["continents and continental regions!"] = {
category_link = "[[continent]]s and [[continent]]-[[level]] [[region]]s (e.g. [[Polynesia]])",
class = "geographic region",
},
["council area"] = {
link = true,
-- in Scotland; similar to a county
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["country"] = {
link = true,
class = "polity",
["cont/*"] = {true, "Countries"},
default = {true},
},
["country-like entities!"] = {
category_link = "[[polity|政體]] not normally considered [[country|國家]] but treated similarly for categorization purposes; typically, [[unrecognized]] [[de-facto]] countries or [[w:dependent territory|屬地]]",
class = "polity",
},
["county"] = {
link = true,
preposition = "of",
display_handler = county_display_handler,
class = "subpolity",
},
["county borough"] = {
link = true,
-- in Wales; similar to a county
preposition = "of",
affix_type = "suf",
fallback = "borough",
class = "subpolity",
},
["county seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["county town"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
fallback = "town",
has_neighborhoods = true,
class = "capital",
},
["county-administered city"] = {
-- In Taiwan, per Wikipedia similar to a Taiwanese township or district, which is a small city.
-- NOT anything like a "county-level city" in PR China, which is a county masquerading as a city.
link = "w",
fallback = "city",
has_neighborhoods = true,
class = "settlement",
},
["county-controlled city"] = {
-- Taiwan
link = "w",
fallback = "county-administered city",
},
["county-level city"] = {
-- PR China
link = "w",
fallback = "prefecture-level city",
},
["crater lake"] = {
link = true,
fallback = "lake",
},
["creek"] = {
link = true,
fallback = "stream",
},
["Crown colony"] = {
link = "+crown colony",
fallback = "crown colony",
},
["crown colony"] = {
link = true,
fallback = "colony",
},
["Crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["cultural area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["cultural region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["delegation"] = {
-- Tunisia
link = "+w:delegations of Tunisia",
preposition = "of",
class = "subpolity",
},
["department"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["departmental capital"] = {
link = "separately",
fallback = "capital city",
},
["dependency"] = {
link = true,
fallback = "dependent territory",
},
["dependent territory"] = {
link = "w",
preposition = "of",
class = "subpolity",
former_type = "dependent territory",
bare_category_parent = "political divisions",
["country/*"] = {true},
default = {true},
},
["desert"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems"},
default = {true},
},
["deserted mediaeval village"] = {
link = "w",
fallback = "deserted medieval village",
},
["deserted medieval village"] = {
link = "w",
fallback = "ANCIENT settlement",
},
["direct-administered municipality"] = {
-- China
link = "+w:direct-administered municipalities of China",
fallback = "municipality",
},
["direct-controlled municipality"] = {
-- several countries
link = "w",
fallback = "municipality",
},
["distributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["district"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- Grrr! FIXME! Here is where we need handlers for `class`. Using similar logic to
-- district_neighborhood_cat_handler, we need to check if we're below or above a city to determine if the class
-- is "settlement" or "subpolity".
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
-- No default. Countries for which districts are political divisions will get entries.
},
["districts and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Portugal.
category_link = "[[district]]s and [[autonomous region]]s",
class = "subpolity",
},
["districts and autonomous territorial units!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Moldova.
category_link = "[[district]]s and [[w:autonomous territorial unit|autonomous territorial unit]]s",
class = "subpolity",
},
["district capital"] = {
link = "separately",
fallback = "capital city",
},
["district headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["district municipality"] = {
-- In Canada, a district municipality is equivalent to a rural municipality and won't have neighborhoods; in
-- South Africa, district municipalities group local municipalities and hence won't have neighborhoods.
link = "w",
preposition = "of",
affix_type = "suf",
no_affix_strings = {"district", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["division"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["division capital"] = {
link = "separately",
fallback = "capital city",
},
["dome"] = {
link = true,
fallback = "mountain",
},
["dormant volcano"] = {
link = true,
fallback = "volcano",
},
["duchy"] = {
link = true,
fallback = "polity",
},
["emirate"] = {
link = true,
preposition = "of",
-- FIXM誒話:Can be subpolities (of the United Arab Emirates).
fallback = "polity",
},
["empire"] = {
link = true,
fallback = "polity",
},
["enclave"] = {
link = true,
preposition = "of",
-- Enclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["entity"] = {
-- Bosnia and Herzegovina
link = "+w:entities of Bosnia and Herzegovina",
preposition = "of",
class = "subpolity",
},
["escarpment"] = {
link = true,
fallback = "mountain",
},
["ethnographic region"] = {
-- used in Lithuania
link = "+w:ethnographic regions of Lithuania",
fallback = "geographic and cultural area",
},
["exclave"] = {
link = true,
preposition = "of",
-- exclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["external territory"] = {
link = "separately",
fallback = "dependent territory",
},
["farm"] = {
link = true,
class = "non-admin settlement",
default = {"Farms and ranches"},
},
["farms and ranches!"] = {
category_link = "[[farm]]s and [[ranch]]es",
class = "non-admin settlement",
},
["federal city"] = {
link = "w",
preposition = "of",
fallback = "city",
},
["federal district"] = {
link = true,
preposition = "of",
-- Might have neighborhoods as federal districts are often cities (e.g. Mexico City)
has_neighborhoods = true,
class = "settlement",
},
["federal subject"] = {
-- In Russia; a generic term for first-level administrative divisions (republics, oblasts, okrugs, krais,
-- autonomous okrugs and autonomous oblasts).
link = "w",
preposition = "of",
class = "subpolity",
},
["federal territory"] = {
link = "w",
fallback = "territory",
},
["fictional location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["First Nations reserve"] = {
-- Canada
link = "[[First Nations]] [[w:Indian reserve|reserve]]",
-- Wikipedia uses "Indian reserve"; presumably that is the legal term
fallback = "Indian reserve",
class = "subpolity",
},
["fjord"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["footpath"] = {
link = true,
fallback = "road",
},
["forest"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems", "forestry"},
default = {true},
},
["fort"] = {
link = true,
fallback = "building",
},
["fortress"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- fortresses -> fortresse, so put an entry here to ensure we singularize correctly.
plural = "fortresses",
fallback = "building",
},
["frazione"] = {
link = "w",
fallback = "hamlet",
},
["freeway"] = {
link = true,
fallback = "road",
},
["French prefecture"] = {
link = "[[w:prefectures in France|prefecture]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["geographic and cultural area"] = {
link = "+w:cultural area",
-- `generic_before_non_cities` is used when generating the category description of categories of the format
-- `Geographic and cultural areas of PLACE`. `preposition` is used when generating {{place}} description and
-- categories for any placetype that falls back to `geographic and cultural area`.
generic_before_non_cities = "of",
preposition = "of",
class = "geographic region",
bare_category_parent = "places",
["country/*"] = {true},
["constituent country/*"] = {true},
["cont/*"] = {true},
default = {true},
},
["geographic area"] = {
link = "+w:geographic region",
fallback = "geographic and cultural area",
},
["geographic region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geopolitical zone"] = {
-- Nigeria
link = true,
preposition = "of",
class = "subpolity",
},
["gewog"] = {
-- Bhutan
link = true,
preposition = "of",
class = "subpolity",
},
["ghost town"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
bare_category_parent = "former settlements",
cat_handler = city_type_cat_handler,
default = {true},
},
["glen"] = {
link = true,
fallback = "valley",
},
["governorate"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["greater administrative region"] = {
-- China (former division)
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["gromada"] = {
-- Poland (former division)
link = "w",
preposition = "of",
affix_type = "Pref",
class = "subpolity",
inherently_former = {"FORMER"},
},
["group of islands"] = {
link = "[[group]] of [[island]]s",
plural = "groups of islands",
plural_link = "[[group]]s of [[island]]s",
fallback = "island group",
},
["gulf"] = {
link = true,
preposition = "of",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["hamlet"] = {
link = true,
fallback = "village",
},
["harbor city"] = {
link = "separately",
fallback = "city",
},
["harbor town"] = {
link = "separately",
fallback = "town",
},
["harbour city"] = {
link = "separately",
fallback = "city",
},
["harbour town"] = {
link = "separately",
fallback = "town",
},
["headland"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["headquarters"] = {
link = "w",
fallback = "administrative centre",
},
["heath"] = {
link = true,
fallback = "moor",
},
["hemisphere"] = {
link = true,
entry_placetype_use_the = true,
fallback = "continental region",
},
["highway"] = {
link = true,
fallback = "road",
},
["hill"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["hill station"] = {
link = "w",
fallback = "town",
},
["hill town"] = {
link = "w",
fallback = "town",
},
["historic region"] = {
-- provided only for the link
link = "+w:historical region",
fallback = "FORMER geographic region",
},
["historical county"] = {
-- needed for historical counties of England/etc.
link = "+w:historic county",
fallback = "FORMER subpolity",
},
["historical region"] = {
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["home rule city"] = {
link = "w",
fallback = "city",
},
["home rule municipality"] = {
link = "w",
fallback = "municipality",
},
["hot spring"] = {
link = true,
fallback = "spring",
},
["house"] = {
link = true,
fallback = "building",
},
["housing estate"] = {
-- not the same as a housing project (i.e. public housing)
link = true,
-- not exactly the case but approximately
fallback = "neighborhood",
},
["hromada"] = {
-- Ukraine
link = "w",
disallow_in_entries = "Use placetype 'urban hromada', 'rural hromada' or 'settlement hromada' in place of bare 'hromada'",
disallow_in_holonyms = "Use placetype 'urban hromada'/'uhrom', 'rural hromada'/'rhrom' or 'settlement hromada'/'shrom' in place of bare 'hromada'",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["inactive volcano"] = {
link = "w",
fallback = "dormant volcano",
},
["independent city"] = {
link = true,
fallback = "city",
},
["independent town"] = {
link = "+independent city",
fallback = "town",
},
["Indian reservation"] = {
link = "w",
-- In the US. Also known as "Native American reservation" or "domestic dependent nation", and the reservations
-- themselves often use the term "nation" in their official name (e.g. the "Navajo Nation"). But Wikipedia puts
-- the article at [[w:Indian reservation]] and uses that term when describing e.g. what the Navajo Nation is,
-- so this must still be the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["Indian reserve"] = {
link = "w",
-- In Canada. "First Nations reserve" sounds more modern/PC but Wikipedia uses "Indian reserve"; presumably that
-- is still the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["inland sea"] = {
-- note, we also have 'inland' as a qualifier
link = true,
fallback = "sea",
},
["inner city area"] = {
link = "[[inner city]] [[area]]",
fallback = "neighborhood",
},
["island"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["island country"] = {
-- FIXM誒話:The following should map to both 'island' and 'country'.
link = "w",
fallback = "country",
},
["island group"] = {
link = "separately",
fallback = "island",
},
["island municipality"] = {
link = "w",
fallback = "municipality",
},
["islet"] = {
link = "w",
fallback = "island",
},
["Israeli settlement"] = {
link = "w",
class = "settlement",
default = {true},
},
["judicial capital"] = {
link = "w",
fallback = "capital city",
},
["khanate"] = {
link = true,
fallback = "polity",
},
["kibbutz"] = {
link = true,
plural = "kibbutzim",
class = "non-admin settlement",
default = {true},
},
["kingdom"] = {
link = true,
fallback = "monarchy",
},
["krai"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["lake"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["landforms!"] = {
category_link = "[[landform]]s",
bare_category_parent = "places",
addl_bare_category_parents = {"Earth"},
},
["largest city"] = {
link = "[[large]]st [[city]]",
entry_placetype_use_the = true,
fallback = "city",
has_neighborhoods = true,
},
["league"] = {
link = true,
fallback = "confederation",
},
["legislative capital"] = {
link = "separately",
fallback = "capital city",
},
["library"] = {
link = true,
fallback = "building",
},
["lieutenancy area"] = {
-- used in the United Kingdom; per Wikipedia:
-- In England, lieutenancy areas are colloquially known as the ceremonial counties, although this phrase does
-- not appear in any legislation referring to them. The lieutenancy areas of Scotland are subdivisions of
-- Scotland that are more or less based on the counties of Scotland, making use of the major cities as separate
-- entities.[2] In Wales, the lieutenancy areas are known as the preserved counties of Wales and are based on
-- those used for lieutenancy and local government between 1974 and 1996. The lieutenancy areas of Northern
-- Ireland correspond to the six counties and two former county boroughs.[3]
link = "w",
fallback = "ceremonial county",
},
["local authority district"] = {
link = "w",
fallback = "local government district",
},
["local government area"] = {
-- Australia
link = "w",
preposition = "of",
class = "subpolity",
},
["local council"] = {
-- Malta; similar to municipalities
link = "+w:local councils of Malta",
preposition = "of",
fallback = "municipality",
},
["local government district"] = {
link = "w",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local government district with borough status"] = {
link = "[[w:local government district|local government district]] with [[w:borough status|borough status]]",
plural = "local government districts with borough status",
plural_link = "[[w:local government district|local government districts]] with [[w:borough status|borough status]]",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local urban district"] = {
link = "w",
fallback = "unincorporated community",
},
["locality"] = {
link = "+w:locality (settlement)",
-- not necessarily true, but usually is the case
fallback = "village",
},
["London borough"] = {
link = "w",
preposition = "of",
affix_type = "pref",
affix = "borough",
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["macroregion"] = {
link = true,
fallback = "region",
},
["man-made structures!"] = {
category_link = "[[w:geographical feature#Engineered constructs|man-made structures]] such as [[airport]]s, [[university|大學]] and [[metro station]]s",
bare_category_parent = "places",
},
["manor"] = {
-- FIXM誒話:or is this more like a farm?
link = true,
fallback = "building",
},
["marginal sea"] = {
link = true,
preposition = "of",
fallback = "sea",
},
["market city"] = {
link = "+market town",
fallback = "city",
},
["market town"] = {
link = true,
fallback = "town",
},
["massif"] = {
link = true,
fallback = "mountain",
},
["megacity"] = {
link = true,
fallback = "city",
},
["metro station"] = {
link = true,
class = "man-made structure",
},
["metropolitan borough"] = {
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"borough", "city"},
fallback = "local government district",
has_neighborhoods = true,
},
["metropolitan city"] = {
-- These exist e.g. in Italy and are more like municipalities or even provinces than cities.
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"metropolitan", "city"},
class = "subpolity",
},
["metropolitan county"] = {
link = true,
fallback = "county",
},
["metropolitan municipality"] = {
-- In South Africa, metropolitan municipalities group local municipalities and are like districts, between
-- provinces and municipalities.
-- In Turkey, metropolitan municipalities are provinces-level.
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"metropolitan", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["microdistrict"] = {
-- residential complex in post-Soviet states
link = true,
fallback = "neighborhood",
},
["micronations!"] = {
-- FIXME, merge with microstate
category_link = "[[micronation]]s",
bare_category_parent = "countries",
},
["microstate"] = {
link = true,
fallback = "country",
},
["military base"] = {
link = "w",
class = "settlement", -- or "man-made structure"?
default = {true},
},
["minster town"] = {
-- England
link = "separately",
fallback = "town",
},
["monarchy"] = {
link = true,
fallback = "polity",
},
["moor"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems"},
default = {true},
},
["moorland"] = {
link = true,
fallback = "moor",
},
["motorway"] = {
link = true,
fallback = "road",
},
["mountain"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["mountain indigenous district"] = {
-- Taiwan
link = "+w:district (Taiwan)",
fallback = "district",
},
["mountain indigenous township"] = {
-- Taiwan
link = "+w:township (Taiwan)",
fallback = "township",
},
["mountain pass"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "mountain passes",
class = "natural feature",
addl_bare_category_parents = {"mountains"},
default = {true},
},
["mountain range"] = {
link = true,
fallback = "mountain",
},
["mountainous region"] = {
link = "separately",
fallback = "region",
},
["mukim"] = {
-- Malaysia, Brunei, Indonesia, Singapore
link = true,
preposition = "of",
class = "subpolity",
},
["municipal district"] = {
link = "w",
-- meaning varies depending on the country; for now, assume no neighborhoods.
-- FIXM誒話:has_neighborhoods might have to be a function that looks at the containing holonyms.
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "municipality",
},
["municipality"] = {
link = true,
preposition = "of",
has_neighborhoods = true,
class = "subpolity",
},
["municipality with city status"] = {
link = "[[municipality]] with [[w:city status|city status]]",
plural = "municipalities with city status",
plural_link = "[[municipality|municipalities]] with [[w:city status|city status]]",
fallback = "municipality",
},
["museum"] = {
link = true,
fallback = "building",
},
["mythological location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["named bridges!"] = {
category_link = "notable [[bridge]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"bridges"},
},
["named buildings!"] = {
category_link = "notable [[house]]s, [[library|libraries]] and other [[building]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"buildings"},
},
["named roads!"] = {
category_link = "notable [[road]]s, [[highway]]s, [[trail]]s and similar linear structures",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"roads"},
},
["national capital"] = {
link = "w",
fallback = "capital city",
},
["national park"] = {
link = true,
fallback = "park",
},
["natural features!"] = {
category_link = "[[w:geographical feature#Natural features|natural features]] such as [[lake]]s, [[mountain]]s, [[island]]s and [[ocean]]s",
bare_category_parent = "places",
},
["neighborhood"] = {
-- The majority of the properties here apply to both `neighborhoods` and `neighbourhoods`; the choice of which
-- one to use is made by district_neighborhood_cat_handler() based on the value of `british_spelling` for the
-- location (city, political division, etc.) of the holonym that follows the word "neighbo(u)hoods" in the
-- category name. It does *NOT* depend on whether the {{place}} call uses "neighborhoods" or "neighbourhoods".
-- (In general it can't, because other things like "urban areas", "districts", "subdivisions" and the like also
-- categorize as neighbo(u)rhoods.)
link = true,
-- See below. These are used by category handlers in [[Module:category tree/topic cat/data/Places]].
generic_before_non_cities = "in",
generic_before_cities = "of",
-- The following text is suitable for the top-level description of a neighborhood as well as categories of the
-- form `Neighborhoods in POLDIV` e.g. `Neighborhoods in Illinois, USA` but not for categories of the form
-- `Neighborhoods of Chicago`, where we'd get "... and other subportions of [[city|城市]] of [[Chicago]]".
category_link = "[[neighborhood]]s, [[district]]s and other subportions of [[city|城市]]",
category_link_before_city = "[[neighborhood]]s, [[district]]s and other subportions",
-- NOT誒話:This setting is needed for administrative divisions like barangays that fall back to `neighborhood`,
-- when set in [[Module:place/locations]] for a specific country (e.g. the Philippines). The above settings
-- for `generic_before_non_cities` and `generic_before_cities` are used by category handlers in
-- [[Module:category tree/topic cat/data/Places]] for `Neighborhoods in POLDIV` and `Neighborhoods of CITY`
-- categories. In fact, district_neighborhood_cat_handler() does not currently pay attention to them, but
-- generates "of" before cities and "in" before non-cities regardless. (FIXM誒話:We should change that.)
preposition = "of",
class = "non-admin settlement",
cat_handler = district_neighborhood_cat_handler,
},
["neighbourhood"] = {
link = true,
category_link = "[[neighbourhood]]s, [[district]]s and other subportions of [[city|城市]]",
category_link_before_city = "[[neighbourhood]]s, [[district]]s and other subportions",
fallback = "neighborhood",
},
["new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
preposition = "in",
class = "subpolity", --?
},
["new town"] = {
link = true,
fallback = "town",
},
["non-city capital"] = {
link = "[[capital]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
cat_handler = function(data)
return capital_city_cat_handler(data, "non-city")
end,
-- FIXME, do we need the following?
default = {true},
},
["non-metropolitan county"] = {
link = "w",
fallback = "county",
},
["non-metropolitan district"] = {
link = "w",
fallback = "local government district",
},
["non-sovereign kingdom"] = {
-- especially in Africa and Asia
link = "+w:non-sovereign monarchy",
generic_before_non_cities = "in",
class = "subpolity",
["country/*"] = {true},
["cont/*"] = {true},
default = {true},
},
["non-sovereign monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["oblasts and autonomous republics!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Ukraine.
category_link = "[[oblast]]s and [[w:autonomous republic|autonomous republic]]s",
class = "subpolity",
},
["ocean"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"seas", "bodies of water"},
default = {true},
},
["okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["overseas collectivity"] = {
link = "w",
fallback = "collectivity",
},
["overseas department"] = {
link = "w",
fallback = "department",
},
["overseas territory"] = {
link = "w",
fallback = "dependent territory",
},
["parish"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["parish municipality"] = {
-- in Quebec, often similar to a rural village; the famous [[Saint-Louis-du-Ha! Ha!]] is one of them.
link = "+w:parish municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true,
},
["parish seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
class = "capital",
has_neighborhoods = true,
},
["park"] = {
link = true,
class = "man-made structure",
default = {true},
},
["pass"] = {
link = "+mountain pass",
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "passes",
fallback = "mountain pass",
},
["path"] = {
link = true,
fallback = "road",
},
["peak"] = {
link = true,
fallback = "mountain",
},
["peninsula"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["periphery"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["places!"] = {
generic_before_non_cities = "in",
generic_before_cities = "in",
class = "generic place",
category_link = "[[place]]s of all sorts",
-- `category_link_top_level` control the description used in the top-level [[Category:Places]] and
-- language-specific variants such as {{C|en|地點}}。The actual text for a language-spefic variant is
-- "{{{langname}}} names of [[geographical]] [[place]]s of all sorts; [[toponym]]s." where the "names of"
-- portion is automatically generated by the appropriate handler in
-- [[Module:category tree/topic cat/data/Places]].
category_link_top_level = "[[geographical]] [[place]]s of all sorts; [[toponym]]s",
bare_category_parent = "names",
},
["planned community"] = {
-- Include this so we don't categorize 'planned community' into villages, as 'community' does.
link = true,
class = "settlement",
has_neighborhoods = true,
},
["plateau"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
-- FIXM誒話:Should generate both "Plateaus" and the appropriate 'geographic and cultural area' category
},
["Polish colony"] = {
link = "[[w:colony (Poland)|colony]]",
affix_type = "suf",
affix = "colony",
fallback = "village",
has_neighborhoods = true,
},
["political divisions!"] = {
category_link = "[[political]] [[division]]s and [[subdivision]]s, such as [[state]]s, [[province]]s, [[county|counties]] or [[district]]s",
bare_category_parent = "places",
},
["polity"] = {
link = true,
category_link = "[[independent]] or [[semi-]][[independent]] [[polity|政體]]",
class = "polity",
bare_category_parent = "places",
default = {true},
},
["populated place"] = {
link = "+w:populated place",
-- not necessarily true, but usually is the case
fallback = "village",
},
["port"] = {
link = true,
class = "man-made structure",
default = {true},
},
["port city"] = {
-- FIXM誒話:should categorize into "Ports" as well as "Cities"
link = true,
fallback = "city",
},
["port town"] = {
-- FIXM誒話:should categorize into "Ports" as well as "Towns"
link = "w",
fallback = "town",
},
["prefecture"] = {
-- FIXME! `prefecture` is like a county in Japan and elsewhere but a department capital city in France.
-- May need `has_neighborhoods` to be a function.
link = true,
preposition = "of",
display_handler = prefecture_display_handler,
class = "subpolity",
},
["prefecture-level city"] = {
-- China; they are huge entities with a central city; not cities themselves.
link = "w",
preposition = "of",
class = "subpolity",
},
["preserved county"] = {
-- In Wales; they are former counties enshrined in law; there are 8 of them and each consists of one or more
-- "principal areas" (styled as "counties" or "county boroughs"), of which there are 22.
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["primary area"] = {
-- a grouping of "districts" (neighborhoods) in Gothenburg, Sweden
link = "+w:sv:primärområde",
fallback = "neighborhood",
},
["principality"] = {
link = true,
fallback = "monarchy",
},
["promontory"] = {
link = true,
fallback = "headland",
},
["protectorate"] = {
link = true,
fallback = "dependent territory",
},
["province"] = {
link = true,
preposition = "of",
display_handler = province_display_handler,
class = "subpolity",
},
["provinces and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case China.
category_link = "[[province]]s and [[autonomous region]]s",
class = "subpolity",
},
["provinces and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Canada and Pakistan.
category_link = "[[province]]s and [[territory|territories]]",
class = "subpolity",
},
["provincial capital"] = {
link = "separately",
fallback = "capital city",
},
["raion"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["ranch"] = {
link = true,
fallback = "farm",
},
["range"] = {
-- FIXM誒話:Where is this used? Is it a mountain range?
link = true,
holonym_use_the = true,
class = "natural feature",
},
["regency"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["region"] = {
link = true,
preposition = "of",
-- If 'region' isn't a specific administrative division, fall back to 'geographic and cultural area'
fallback = "geographic and cultural area",
-- "former region" is a subpolity but traditional/historic(al)/ancient/medieval/etc. is a geographic region
class = "geographic region",
},
["regional capital"] = {
link = "separately",
fallback = "capital city",
},
["regional county municipality"] = {
-- Quebec
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"municipality", "county"},
fallback = "municipality",
},
["regional district"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "district",
},
["regional municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
},
["regional unit"] = {
link = "w",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["registration county"] = {
-- Used in Scotland for land registration purposes; formerly used in England, Wales and Ireland for statistical
-- purposes (registration of births, deaths and marriages, and for the output of census information).
link = "w",
fallback = "county",
},
["republic"] = {
-- Of Russia, Yugoslavia, etc. "Republics" in general are sovereign but we use "country" in that case.
link = true,
fallback = "constituent republic",
},
["research base"] = {
link = "+w:research station",
fallback = "research station",
},
["research station"] = {
link = "w",
class = "non-admin settlement", -- or "man-made structure"?
default = {true},
},
["reservoir"] = {
link = true,
fallback = "lake",
},
["residential area"] = {
link = "separately",
fallback = "neighborhood",
},
["resort city"] = {
link = "w",
fallback = "city",
},
["resort town"] = {
link = "w",
fallback = "town",
},
["river"] = {
link = true,
generic_before_non_cities = "in",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
cat_handler = city_type_cat_handler,
["cont/*"] = {true},
default = {true},
},
["river island"] = {
link = "w",
fallback = "island",
},
["road"] = {
link = true,
class = "man-made structure",
default = {"Named roads"},
},
["Roman province"] = {
-- FIXME! Eliminate this in favor of 'former province|emp/Roman Empire'
link = "w",
default = {"Provinces of the Roman Empire"},
class = "subpolity",
},
["royal borough"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"royal", "borough"},
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["royal burgh"] = {
link = true,
fallback = "borough",
},
["royal capital"] = {
link = "w",
fallback = "capital city",
},
["rural committee"] = {
-- Hong Kong; a group of villages
link = "w",
affix_type = "Suf",
has_neighborhoods = true,
class = "settlement",
},
["rural community"] = {
-- New Brunswick
link = "+w:list of municipalities in New_Brunswick#Rural communities",
fallback = "municipality",
},
["rural hromada"] = {
link = "[[rural]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["rural municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
has_neighborhoods = true, --?
},
["rural township"] = {
-- Taiwan
link = "+w:rural township (Taiwan)",
fallback = "township",
},
["sanctuary"] = {
link = true,
fallback = "temple",
},
["satrapy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["sea"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["seaport"] = {
link = true,
fallback = "port",
},
["seat"] = {
link = true,
fallback = "administrative centre",
},
["self-administered area"] = {
-- Myanmar (groups self-administered divisions and zones)
link = "+w:self-administered zone",
preposition = "of",
class = "subpolity",
},
["self-administered division"] = {
-- Myanmar (only one of them: Wa Self-Administered Division)
link = "w",
fallback = "self-administered area",
},
["self-administered zone"] = {
-- Myanmar (five of them)
link = "w",
fallback = "self-administered area",
},
["separatist state"] = {
link = "separately",
fallback = "unrecognized country",
},
["settlement"] = {
link = true,
category_link = "[[settlement]]s such as [[city|城市]], [[village]]s and [[farm]]s",
bare_category_parent = "places",
-- not necessarily true, but usually is the case
fallback = "village",
},
["settlement hromada"] = {
link = "[[w:Populated places in Ukraine#Rural settlements|settlement]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["sheading"] = {
-- Isle of Man
link = true,
fallback = "district",
},
["sheep station"] = {
-- Australia
link = true,
fallback = "farm",
},
["shire"] = {
link = true,
fallback = "county",
},
["shire county"] = {
link = "w",
fallback = "county",
},
["shire town"] = {
link = true,
fallback = "county seat",
},
["ski resort city"] = {
link = "[[ski resort]] [[city]]",
fallback = "city",
},
["ski resort town"] = {
link = "[[ski resort]] [[town]]",
fallback = "town",
},
["spa city"] = {
link = "+w:spa town",
fallback = "city",
},
["spa town"] = {
link = "w",
fallback = "town",
},
["space station"] = {
link = true,
fallback = "research station",
},
["special administrative region"] = {
-- in China; in practice they are city-like (Hong Kong, Macau); also [[Oecusse]] in East Timor is formally a
-- "special administrative region"; North Korea had one such region planned (Sinuiju) but abandoned; Indonesia
-- has similar "special regions" of Jakarta, Yogyakarta and Aceh; and South Sudan has three "special
-- administrative areas"
link = "+w:special administrative regions of China",
preposition = "of",
class = "subpolity",
has_neighborhoods = true, --?
-- no suffix since places in Hong Kong or Macau are listed without China, except Hong Kong and Macau themselves
-- they also contain regions (or areas), e.g. [[Kowloon]], so it would be confusing
suffix = "",
},
["special collectivity"] = {
link = "w",
fallback = "collectivity",
},
["special municipality"] = {
-- formerly linked to the Taiwan article but there are also special municipalities of the Netherlands
link = "w",
fallback = "municipality",
},
["special ward"] = {
-- Tokyo
link = true,
fallback = "municipality",
},
["spit"] = {
link = true,
fallback = "peninsula",
},
["spring"] = {
link = true,
class = "natural feature",
default = {true},
},
["star"] = {
link = true,
class = "natural feature",
default = {true},
},
["state"] = {
link = true,
preposition = "of",
class = "subpolity",
-- 'former/historical state' could refer either to a state of a country (a division) or a state = sovereign
-- entity. The latter appears more common (e.g. in various "ancient states" of East Asia).
former_type = "polity",
},
["states and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Australia.
category_link = "[[state]]s and [[territory|territories]]",
class = "subpolity",
},
["states and union territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case India.
category_link = "[[state]]s and [[union territory|union territories]]",
class = "subpolity",
},
["state capital"] = {
link = true,
fallback = "capital city",
},
["state park"] = {
link = true,
fallback = "park",
},
["state-level new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
fallback = "new area",
},
["statistical region"] = {
-- Slovenia
link = true,
fallback = "administrative region",
},
["statutory city"] = {
link = "w",
fallback = "city",
},
["statutory town"] = {
link = "w",
fallback = "town",
},
["strait"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["stream"] = {
link = true,
fallback = "river",
},
["street"] = {
link = true,
fallback = "road",
},
["strip"] = {
link = true,
fallback = "geographic region",
},
["strip of land"] = {
link = "[[strip]] of [[land]]",
plural = "strips of land",
plural_link = "[[strip]]s of [[land]]",
fallback = "geographic region",
},
["sub-metropolitan city"] = {
link = "+w:List of cities in Nepal#Sub-metropolitan cities",
fallback = "city",
},
["sub-prefectural city"] = {
link = "w",
fallback = "subprovincial city",
},
["subdistrict"] = {
link = true,
preposition = "of",
has_neighborhoods = true, --?
-- FIXM誒話:subdistricts can be neighborhood-like (of Jakarta) or larger (in China); need a handler
class = "subpolity",
default = {true},
},
["subdivision"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- FIXM誒話:subdivisions can be neighborhood-like or larger; need a handler
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
},
["submerged ghost town"] = {
-- FIXM誒話:Consider just having "submerged" as a qualifier.
link = "[[submerged]] [[ghost town]]",
fallback = "ghost town",
},
["subnational kingdom"] = {
link = "+w:subnational monarchy",
fallback = "non-sovereign kingdom",
},
["subnational monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["subprefecture"] = {
link = true,
affix_type = "suf",
preposition = "of",
class = "subpolity",
},
["subprovince"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["subprovincial city"] = {
link = "w",
-- China; special status given to certain prefecture-level cities
fallback = "prefecture-level city",
},
["subprovincial district"] = {
link = "w",
-- China; special status given to Binhai New Area and Pudong New Area, which are county-level districts
preposition = "of",
class = "subpolity",
},
["subregion"] = {
link = true,
fallback = "geographic region",
},
["suburb"] = {
link = true,
-- The following text is suitable for the top-level description of a suburb as well as categories of the form
-- 'Suburbs in POLDIV' e.g. 'Suburbs in Illinois, USA' but not for categories of the form 'Suburbs of Chicago',
-- where we'd get "[[suburb]]s of [[city|城市]] of [[Chicago]]".
category_link = "[[suburb]]s of [[city|城市]]",
category_link_before_city = "[[suburb]]s",
-- See comments under "neighborhood" for the following three settings. They are used by
-- [[Module:category tree/topic cat/data/Places]] for generating the text of 'Suburbs in/of PLACE' categories
-- but currently ignored by district_neighborhood_cat_handler (which actually generates the categories for a
-- given page), which hardcodes "in" for non-cities and "of" for cities. (FIXM誒話:Change this.)
generic_before_non_cities = "in",
generic_before_cities = "of",
preposition = "of",
has_neighborhoods = true, --?
class = "non-admin settlement", --?
cat_handler = district_neighborhood_cat_handler,
},
["suburban area"] = {
link = "w",
fallback = "suburb",
},
["subway station"] = {
link = "w",
fallback = "metro station",
},
["sum"] = {
-- In China, Mongolia, Russia; something like a county in Mongolia but a township in China (Inner Mongolia),
-- and equivalent to a [[selsoviet]] in the parts of Russia where it's in use (a rural council, below a raion).
link = "+w:sum (administrative division)",
-- This fallback is somewha arbitrary. We could use "county" but that has a display handler
-- which we don't want to be active (FIXM誒話:If the display handler would be active, that's a bug).
fallback = "division",
},
["supercontinent"] = {
link = true,
fallback = "continent",
},
["tehsil"] = {
link = true,
affix_type = "suf",
no_affix_strings = {"tehsil", "tahsil"},
class = "subpolity",
},
["temple"] = {
link = true,
fallback = "building",
},
["territorial authority"] = {
link = "w",
fallback = "district",
},
["territory"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["theme"] = {
link = "+w:theme (Byzantine district)",
preposition = "of",
class = "subpolity",
},
["town"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["town with bystatus"] = {
-- can't use templates in links currently
link = "[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]",
plural = "towns with bystatus",
plural_link = "[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]",
fallback = "town",
},
["township"] = {
link = true,
has_neighborhoods = true,
class = "settlement", --?
default = {true},
},
["township municipality"] = {
-- Quebec
link = "+w:township municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["traditional county"] = {
link = true,
fallback = "county",
},
["traditional region"] = {
-- FIXM誒話:Verify this works. Same for 'historic(al) region'.
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["trail"] = {
link = true,
fallback = "road",
},
["treaty port"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"FORMER"},
},
["tributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["underground station"] = {
link = "w",
fallback = "metro station",
},
["unincorporated area"] = {
link = "w",
-- I don't know if this fallback makes sense everywhere.
fallback = "unincorporated community",
},
["unincorporated community"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
},
["unincorporated territory"] = {
link = "w",
fallback = "territory",
},
["union territory"] = {
-- India
link = true,
preposition = "of",
entry_placetype_indefinite_article = "a",
class = "subpolity",
},
["unitary authority"] = {
-- UK, New Zealand
link = true,
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["unitary district"] = {
link = "w",
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["united township municipality"] = {
-- Quebec
link = "+w:united township municipality (Quebec)",
entry_placetype_indefinite_article = "a",
fallback = "township municipality",
has_neighborhoods = true, --?
},
["university"] = {
link = true,
entry_placetype_indefinite_article = "a",
class = "man-made structure",
default = {true},
},
["unrecognised country"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized and nearly unrecognized countries!"] = {
category_link = "[[de facto]] [[independent]] [[state]]s with little or no {{w|international recognition}}",
bare_category_parent = "country-like entities",
},
["unrecognized country"] = {
link = "w",
class = "polity",
default = {"Unrecognized and nearly unrecognized countries"},
},
["unrecognised state"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized state"] = {
link = "w",
fallback = "unrecognized country",
},
["urban area"] = {
link = "separately",
fallback = "neighborhood",
},
["urban hromada"] = {
link = "[[urban]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["urban service area"] = {
-- A strange beast existing in Alberta; technically a type of hamlet but in practice used for much larger
-- cities and treated equivalent to a city. (There are only two of them, [[Fort McMurray]] and [[Sherwood Park]]).
link = "w",
fallback = "city",
},
["urban township"] = {
link = "w",
fallback = "township",
},
["urban-type settlement"] = {
-- appears to be a particular type of small urban settlement in post-Soviet states,
-- had an administrative function.
link = "w",
fallback = "town",
},
["valley"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "water"},
default = {true},
},
["viceroyalty"] = {
-- in essence, a type of colony
link = true,
fallback = "dependent territory",
},
["village"] = {
link = true,
generic_before_non_cities = "in",
category_link = "[[village]]s, [[hamlet]]s, and other small [[community|社區]] and [[settlement]]s",
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["village development committee"] = {
-- former administrative structure in Nepal; also exists in India but not as a formal unit
link = "+w:village development committee (Nepal)",
inherently_former = {"FORMER"},
fallback = "village",
},
["village municipality"] = {
-- Quebec
link = "+w:village municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["voivodeship"] = {
-- Poland
link = true,
display_handler = voivodeship_display_handler,
preposition = "of",
class = "subpolity",
},
["volcano"] = {
link = true,
plural = "volcanoes",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true, "Mountains"},
},
["ward"] = {
link = true,
class = "settlement",
-- Wards are formal administrative divisions of a city but have some properties of neighborhoods.
fallback = "neighborhood",
},
["watercourse"] = {
link = true,
fallback = "channel",
},
["Welsh community"] = {
-- Wales
link = "[[w:community (Wales)|community]]",
preposition = "of",
affix_type = "suf",
affix = "community",
has_neighborhoods = true,
class = "settlement",
},
["zone"] = {
-- administrative division of Ethiopia, Qatar, Nepal, India
link = "+w:zone#Place names",
preposition = "of",
class = "subpolity",
},
----------------------------------------------------------------------------------------------
-- Categories for former places --
----------------------------------------------------------------------------------------------
["ANCIENT capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
-- FIXM誒話:Consider removing 'ancient settlements' here. Ancient capitals, like former capitals, often still
-- exist but just aren't the capital any more. Maybe we should have an 'Ancient capitals' category.
default = {"Ancient settlements", "Former capitals"},
},
["ANCIENT non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "ANCIENT settlement",
},
["ANCIENT settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Ancient settlements"},
},
["ancient settlements!"] = {
category_link = "former [[city|城市]], [[town]]s and [[village]]s that existed in [[antiquity]]",
bare_category_parent = "former settlements",
},
["FORMER capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
default = {"Former capitals"},
},
["former capitals!"] = {
category_link = "former [[capital]] [[city|城市]] and [[town]]s",
bare_category_parent = "settlements",
},
["former counties and county-level cities!"] = {
-- For categorizing former counties and county-level cities of China
category_link = "no-longer existing [[county|counties]] and [[county-level city|county-level cities]]",
bare_category_breadcrumb = "counties and county-level cities",
bare_category_parent = "former political divisions",
},
["FORMER county"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER county-level city"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["former countries and country-like entities!"] = {
category_link = "[[country|國家]] and similar [[polity|政體]] that no longer exist",
bare_category_breadcrumb = "countries and country-like entities",
bare_category_parent = "former polities",
},
["FORMER country"] = {
link = false,
class = "polity",
default = {"Former countries and country-like entities"},
},
["former dependent territories!"] = {
category_link = "[[w:dependent territory|屬地]] (colonies, dependencies, protectorates, etc.) that no longer exist",
bare_category_breadcrumb = "dependent territories",
bare_category_parent = "former political divisions",
},
["FORMER dependent territory"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former dependent territories"},
},
["former districts!"] = {
-- For categorizing former districts of China
category_link = "no-longer-existing [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "former political divisions",
},
["FORMER district"] = {
-- For categorizing former districts of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER geographic region"] = {
link = false,
fallback = "geographic and cultural area",
},
["FORMER man-made structure"] = {
link = false,
class = "man-made structure",
default = {"Former man-made structures"},
},
["former man-made structures!"] = {
category_link = "man-made structures such as [[airport]]s and [[park]]s that no longer exist",
bare_category_breadcrumb = "man-made structures",
bare_category_parent = "former places",
},
["former municipalities!"] = {
-- For categorizing former municipalities of the Netherlands
category_link = "no-longer-existing [[municipality|municipalities]]",
bare_category_breadcrumb = "municipalities",
bare_category_parent = "former political divisions",
},
["FORMER municipality"] = {
-- For categorizing former municipalities of the Netherlands
link = false,
fallback = "FORMER subpolity",
},
["FORMER natural feature"] = {
link = false,
class = "natural feature",
default = {"Former natural features"},
},
["former natural features!"] = {
category_link = "natural features such as [[lake]]s, [[river]]s and [[island]]s that no longer exist",
bare_category_breadcrumb = "natural features",
bare_category_parent = "former places",
},
["FORMER non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "FORMER settlement",
},
["former places!"] = {
category_link = "[[place]]s of all sorts that no longer exist",
bare_category_breadcrumb = "former",
bare_category_parent = "places",
},
["former political divisions!"] = {
category_link = "[[political]] [[division]]s (states, provinces, counties, etc.) that no longer exist",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former places",
},
["former polities!"] = {
category_link = "[[polity|政體]] (countries, kingdoms, empires, etc.) that no longer exist",
bare_category_breadcrumb = "polities",
bare_category_parent = "former places",
},
["FORMER polity"] = {
link = false,
class = "polity",
default = {"Former polities"},
},
["former prefectures!"] = {
-- For categorizing former prefectures of China
category_link = "no-longer-existing [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "former political divisions",
},
["FORMER prefecture"] = {
-- For categorizing former prefectures of China
link = false,
fallback = "FORMER subpolity",
},
["former provinces!"] = {
-- For categorizing former provinces of China, etc.
category_link = "no-longer-existing [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "former political divisions",
},
["FORMER province"] = {
-- For categorizing ancient/historical/former provinces of the Roman Empire
link = false,
fallback = "FORMER subpolity",
},
["former region"] = {
-- A former region is considered a former political division, but not a 'historical/traditional/etc.' region.
link = "separately",
preposition = "of",
inherently_former = {"FORMER"},
class = "subpolity",
},
["FORMER settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Former settlements"},
},
["former settlements!"] = {
category_link = "[[city|城市]], [[town]]s and [[village]]s that no longer exist or have been merged or reclassified",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former political divisions",
},
["FORMER subpolity"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former political divisions"},
},
----------------------------------------------------------------------------------------------
-- form-of categories --
----------------------------------------------------------------------------------------------
---------- Abbreviations ----------
["abbreviations of counties!"] = {
-- For categorizing abbreviations of counties of e.g. England
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[county|counties]]",
bare_category_breadcrumb = "counties",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of countries!"] = {
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[country|國家]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of places",
},
["abbreviations of departments!"] = {
-- For categorizing abbreviations of departments of e.g. France
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[department]]s",
bare_category_breadcrumb = "departments",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of districts!"] = {
-- For categorizing abbreviations of districts of e.g. ???
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of divisions!"] = {
-- For categorizing abbreviations of divisions of e.g. Bangladesh
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[division]]s",
bare_category_breadcrumb = "divisions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of former countries!"] = {
full_category_link = "{{glossary|縮寫}}s of [[country|國家]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of former places",
},
["abbreviations of former places!"] = {
full_category_link = "{{glossary|縮寫}}s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "abbreviations of places", sort = "former"}},
},
["abbreviations of places!"] = {
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "places",
},
["abbreviations of political divisions!"] = {
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[political]] [[division]]s",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "abbreviations of places",
},
["abbreviations of prefectures!"] = {
-- For categorizing abbreviations of prefectures of e.g. Japan
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces!"] = {
-- For categorizing abbreviations of provinces of e.g. Canada
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces and territories!"] = {
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[province]]s and [[territory|territories]]",
bare_category_breadcrumb = "provinces and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of regions!"] = {
-- For categorizing abbreviations of regions of e.g. Italy
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[administrative region]]s",
bare_category_breadcrumb = "regions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states!"] = {
-- For categorizing abbreviations of states of e.g. the United States
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and territories!"] = {
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[state]]s and [[territory|territories]]",
bare_category_breadcrumb = "states and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and union territories!"] = {
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[state]]s and [[union territory|union territories]]",
bare_category_breadcrumb = "states and union territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of territories!"] = {
full_category_link = "{{glossary|縮寫}}s of [[name]]s of [[territory|territories]]",
bare_category_breadcrumb = "territories",
bare_category_parent = "abbreviations of political divisions",
},
["ABBREVIATION_OF country"] = {
link = false,
default = {"Abbreviations of countries"},
},
["ABBREVIATION_OF county"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF department"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF district"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF division"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF FORMER country"] = {
link = false,
default = {"Abbreviations of former countries"},
},
["ABBREVIATION_OF FORMER place"] = {
link = false,
default = {"Abbreviations of former places"},
},
["ABBREVIATION_OF place"] = {
link = false,
default = {"Abbreviations of places"},
},
["ABBREVIATION_OF prefecture"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF province"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF region"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF state"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF subpolity"] = {
link = false,
default = {"Abbreviations of political divisions"},
},
["ABBREVIATION_OF territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF union territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
---------- Archaic forms ----------
["archaic forms of places!"] = {
full_category_link = "{{glossary|古舊}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "archaic forms",
bare_category_parent = "places",
},
["ARCHAIC_FORM_OF place"] = {
link = false,
default = {"Archaic forms of places"},
},
---------- Clippings ----------
["clippings of places!"] = {
full_category_link = "{{glossary|clipping}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "clippings",
bare_category_parent = "places",
},
["CLIPPING_OF place"] = {
link = false,
default = {"Clippings of places"},
},
---------- Dated forms ----------
["dated forms of places!"] = {
full_category_link = "{{glossary|過時}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "dated forms",
bare_category_parent = "places",
},
["DATED_FORM_OF place"] = {
link = false,
default = {"Dated forms of places"},
},
---------- Derogatory names ----------
["derogatory names for cities!"] = {
full_category_link = "{{glossary|貶義}} [[name]]s for [[city|城市]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["derogatory names for continents!"] = {
full_category_link = "{{glossary|貶義}} [[name]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for continents"},
},
["derogatory names for countries!"] = {
full_category_link = "{{glossary|貶義}} [[name]]s for [[country|國家]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for countries"},
},
["derogatory names for places!"] = {
full_category_link = "{{glossary|貶義}} [[name]]s for [[place]]s",
bare_category_breadcrumb = "derogatory names",
bare_category_parent = "nicknames for places",
},
["derogatory names for states!"] = {
full_category_link = "{{glossary|貶義}} [[name]]s for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for states"},
},
["DEROGATORY_NAME_FOR capital"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR city"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR continent"] = {
link = false,
default = {"Derogatory names for continents"},
},
["DEROGATORY_NAME_FOR country"] = {
link = false,
default = {"Derogatory names for countries"},
},
["DEROGATORY_NAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR place"] = {
link = false,
default = {"Derogatory names for places"},
},
["DEROGATORY_NAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR state"] = {
link = false,
default = {"Derogatory names for states"},
},
["DEROGATORY_NAME_FOR town"] = {
link = false,
default = {"Derogatory names for cities"},
},
---------- Ellipses ----------
["ellipses of places!"] = {
full_category_link = "{{glossary|ellipsis|ellipses}} of [[name]]s of [[place]]s",
bare_category_breadcrumb = "ellipses",
bare_category_parent = "places",
},
["ELLIPSIS_OF place"] = {
link = false,
default = {"Ellipses of places"},
},
---------- Former long-form names ----------
["former long-form names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|國家]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former long-form names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "long-form"}},
},
["former long-form names of places!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form",
bare_category_parent = "former names of places",
},
["FORMER_LONG_FORM_OF country"] = {
link = false,
default = {"Former long-form names of countries"},
},
["FORMER_LONG_FORM_OF place"] = {
link = false,
default = {"Former long-form names of places"},
},
---------- Former names ----------
["former names of capitals!"] = {
full_category_link = "[[former]] [[name]]s of [[capital city|首都]] that generally still exist but under a different name",
bare_category_breadcrumb = "capitals",
bare_category_parent = "former names of settlements",
},
["former names of countries!"] = {
full_category_link = "[[former]] [[name]]s of [[country|國家]] that generally still exist but under a different name",
bare_category_breadcrumb = "countries",
bare_category_parent = "former names of places",
},
["former names of places!"] = {
full_category_link = "[[former]] [[name]]s of [[place]]s that generally still exist but under a different name",
bare_category_breadcrumb = "former names",
bare_category_parent = "places",
},
["former names of political divisions!"] = {
full_category_link = "[[former]] [[name]]s of [[political]] [[division]]s (states, provinces, counties, etc.) that generally still exist but under a different name",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former names of places",
},
["former names of polities!"] = {
full_category_link = "[[former]] [[name]]s of [[polity|政體]] (e.g. [[country|國家]]) that generally still exist but under a different name",
bare_category_breadcrumb = "polities",
bare_category_parent = "former names of places",
},
["former names of settlements!"] = {
full_category_link = "[[former]] [[name]]s of [[city|城市]], [[town]]s, [[village]]s, etc. that generally still exist but under a different name",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former names of political divisions",
},
["FORMER_NAME_OF capital"] = {
link = false,
default = {"Former names of capitals"},
},
["FORMER_NAME_OF country"] = {
link = false,
default = {"Former names of countries"},
},
["FORMER_NAME_OF place"] = {
link = false,
default = {"Former names of places"},
},
["FORMER_NAME_OF polity"] = {
link = false,
default = {"Former names of polities"},
},
["FORMER_NAME_OF region"] = {
link = false,
fallback = "FORMER_NAME_OF subpolity",
},
["FORMER_NAME_OF settlement"] = {
link = false,
default = {"Former names of settlements"},
},
["FORMER_NAME_OF subpolity"] = {
link = false,
default = {"Former names of political divisions"},
},
---------- Former nicknames ----------
["former nicknames for cities!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[city|城市]], e.g. the [[Eternal City]] for [[Kyoto]] during the {{w|Heian period}} ({{circa2|800–1100|short=yes}} {{AD}})",
bare_category_breadcrumb = "cities",
bare_category_parent = "former nicknames for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["former nicknames for places!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "former",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {{name = "former names of places", sort = "nicknames"}},
},
["FORMER_NICKNAME_FOR capital"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR city"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR place"] = {
link = false,
default = {"Former nicknames for places"},
},
["FORMER_NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR town"] = {
link = false,
default = {"Former nicknames for cities"},
},
---------- Former official names ----------
["former official names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[country|國家]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former official names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "official"}},
},
["former official names of places!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "former names of places",
},
["FORMER_OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Former official names of countries"},
},
["FORMER_OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Former official names of places"},
},
---------- Long-form names ----------
["long-form names of countries!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|國家]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "long-form names of places",
},
["long-form names of places!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form names",
bare_category_parent = "places",
},
["LONG_FORM_OF country"] = {
link = false,
default = {"Long-form names of countries"},
},
["LONG_FORM_OF place"] = {
link = false,
default = {"Long-form names of places"},
},
---------- Nicknames ----------
["nicknames for cities!"] = {
full_category_link = "[[nickname]]s for [[city|城市]], e.g. the [[Big Apple]] for [[New York City]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"cities"},
},
["nicknames for continents!"] = {
full_category_link = "[[nickname]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"continents"},
},
["nicknames for countries!"] = {
full_category_link = "[[nickname]]s for [[country|國家]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"countries"},
},
["nicknames for places!"] = {
full_category_link = "[[nickname]]s for [[place]]s",
bare_category_breadcrumb = "places",
bare_category_parent = "nicknames",
addl_bare_category_parents = {"places"},
},
["nicknames for states!"] = {
-- For categorizing nicknames for states of e.g. the United States
full_category_link = "[[nicknames]] for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"states"},
},
["NICKNAME_FOR capital"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR city"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR continent"] = {
link = false,
default = {"Nicknames for continents"},
},
["NICKNAME_FOR country"] = {
link = false,
default = {"Nicknames for countries"},
},
["NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR place"] = {
link = false,
default = {"Nicknames for places"},
},
["NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR state"] = {
link = false,
default = {"Nicknames for states"},
},
["NICKNAME_FOR town"] = {
link = false,
default = {"Nicknames for cities"},
},
---------- Obsolete forms ----------
["obsolete forms of places!"] = {
full_category_link = "{{glossary|棄用}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "obsolete forms",
bare_category_parent = "places",
},
["OBSOLETE_FORM_OF place"] = {
link = false,
default = {"Obsolete forms of places"},
},
---------- Official names ----------
["official names of countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|國家]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of places",
},
["official names of former countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|國家]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of former places",
},
["official names of former places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "official names",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "official names of places", sort = "former"}},
},
["official names of places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official names",
bare_category_parent = "places",
},
["OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Official names of countries"},
},
["OFFICIAL_NAME_OF FORMER country"] = {
link = false,
default = {"Official names of former countries"},
},
["OFFICIAL_NAME_OF FORMER place"] = {
link = false,
default = {"Official names of former places"},
},
["OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Official names of places"},
},
---------- Official nicknames ----------
["official nicknames for places!"] = {
full_category_link = "[[official]] [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for places",
},
["official nicknames for states!"] = {
-- For categorizing official nicknames for states of e.g. the United States
full_category_link = "[[official]] [[nicknames]] for [[state]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for states",
addl_bare_category_parents = {"states"},
},
["OFFICIAL_NICKNAME_FOR place"] = {
link = false,
default = {"Official nicknames for places"},
},
["OFFICIAL_NICKNAME_FOR state"] = {
link = false,
default = {"Official nicknames for states"},
},
}
export.plural_placetype_to_singular = {}
for sg_placetype, spec in pairs(export.placetype_data) do
if spec.plural then
export.plural_placetype_to_singular[spec.plural] = sg_placetype
end
end
return expor
7ysyrgpnzr73rxnz1ke7tzyigjzbrut
9758129
9758127
2026-05-12T23:30:35Z
TongcyDai
53191
9758129
Scribunto
text/plain
local export = {}
export.force_cat = false -- set to true for testing
local m_locations = require("Module:place/locations")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_strutils = require("Module:string utilities")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
-- Chinese localization data (zh_name, zh_suffix, qualifiers, extra-info labels, etc.)
local m_zh_data = require("Module:place/data/sandbox")
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local internal_error = m_locations.internal_error
export.internal_error = internal_error
local process_error = m_locations.process_error
export.process_error = process_error
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local ucfirst = m_strutils.ucfirst
local ulower = m_strutils.lower
local rmatch = m_strutils.match
local split = m_strutils.split
--[==[ intro:
This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code
to work with both placetypes and locations, as well as some placename-related info (FIXME: Consider moving it to
[[Module:place/locations]]). See also [[Module:place/locations]], which has definitions of all known locations. You must
currently load this module using {{cd|require()}}, not using {{cd|mw.loadData()}}.
In particular, it contains two fundamental and tricky functions:
# `get_placetype_equivs`, which finds the equivalent placetypes to look under in order to find a given property, and in
the process correctly handles placetypes with qualifiers (including qualifiers that act similar to "type-raising"
operators in that they do something non-trivial to the placetype to their right) as well as form-of directives and
fallbacks.
# `find_matching_holonym_location`, which looks up a holonym to find a matching known location, but in the process
checks holonyms to the right to make sure there isn't a clash between the user-specified containing holonyms and the
containers of the known location being considered. This is done to prevent overcategorizing when either there are two
known locations with the same name (e.g. Birmingham in England and Birmingham, Alabama in the US), or more generally
two locations with the same name, one of which is a known location but where the other is not (e.g. we're processing
non-known-location Mérida, Spain and don't want it categorized like known location Mérida, Yucatán, Mexico).
Both of these functions are invoked repeatedly, and probably are invoked several times on the same inputs and as a
result are candidates for memoization to speed up the operation of {{tl|place}}.
]==]
------------------------------------------------------------------------------------------
-- Basic utilities --
------------------------------------------------------------------------------------------
--[==[
Return true if `force_cat` is set either in this module or in [[Module:place/locations]].
]==]
function export.get_force_cat()
return export.force_cat or m_locations.force_cat
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
function export.remove_links_and_html(text)
text = m_links.remove_links(text)
return text:gsub("<.->", "")
end
--[==[
Return the singular version of a maybe-plural placetype, or nil if not plural. This correctly handles placetypes with
irregular plurals such as `kibbutzim` plural of `kibbutz` by looking up in a table constructed from the `plural` values
specified in `placetype_data`. If a special plural value is not found, the regular singularization algorithm in
[[Module:en-utilities]] is invoked, which reverses the y -> ies change after vowels and the 'es' addition after sh/ch/x,
and otherwise just subtracts a final 's' (which will incorrectly generate 'passe' for plural 'passes'; FIXME: consider
changing this for words ending in '-sses'). If the generated singular is the same as the passed-in value, nil is
returned.
]==]
function export.maybe_singularize_placetype(placetype)
if not placetype then
return nil
end
if export.plural_placetype_to_singular[placetype] then
return export.plural_placetype_to_singular[placetype]
end
local retval = require(en_utilities_module).singularize(placetype)
if retval == placetype then
return nil
end
return retval
end
-- Return the correct plural of a placetype, and (if `do_ucfirst` is given) make the first letter uppercase. We first
-- look up the plural in `placetype_data`, falling back to pluralize() in [[Module:en-utilities]], which is almost
-- always correct.
function export.pluralize_placetype(placetype, do_ucfirst)
local ptdata = export.placetype_data[placetype]
if ptdata and ptdata.plural then
placetype = ptdata.plural
else
placetype = require(en_utilities_module).pluralize(placetype)
end
if do_ucfirst then
return ucfirst(placetype)
else
return placetype
end
end
--[==[
Get the data associated with a placetype, which may be in its singular or plural form. If `from_category` is specified,
we also look for category-only placetypes (generally plural) followed by `!`. Return three values: (a) the placetype
under which the data can be looked up (i.e. in its singular form if the passed-in `placetype` is plural and did not
match a category-only placetype followed by `!`); (b) the placetype data structure; (c) the type of `placetype` match
that occurred, one of `"direct"` if the canonical placetype is the same as the passed-in `placetype` and also the same
as the key under which `ptdata` was looked up, or `"direct-category"` if the `ptdata` was looked up under a key formed
from the passed-in `placetype` by adding `!`, or `"plural"` if the `ptdata` was looked up under the singularized version
of the plural passed-in `placetype`.
]==]
function export.get_placetype_data(placetype, from_category)
local ptdata = export.placetype_data[placetype]
if ptdata then
return placetype, ptdata, "direct"
end
if from_category then
ptdata = export.placetype_data[placetype .. "!"]
if ptdata then
return placetype .. "!", ptdata, "direct-category"
end
end
local sg_placetype = export.maybe_singularize_placetype(placetype)
if sg_placetype then
ptdata = export.placetype_data[sg_placetype]
if ptdata then
return sg_placetype, ptdata, "plural"
end
end
return nil
end
--[==[
Check for special pseudo-placetypes that should be ignored for categorization purposes.
]==]
function export.placetype_is_ignorable(placetype)
return placetype == "and" or placetype == "or" or placetype:find("^%(")
end
function export.resolve_placetype_aliases(placetype)
return export.placetype_aliases[placetype] or placetype
end
--[==[
Return a property from `placetype_data` for a given placetype. If the placetype isn't found in `placetype_data`, or the
key isn't found in the placetype's entry in `placetype_data`, return nil.
]==]
function export.get_placetype_prop(placetype, key)
-- Usually we are called on equivalent placetypes returned from `get_placetype_equivs`, in which case placetype
-- aliases have been resolved, but sometimes not, e.g. when fetching the indefinite article in
-- get_placetype_article(). `resolve_placetype_aliases` is just a simple lookup and it doesn't hurt to do it twice.
placetype = export.resolve_placetype_aliases(placetype)
if export.placetype_data[placetype] then
return export.placetype_data[placetype][key]
else
return nil
end
end
--[==[
Given a placetype, split the placetype into one or more potential ''splits'', each consisting of a three-element list
{ {``prev_qualifiers``, ``this_qualifier``, ``reduced_placetype``}}, i.e.
# the concatenation of zero or more previously-recognized qualifiers on the left, normally canonicalized (if there are
zero such qualifiers, the value will be nil);
# a single recognized qualifier, normally canonicalized (if there is no qualifier, the value will be nil);
# the "reduced placetype" on the right.
Splitting between the qualifier in (2) and the reduced placetype in (3) happens at each space character, proceeding from
left to right, and stops if a qualifier isn't recognized. All placetypes are canonicalized by checking for aliases
in `placetype_aliases`, but no other checks are made as to whether the reduced placetype is recognized. Canonicalization
of qualifiers does not happen if `no_canon_qualifiers` is specified.
For example, given the placetype `"small beachside unincorporated community"`, the return value will be
{ {
{nil, nil, "small beachside unincorporated community"},
{nil, "small", "beachside unincorporated community"},
{"small", "[[beachfront]]", "unincorporated community"},
{"small [[beachfront]]", "[[unincorporated]]", "community"},
}}
Here, `"beachside"` is canonicalized to `"[[beachfront]]"` and `"unincorporated"` is canonicalized to
`"[[unincorporated]]"`, in both cases according to the entry in `placetype_qualifiers`.
On the other hand, if given `"small former haunted community"`, the return value will be
{ {
{nil, nil, "small former haunted community"},
{nil, "small", "former haunted community"},
{"small", "former", "haunted community"},
}}
because `"small"` and `"former"` but not `"haunted"` are recognized as qualifiers.
Finally, if given `"former adr"`, the return value will be
{ {
{nil, nil, "former adr"},
{nil, "former", "administrative region"},
}}
because `"adr"` is a recognized placetype alias for `"administrative region"`.
]==]
function export.split_qualifiers_from_placetype(placetype, no_canon_qualifiers)
local splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
local prev_qualifier = nil
while true do
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if canon == nil then
break
end
local new_qualifier = qualifier
if type(canon) == "table" then
canon = canon.link
end
if not no_canon_qualifiers and canon ~= false then
if canon == true then
new_qualifier = "[[" .. qualifier .. "]]"
else
new_qualifier = canon
end
end
insert(splits, {prev_qualifier, new_qualifier, export.resolve_placetype_aliases(reduced_placetype)})
prev_qualifier = prev_qualifier and prev_qualifier .. " " .. new_qualifier or new_qualifier
placetype = reduced_placetype
else
break
end
end
return splits
end
--[==[
Given a `placetype` (which may be pluralized), return an ordered list of equivalent placetypes to look under to find the
placetype's properties (such as the category or categories to be inserted). The return value is actually an ordered list
of objects of the form `{qualifier=``qualifier``, placetype=``equiv_placetype``}` where ``equiv_placetype`` is a
placetype whose properties to look up, derived from the passed-in placetype or from a contiguous subsequence of the
words in the passed-in placetype (always including the rightmost word in the placetype, i.e. we successively chop off
qualifier words from the left and use the remainder to find equivalent placetypes). ``qualifier`` is the remaining words
not part of the subsequence used to find ``equiv_placetype``; or nil if all words in the passed-in placetype were used
to find ``equiv_placetype``. (FIXME: This qualifier is not currently used anywhere.) Only placetypes for which there is
an entry in `placetype_data` are included. The placetype passed in is always checked first, and will form the first
entry if it exists in `placetype_data`.
'''NOTE:''' This is a tricky function as it implements handling of (a) qualifiers, (b) fallback logic, (c)
"type-raising" qualifiers such as `former`/`ancient`/etc. as well as `fictional` and `mythological`, and (d) form-of
directives, which act somewhat similarly to `former`, and allows interaction between more than one of these
simultaneously (e.g. official names of former places, which have their own categorization).
If {{tl|place}} gets too slow, one potential speedup is to memoize the results of this function, as it appears to be
getting called more than once on the same inputs. Another similar potential speedup is to memoize the results of
`iterate_matching_holonym_location()`.
For example, given the placetype `left tributary`, the following placetype/qualifier combinations are checked in turn:
```
{qualifier = nil, placetype="left tributary"}
{qualifier = "left", placetype="tributary"}
{qualifier = "left", placetype="river"}
```
and the return value will be
{ {
{qualifier = "left", placetype="tributary"},
{qualifier = "left", placetype="river"},
}}
The algorithm first enters the placetype itself into the list, then checks for `left tributary` as a recognized
placetype in `placetype_data` and doesn't find it, so it doesn't enter it into the returned list (if it found it, it
would add it as well as any fallbacks directly after it). It then splits off the recognized qualifier `left` to form the
''reduced placetype'' `tributary`, which is entered into the list because it is found in `placetype_data`. Then, because
it has a fallback `river`, which exists in `placetype_data`, the fallback is entered next.
Another example is `small rural fraziones` (where a ''frazione'' is type of subdivision of a ''comune'' or municipality,
often specifically an outlying hamlet). the placetype/qualifier combinations checked are:
```
{qualifier = nil, placetype="small rural fraziones"}
{qualifier = nil, placetype="small rural frazione"}
{qualifier = "small", placetype="rural fraziones"}
{qualifier = "small", placetype="rural frazione"}
{qualifier = "small [[rural]]", placetype="fraziones"}
{qualifier = "small [[rural]]", placetype="frazione"}
{qualifier = "small [[rural]]", placetype="hamlet"}
{qualifier = "small [[rural]]", placetype="village"}
```
The return value ends up as
{qualifier = "small [[rural]]", placetype="frazione"},
{qualifier = "small [[rural]]", placetype="hamlet"},
{qualifier = "small [[rural]]", placetype="village"},
}}
Here, because the result of singularizing `fraziones` returns a different value from the placetype itself, that
singularized value is checked after the original plural value. Also, in the process of splitting off qualifiers,
they are canonicalized if the entry in `placetype_qualifiers` says to do so; in this case, links are placed around
`rural`. Finally, `frazione` has `hamlet` as its fallback, which in turn has `village` as its fallback, so both
fallbacks end up being returned.
`no_fallback`, if set, disables returning equivalent placetypes based on the `fallback` setting for a placetype. This is
used in the first of two loops in find_placetype_cat_specs() in [[Module:place]] to prefer exact matches for placetypes
such as barangays with later holonyms to matches based on a fallback such as `neighborhood` with an earlier holonym.
See the comment in that function in [[Module:place]] for a more detailed explanation of why this is needed. Only the
placetype itself, and any reduced placetypes created by chopping off recognized qualifiers at the beginning, are
returned; but we do not return reduced placetypes if a containing placetype exists in `placetype_data`. (For example,
`"overseas territory"` has a fallback `"dependent territory"`, and `"overseas"` is also a recognized qualifier. When
`no_fallback` is in place, without the above proviso, we would return `"overseas territory"` followed by `"territory"`
with the incorrect effect of classifying an `"overseas territory"` of the United Kingdom such as `"Gibraltar"` under
[[:Category:Territories of the United Kingdom]] instead of [[:Category:Dependent territories of the United Kingdom]].)
As an exception, if `historical`, `ancient`, `former` or the like are found, they proceed ignoring `no_fallback`,
because it seems tricky to handle them correctly in the presence of `no_fallback`, and historical/former placetypes
rarely occur with exact match category specs anyway.
`no_split_qualifiers` prevents splitting off recognized qualifiers and returning the remainder of the placetype as an
equivalent placetype. Only the passed-in placetype, and any fallbacks, will be returned. This is used in
[[Module:category tree/topic cat/data/Places]] when looking up placetypes found in categories. Such placetypes won't
have qualifiers and so it doesn't make sense to try and look for them.
`from_category`, if set, causes category-only placetypes (those ending in `!`) to also be checked.
`form_of_directive`, if set, causes the specified form-of directive (e.g. `FORMER_NAME_OF`) to be prepended to checked
placetypes, their directive-specific type (e.g. `FORMER_NAME_OF_type`), and their classes (`class`) to get the
appropriate placetypes to check for form-of-directive categories. It falls back to the prepended generic `place` as a
placetype, e.g. `FORMER_NAME_OF place`, if nothing else matches.
`no_check_for_inherently_former` is used internally to prevent an infinite loop when checking for `inherently_former`.
`register_former_as_non_former` is a major hack used in `get_bare_categories` to deal with the mismatch between e.g.
known location `Yugoslavia` declaring itself a `country` but definitions of it declaring it a `former country`. It
causes the non-former version of the specified placetype to be included in the returned equivalents along with the
former placetypes. [FIXME: This should apply only to the entries in `former_countries` but it's tricky to do that now;
fix this in the known-location refactor. -- The known-location refactor is already done but we haven't yet fixed this.]
]==]
function export.get_placetype_equivs(placetype, props)
local no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former
local form_of_directive
if props then
no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former =
props.no_fallback, props.no_split_qualifiers, props.no_check_for_inherently_former, props.from_category,
props.register_former_as_non_former
form_of_directive = props.form_of_directive
end
local equivs = {}
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. `qualifier` is
-- the preceding qualifier to insert into `equivs` along with the placetype (see comment at top of function). If
-- `from_category` is given, we also check for a category-specific entry consisting of the placetype followed by
-- `!`, and in all cases we also check to see if `placetype` is plural, and if so, insert the singularized version
-- along with its fallbacks (if any) in `placetype_data`. `form_of_prefix` is a form-of prefix such as
-- `OFFICIAL_NAME_OF`. If specified, we check the fallbacks of `placetype` without the prefix but then insert into
-- `equivs` the prefixed placetype. This way, if the user says e.g. {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}},
-- we will correctly categorize into [[:Category:Official names of countries]], rather than only trying to look up
-- `OFFICIAL_NAME_OF island country` and failing, falling back ultimately to [[:Category:Official names of places]].
local function insert_placetype_and_fallbacks(qualifier, placetype, form_of_prefix)
local function insert_equiv(pt)
if form_of_prefix then
-- Let's say the user says {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}} and we have
-- no entry for `OFFICIAL_NAME_OF island country` but we do for `OFFICIAL_NAME_OF country` (which we end
-- up processing because `island country` falls back to `country`), and that entry in turn is defined
-- using a fallback. We have to insert that fallback-of-fallback, and the easiest/cleanest way of
-- handling this is by calling ourselves recursively.
insert_placetype_and_fallbacks(qualifier, form_of_prefix .. " " .. pt)
else
insert(equivs, {qualifier=qualifier, placetype=pt})
end
end
-- Insert the placetype, along with any fallbacks.
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if ptdata then
insert_equiv(canon_placetype)
if no_fallback then
return
end
local first_placetype = #equivs + 1
local prev_placetype = nil
while true do
local pt_value = export.placetype_data[canon_placetype]
if not pt_value then
internal_error("Fallback value %s specified for placetype %s but is not in `placetype_data`",
canon_placetype, prev_placetype)
end
if pt_value.fallback then
insert_equiv(pt_value.fallback)
local last_placetype = #equivs
if last_placetype - first_placetype >= 10 then
local fallback_loop = {}
for i = first_placetype, last_placetype do
insert(fallback_loop, equivs[i].placetype)
end
internal_error("Apparent loop in fallback chain: %s", table.concat(fallback_loop, " -> "))
end
prev_placetype = canon_placetype
canon_placetype = pt_value.fallback
else
break
end
end
end
end
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. This is a
-- wrapper around the more basic `insert_placetype_and_fallbacks()` which handles form-of directives. If there is no
-- form-of directive, this function directly calls `insert_placetype_and_fallbacks()`. We do things this way so that
-- form-of directives correctly combine with `former`-type qualifiers. Note that we also have special backups for
-- form-of directives that check `DIRECTIVE place` (and before that, `DIRECTIVE FORMER/ANCIENT place` is there's a
-- `former`-type directive); these backups live outside this function because we want them done once, late, rather
-- than in each invocation of `process_and_insert_placetype()`.
local function process_and_insert_placetype(qualifier, reduced_placetype)
if form_of_directive then
-- First check for e.g. `OFFICIAL_NAME_OF island country` and its fallbacks; then we look for fallbacks of
-- `island country` and check e.g. `OFFICIAL_NAME_OF country` and its fallbacks. All of this is handled by
-- `insert_placetype_and_fallbacks()` with appropriate parameters. After that, check the general class of
-- the directive, e.g. `subpolity` if something like `district` is given. (Eventually, we check for
-- `OFFICIAL_NAME_OF place` as a backup, but this happens at the end outside the loop over qualifiers.)
insert_placetype_and_fallbacks(qualifier, reduced_placetype, form_of_directive)
if not no_fallback then
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype)
local directive_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, form_of_directive .. "_type") or
export.get_placetype_prop(pt, "class") end
)
if not directive_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s in conjunction with form-of directive %s, placetype data " ..
'located but directive-specific type property %s missing, and so is "class"; ' ..
"placetypes searched are %s", reduced_placetype, form_of_directive,
form_of_directive .. "_type", reduced_placetype_equivs)
else
-- This should be allowed, as we allow unrecognized placetypes in general.
end
elseif directive_type ~= "!" then
insert_placetype_and_fallbacks(qualifier, directive_type, form_of_directive)
end
end
else
insert_placetype_and_fallbacks(qualifier, reduced_placetype)
end
end
-- Successively split off recognized qualifiers and loop over successively greater sets of qualifiers from the left
-- (unless `no_split_qualifiers` is specified, in which case we don't check for qualifiers).
local splits
if no_split_qualifiers then
splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
else
splits = export.split_qualifiers_from_placetype(placetype)
end
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, reduced_placetype = unpack(split, 1, 3)
-- If a special "former" qualifier like `former` or `historical` isn't present, and
-- `no_check_for_inherently_former` is not given (this flag is used to avoid infinite loops), check for
-- "inherently former" placetypes like `satrapy` and `treaty port` that always refer to no-longer-existing
-- placetypes, and handle accordingly.
local unlinked_this_qualifier
if this_qualifier and this_qualifier:find("%[") then
unlinked_this_qualifier = export.remove_links_and_html(this_qualifier)
else
unlinked_this_qualifier = this_qualifier
end
local former_qualifiers = this_qualifier and export.former_qualifiers[unlinked_this_qualifier] or nil
if not former_qualifiers and not no_check_for_inherently_former then
former_qualifiers = export.get_equiv_placetype_prop(reduced_placetype,
function(pt) return export.get_placetype_prop(pt, "inherently_former") end,
{no_check_for_inherently_former = true})
end
-- If a special "former" qualifier like `former` or `historical` is present, map it to the appropriate internal
-- qualifiers (`ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
-- qualifiers), fetch the `former_type` property, and treat the placetype as if a concatenation of the mapped
-- qualifier(s) and the value of `former_type`. For example, if `medieval village` is given, we map `medieval`
-- to `ANCIENT` and `FORMER`, and `village` to its `former_type` of `settlement`, and enter the placetypes
-- `ANCIENT settlement` and `FORMER settlement` (in that order) into `equivs`. If the placetype following the
-- "former" qualifier is recognized in `placetype_data` but has no `former_type` and no fallback with a
-- `former_type` specified, it is an internal error; but if the placetype isn't recognized (e.g. something like
-- `former greenhouse` is specified and we don't have an entry for `greenhouse`), just track the occurrence and
-- don't enter anything into `equivs`.
if former_qualifiers then
-- FIXME: Should we respect `no_fallback` here? My instinct says no.
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype, {
no_check_for_inherently_former = true
})
local former_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, "former_type") or
export.get_placetype_prop(pt, "class") end
)
if not former_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s, placetype data located but `former_type` missing; " ..
"placetypes searched are %s", reduced_placetype, reduced_placetype_equivs)
else
-- Enable error when we've verified there aren't any examples.
track("bad-former-placetype")
track("bad-former-placetype/" .. reduced_placetype)
--process_error("For placetype '%s', unrecognized placetype following 'former'-type " ..
-- "qualifier; searched placetype(s) %s", reduced_placetype, dump(reduced_placetype_equivs))
end
elseif former_type ~= "!" then
-- First check directly for `ANCIENT/FORMER` + the original following placetype. This makes it possible
-- for (e.g.) former provinces of the Roman empire to be categorized specially.
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. reduced_placetype)
end
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. former_type)
end
-- HACK! See explanation above for `register_former_as_non_former`.
if register_former_as_non_former then
process_and_insert_placetype(prev_qualifier, reduced_placetype)
end
-- If we're processing a form-of directive, after doing everything else we do
-- `DIRECTIVE ANCIENT/FORMER place` e.g. `OFFICIAL_NAME_OF FORMER place` as a backup.
if form_of_directive and not no_fallback then
for _, former_qualifier in ipairs(former_qualifiers) do
insert_placetype_and_fallbacks(prev_qualifier, form_of_directive .. " " .. former_qualifier ..
" place")
end
end
-- Don't continue processing equivs. The reason is probably the same as the `break` below for
-- qualifier_to_placetype_equivs[]; categories for `former BLAH` are set using `default`, and
-- non-former equivs will otherwise take precedence.
break
end
end
-- Then see if the rightmost split-off qualifier is in qualifier_to_placetype_equivs
-- (e.g. 'fictional *' -> 'fictional location'). If so, add the mapping.
if this_qualifier and export.qualifier_to_placetype_equivs[unlinked_this_qualifier] then
insert(equivs, {
qualifier=prev_qualifier,
placetype=export.qualifier_to_placetype_equivs[unlinked_this_qualifier]
})
-- Don't continue processing equivs; otherwise, if we specify 'mythological city', even though the
-- equivalent entry for 'mythological location' gets inserted ahead of the entry for 'city', the
-- latter ends up generating the category because the category for 'mythological location' is set as
-- the default value, which is used only when no non-default category can be found.
break
end
-- Finally, join the rightmost split-off qualifier to the previously split-off qualifiers to form a combined
-- qualifier, and add it along with reduced_placetype and any mapping in placetype_data for reduced_placetype.
-- NOTE: The first time through this loop, both `prev_qualifier` and `this_qualifier` are nil, and this inserts
-- the full placetype into `equivs`.
local qualifier = prev_qualifier and prev_qualifier .. " " .. this_qualifier or this_qualifier
process_and_insert_placetype(qualifier, reduced_placetype)
-- If `no_fallback` and there's an entry in `placetype_data` for this placetype, don't include any reduced
-- placetypes to avoid the "overseas territory treated as a territory" issue describe above.
if no_fallback then
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(reduced_placetype, from_category)
if canon_placetype then
break
end
end
end
-- If we're processing a form-of directive, after doing everything else we do `DIRECTIVE place` e.g.
-- `OFFICIAL_NAME_OF place` as a backup; but only if either the placetype as a whole is recognized or the placetype
-- begins with a recognized qualifier. This latter check is to avoid categorizing into e.g.
-- [[Category:en:Former names of places]] in an invocation like
-- {{place|en|@former name of:Democratic Republic of the Congo|country|r/Central Africa|;|used from 1971–1997}};
-- the `used from 1971–1997` gets treated as a placetype and we're called on it.
if form_of_directive and not no_fallback and (splits[2] or export.get_placetype_data(placetype, from_category)) then
insert_placetype_and_fallbacks(nil, form_of_directive .. " place")
end
return equivs
end
function export.get_equiv_placetype_prop_from_equivs(equivs, fun, continue_on_nil_only)
for _, equiv in ipairs(equivs) do
local retval = fun(equiv.placetype)
if continue_on_nil_only and retval ~= nil or not continue_on_nil_only and retval then
return retval, equiv
end
end
return nil, nil
end
--[==[
Given a placetype `placetype` and a function `fun` of one argument, iteratively call the function on equivalent
placetypes fetched from `get_placetype_equivs` until the function returns a non-falsy value (i.e. not {nil} or {false});
but if `continue_on_nil_only` is specified, the iterations continue until the function returns non non-{nil} value.
FIXME: We should make `continue_on_nil_only` the default; but this requires changing some callers.) When `fun` returns a
non-falsy or non-{nil} value, `get_equiv_placetype_prop` returns two values: the value returned by `fun` and the
equivalent placetype that triggered the non-falsy (or non-{nil}) return value. If `fun` never returns a non-falsy (or
non-{nil}) value, `get_equiv_placetype_prop` returns {nil} for both return values. If `placetype` is passed in as {nil},
the return value is the result of calling `fun` on {nil} (whatever it is) with {nil} for the second return value.
]==]
function export.get_equiv_placetype_prop(placetype, fun, props)
if not placetype then
return fun(nil), nil
end
return export.get_equiv_placetype_prop_from_equivs(export.get_placetype_equivs(placetype, props), fun,
props and props.continue_on_nil_only)
end
--[==[
Return the article that is used with an entry placetype. We proceed as follows:
# See if there is a recognized qualifier at the beginning that specifies an article (including `false` for no article).
This takes precedence over anything else, so that e.g. `various capitals` gets no article rather than "`the"`.
# Then check the placetype or any equivalent placetype for the `entry_placetype_use_the` property, indicating that
`"the"` should be used.
# Otherwise we look to see if the placetype itself (not any equivalents, even those involving deleting a qualifier from
the beginning) has an entry in `placetype_data` that specifies the indefinite article using `entry_placetype_use_the`
(principally for use with placetypes like `union territory`).
# Otherwise, we use [[Module:en-utilities]] to apply the standard algorithm to generate `"an"` for words beginning with
a vowel and `"a"` otherwise.
If `ucfirst` is true, the first letter of the article is made upper-case.
]==]
function export.get_placetype_article(placetype, ucfirst)
local art
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if type(canon) == "table" then
art = canon.article
end
end
if art == false then
return art
end
if art == nil then
local placetype_use_the = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "entry_placetype_use_the") end)
if placetype_use_the then
art = "the"
else
art = export.get_placetype_prop(placetype, "entry_placetype_indefinite_article")
if not art then
art = require(en_utilities_module).get_indefinite_article(placetype)
end
end
end
if ucfirst then
art = m_strutils.ucfirst(art)
end
return art
end
--[==[
Return the preposition that should be used after `placetype` when occurring as an entry placetype or in categories
(e.g. `city >in< France` but `country >of< South America`). The preposition defaults to `"in"` if not specified.
]==]
function export.get_placetype_entry_preposition(placetype)
local pt_prep = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "preposition") end
)
return pt_prep or "in"
end
--[==[
Given a place desc (see top of file) and a holonym object (see top of file), add a key/value into the place desc's
`holonyms_by_placetype` field corresponding to the placetype and placename of the holonym. For example, corresponding
to the holonym "c/Italy", a key "country" with the list value {"Italy"} will be added to the place desc's
`holonyms_by_placetype` field. If there is already a key with that place type, the new placename will be added to the
end of the value's list.
]==]
function export.key_holonym_into_place_desc(place_desc, holonym)
if not holonym.placetype then
return
end
-- Key in equivalent placetypes, so that e.g. `cities/San Francisco` gets keyed under `city`; but don't do
-- fallbacks, as it doesn't seem correct for the "do other holonyms of the same placetype" algorithm to do holonyms
-- of different types just because they have the same fallback.
local equiv_placetypes = export.get_placetype_equivs(holonym.placetype, {no_fallback = true})
local unlinked_placename = holonym.unlinked_placename
for _, equiv in ipairs(equiv_placetypes) do
local placetype = equiv.placetype
if not place_desc.holonyms_by_placetype then
place_desc.holonyms_by_placetype = {}
end
if not place_desc.holonyms_by_placetype[placetype] then
place_desc.holonyms_by_placetype[placetype] = {unlinked_placename}
else
insert(place_desc.holonyms_by_placetype[placetype], unlinked_placename)
end
end
end
--[=[
Construct a formatted link from the raw link spec `link` given the canonical singular placetype `sg_placetype`. If the
placetype was originally plural, `orig_placetype` should contain this plural value; otherwise it should be nil. This
will construct the appropriate type of link that displays as `orig_placetype` (or otherwise `sg_placetype`) but links to
whatever the `link` spec specifies (which may be `sg_placetype`, a Wikipedia article, etc.). `ptdata` is the placetype
data structure for the placetype, and `from_category` indicates that we are generating the description of a category
(otherwise we are generating the display form of an entry placetype).
]=]
local function make_placetype_link(link, sg_placetype, orig_placetype, ptdata, from_category, noerror)
if not from_category and ptdata.disallow_in_entries then
if noerror then
return "[not meant to be specified directly, with warning: " .. ptdata.disallow_in_entries .. "]"
else
process_error("Placetype %s is not meant to be specified directly: " .. ptdata.disallow_in_entries, sg_placetype)
end
end
if link == nil then
internal_error("Placetype data present for placetype %s but no link= setting given", sg_placetype)
elseif link == true then
if orig_placetype then
return ("[[%s|%s]]"):format(sg_placetype, orig_placetype)
else
return ("[[%s]]"):format(sg_placetype)
end
elseif link == false then
process_error("Placetype %s is not meant to be specified directly, but is only for internal use", sg_placetype)
elseif link == "w" then
return ("[[w:%s|%s]]"):format(sg_placetype, orig_placetype or sg_placetype)
elseif link == "separately" then
if orig_placetype then
local sg_words = split(sg_placetype, " ")
local orig_words = split(orig_placetype, " ")
if #sg_words ~= #orig_words then
internal_error("Can't construct 'separately' link for plural placetype %s as original placetype %s " ..
"has different number of words", orig_placetype, sg_placetype)
else
for i = 1, #sg_words do
if sg_words[i] == orig_words[i] then
sg_words[i] = ("[[%s]]"):format(sg_words[i])
else
sg_words[i] = ("[[%s|%s]]"):format(sg_words[i], orig_words[i])
end
end
return concat(sg_words, " ")
end
else
return (sg_placetype:gsub("([^ ]+)", "[[%1]]"))
end
elseif link:find("^%+") then
link = link:sub(2) -- discard initial +
return ("[[%s|%s]]"):format(link, orig_placetype or sg_placetype)
elseif not orig_placetype then
return link
else
return require(en_utilities_module).pluralize(link)
end
end
--[==[
Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the
plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying
as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description
of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like
[[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or
`"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description
for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with
special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the
"full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is
prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be
disallowed.
]==]
function export.get_placetype_display_form(placetype, category_type, return_full, noerror)
local from_category = not not category_type
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if canon_placetype then
local raw_link
local function is_linked_string(str)
return type(str) == "string" and str:find("%[%[")
end
if category_type then
local fetched_full
local function fetch_maybe_full(prop)
local retval = ptdata["full_" .. prop]
if retval ~= nil then
if return_full then
return retval, true
else
internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval)
end
end
return ptdata[prop], false
end
local function maybe_prefix(str)
if return_full and not fetched_full then
return "names of " .. str
else
return str
end
end
-- Careful with `false` as possible value.
if category_type == "top-level" then
raw_link, fetched_full = fetch_maybe_full("category_link_top_level")
elseif category_type == "noncity" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity")
elseif category_type == "city" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_city")
else
internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"',
category_type)
end
if type(raw_link) == "string" then
return maybe_prefix(raw_link), ptdata
elseif raw_link ~= nil then
return raw_link, ptdata
end
raw_link, fetched_full = fetch_maybe_full("category_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
if ptmatch == "plural" then
raw_link, fetched_full = fetch_maybe_full("plural_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
end
if raw_link == nil then
raw_link, fetched_full = fetch_maybe_full("link")
end
if raw_link == false then
return raw_link, ptdata
end
return maybe_prefix(make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata
else
if ptmatch == "plural" then
raw_link = ptdata.plural_link
if raw_link == false then
process_error("Placetype %s cannot appear plural", placetype)
end
if is_linked_string(raw_link) then
return raw_link, ptdata
end
end
if raw_link == nil then
raw_link = ptdata.link
end
return make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata
end
end
return nil
end
local function resolve_unlinked_placename_display_aliases(placetype, placename)
local equiv_placetypes = export.get_placetype_equivs(placetype)
for i, equiv in ipairs(equiv_placetypes) do
equiv_placetypes[i] = equiv.placetype
end
local all_display_aliases_found = {}
local all_others_found = {}
for group, key, spec in m_locations.iterate_matching_location {
placetypes = equiv_placetypes,
placename = placename,
alias_resolution = "display",
} do
if spec.alias_of and spec.display then
insert(all_display_aliases_found, {group, key, spec, spec.display_as_full})
else
insert(all_others_found, {group, key, spec})
end
end
if not all_display_aliases_found[1] then
return placename
elseif all_display_aliases_found[2] then
internal_error("Found multiple matching display aliases for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
elseif all_others_found[1] then
internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
else
local group, key, spec, as_full = unpack(all_display_aliases_found[1])
local full, elliptical = m_locations.key_to_placename(group, key)
return as_full and full or elliptical
end
end
--[==[
If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged.
Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`,
`country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as
`United States`.
'''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they
should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed.
For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to
`Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political
connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!)
to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two
terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to
`North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly
display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve
alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and
consistency.
]==]
function export.resolve_placename_display_aliases(placetype, placename)
-- If the placename is a link, apply the alias inside the link.
-- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will
-- be empty.
local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$")
if link then
if linktext ~= "" then
local alias = resolve_unlinked_placename_display_aliases(placetype, linktext)
return "[[" .. link .. "|" .. alias .. "]]"
else
local alias = resolve_unlinked_placename_display_aliases(placetype, link)
return "[[" .. alias .. "]]"
end
else
return resolve_unlinked_placename_display_aliases(placetype, placename)
end
end
--[==[
Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key.
]==]
function export.get_prefixed_key(key, spec)
if spec.the then
return "the " .. key
else
return key
end
end
-- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary.
export.iterate_matching_location = m_locations.iterate_matching_location
--[=[
Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the
specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If
`first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is
specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified
by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the
holonym index and holonym structure, similar to `ipairs()`.
]=]
function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms)
local stop_at_also = not not first_holonym_index
return function(place_desc, index)
while true do
index = index + 1
local this_holonym = place_desc.holonyms[index]
-- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also`
-- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym
-- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with
-- `:also`.
if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then
return nil
end
-- If not placetype, we're processing raw text, which we normally want to skip.
if include_raw_text_holonyms or this_holonym.placetype then
return index, this_holonym
end
end
end, place_desc, first_holonym_index and first_holonym_index - 1 or 0
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all
such known locations, returning for each location the corresponding key, spec and group as well as the trail of
ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between
the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data`
are:
* `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with
`iterate_matching_location()`.
* `holonym_placename`: The placename of the holonym.
* `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the
holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms
following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none
exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.)
* `place_desc`: Description of the place; used for the holonyms, to check for container mismatches.
Returns four values: the location group, the canonical key by which the location is known, the spec object describing
the location and the trail of ancestral containers for the location. The first three values are the same as for
`iterate_matching_location`.
]==]
function export.iterate_matching_holonym_location(data)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
local matching_location_iterator = m_locations.iterate_matching_location {
placetypes = holonym_placetype,
placename = holonym_placename,
}
return function()
while true do
local group, key, spec = matching_location_iterator()
if not group then
return nil
end
local container_trail = {}
-- For each level of container, check that there are no mismatches (i.e. other location of the same
-- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container
-- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city
-- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of
-- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark,
-- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New
-- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough,
-- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If
-- there are no mismatches at any level we assume we're dealing with the right known location.
--
-- If at a given level there are multiple containing locations, we count a match if any holonym matches any
-- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any
-- containing location.
local containers_mismatch = false
for containers in m_locations.iterate_containers(group, key, spec) do
insert(container_trail, containers)
local match_at_level = false
local mismatch_at_level = false
for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc,
holonym_index and holonym_index + 1 or nil) do
local other_source_holonym = other_holonym.augmented_from_holonym
if other_source_holonym and other_source_holonym.placetype == holonym_placetype and
other_source_holonym.unlinked_placename ~= holonym_placename then
-- Ignore holonyms added during the augmentation process for other holonyms of the same
-- placetype as the placetype of the holonym we're considering. See comment in
-- augment_holonyms_with_container() for why we do this.
-- continue; grrr, no 'continue' in Lua
else
local holonym_matches_at_level = false
local holonym_exists_with_same_placetype = false
for _, container in ipairs(containers) do
if not container.spec.no_check_holonym_mismatch then
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
local placetypes = container.spec.placetype
if type(placetypes) ~= "table" then
placetypes = {placetypes}
end
local placetype_equivs = {}
for _, pt in ipairs(placetypes) do
m_table.extend(placetype_equivs, export.get_placetype_equivs(pt))
end
local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype and
(other_holonym.unlinked_placename == full_container_placename or
other_holonym.unlinked_placename == elliptical_container_placename)
end
)
if this_holonym_matches then
holonym_matches_at_level = true
break
end
local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype
end
)
if this_holonym_exists_with_same_placetype then
-- We seem to have a mismatch at this level. But before we decide conclusively that this
-- is the case, check to see whether the putative mismatch is an alias and matches when
-- we resolve the alias.
for oh_group, oh_key, oh_spec, oh_container_trail in
export.iterate_matching_holonym_location {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = place_desc,
} do
local oh_full_placename, oh_elliptical_placename =
m_locations.key_to_placename(oh_group, oh_key)
if oh_full_placename == full_container_placename or
oh_elliptical_placename == elliptical_container_placename then
-- Alias matched when resolved.
this_holonym_matches = true
break
end
end
if this_holonym_matches then
-- Alias matched above when resolved.
holonym_matches_at_level = true
break
else
-- Not an alias, or doesn't match when resolved. We have a true mismatch.
holonym_exists_with_same_placetype = true
end
end
end
end
if holonym_matches_at_level then
match_at_level = true
break
end
if holonym_exists_with_same_placetype then
mismatch_at_level = true
end
end
end
if not match_at_level and mismatch_at_level then
containers_mismatch = true
break
end
end
if not containers_mismatch then
return group, key, spec, container_trail
end
end
end
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the
corresponding key, spec and group as well as the trail of ancestral containers. This is like
`iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this
would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To
fix this, specify additional following disambiguating holonyms, e.g.
{{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}.
]==]
function export.find_matching_holonym_location(data)
local all_found = {}
for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do
insert(all_found, {group, key, spec, container_trail})
end
if not all_found[1] then
return nil
elseif all_found[2] then
local holonym_placetype = data.holonym_placetype
if type(holonym_placetype) == "table" then
holonym_placetype = concat(holonym_placetype, ",")
end
local found_keys = {}
for _, found in ipairs(all_found) do
local _, key, _, _ = unpack(found)
insert(found_keys, key)
end
error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " ..
"containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys)))
else
return unpack(all_found[1])
end
end
------------------------------------------------------------------------------------------
-- Placename and placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their
canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which
applies to categorization and other processes but not to display.
The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state",
"province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g.
"census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype.
Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be
interpreted as "department", "district" or "division").
]==]
export.placetype_aliases = {
["acomm"] = "autonomous community",
["adr"] = "administrative region",
["adterr"] = "administrative territory", -- Pakistan
["aobl"] = "autonomous oblast",
["aokr"] = "autonomous okrug",
["ap"] = "autonomous province",
["apref"] = "autonomous prefecture",
["aprov"] = "autonomous province",
["ar"] = "autonomous region",
["arch"] = "archipelago",
["arep"] = "autonomous republic",
["aterr"] = "autonomous territory",
["atu"] = "autonomous territorial unit",
["bor"] = "borough",
["c"] = "country",
["can"] = "canton",
["carea"] = "council area",
["cc"] = "constituent country",
["cdblock"] = "community development block",
["cdep"] = "Crown dependency",
["CDP"] = "census-designated place",
["cdp"] = "census-designated place",
["clcity"] = "county-level city",
["co"] = "county",
["cobor"] = "county borough",
["colcity"] = "county-level city",
["coll"] = "collectivity",
["comm"] = "community",
["cont"] = "continent",
["contr"] = "continental region",
["contregion"] = "continental region",
["cpar"] = "civil parish",
["damun"] = "direct-administered municipality",
["dep"] = "dependency",
["department capital"] = "departmental capital",
["dept"] = "department",
["depterr"] = "dependent territory",
["dist"] = "district",
["distmun"] = "district municipality",
["div"] = "division",
["emp"] = "empire",
["fpref"] = "French prefecture",
["gov"] = "governorate",
["govnat"] = "governorate",
["home-rule city"] = "home rule city",
["home-rule municipality"] = "home rule municipality",
["inner-city area"] = "inner city area",
["ires"] = "Indian reservation",
["isl"] = "island",
["lbor"] = "London borough",
["lga"] = "local government area",
["lgarea"] = "local government area",
["lgd"] = "local government district",
["lgdist"] = "local government district",
["metbor"] = "metropolitan borough",
["metcity"] = "metropolitan city",
["metmun"] = "metropolitan municipality",
["mtn"] = "mountain",
["mun"] = "municipality",
["mundist"] = "municipal district",
["nonmetropolitan county"] = "non-metropolitan county",
["obl"] = "oblast",
["okr"] = "okrug",
["p"] = "province",
["par"] = "parish",
["parmun"] = "parish municipality",
["pen"] = "peninsula",
["plcity"] = "prefecture-level city",
["plcolony"] = "Polish colony",
["pref"] = "prefecture",
["prefcity"] = "prefecture-level city",
["preflcity"] = "prefecture-level city",
["prov"] = "province",
["r"] = "region",
["range"] = "mountain range",
["rcm"] = "regional county municipality",
["rcomun"] = "regional county municipality",
["rdist"] = "regional district",
["rep"] = "republic",
["rhrom"] = "rural hromada",
["riv"] = "river",
["rmun"] = "regional municipality",
["robor"] = "royal borough",
["romp"] = "Roman province",
["runit"] = "regional unit",
["rurmun"] = "rural municipality",
["s"] = "state",
["sar"] = "special administrative region",
["shrom"] = "settlement hromada",
["spref"] = "subprefecture",
["sprefcity"] = "sub-prefectural city",
["sprovcity"] = "subprovincial city",
["submet city"] = "sub-metropolitan city",
["submetropolitan city"] = "sub-metropolitan city",
["sub-prefecture-level city"] = "sub-prefectural city",
["sub-provincial city"] = "subprovincial city",
["sub-provincial district"] = "subprovincial district",
["terr"] = "territory",
["terrauth"] = "territorial authority",
["twp"] = "township",
["twpmun"] = "township municipality",
["uauth"] = "unitary authority",
["ucomm"] = "unincorporated community",
["udist"] = "unitary district",
["uhrom"] = "urban hromada",
["uterr"] = "union territory",
["utwpmun"] = "united township municipality",
["val"] = "valley",
["vdc"] = "village development committee",
["vil"] = "village",
["voi"] = "voivodeship",
["wcomm"] = "Welsh community",
}
local no_link_def_article = {link = false, article = "the"}
local no_link_no_article = {link = false, article = false}
--[==[ var:
These qualifiers can be prepended onto any placetype and will be handled correctly. For example, the placetype
`large city` will be displayed as `large <nowiki>[[city]]</nowiki>` and categorized as if `city` were specified. If the
value in the following table is a string, the qualifier will display according to the string. If the value is `true`,
the qualifier will be linked to its corresponding Wiktionary entry. If the value is `false`, the qualifier will not be
linked but will appear as-is. Note that these qualifiers do not override placetypes with entries elsewhere that contain
those same qualifiers. For example, the entry for `inland sea` in `placetype_data` will apply in preference to treating
`inland sea` as equivalent to `sea`.
]==]
export.placetype_qualifiers = {
-- generic qualifiers
["huge"] = false,
["tiny"] = false,
["large"] = false,
["big"] = false,
["mid-size"] = false,
["mid-sized"] = false,
["small"] = false,
["sizable"] = false,
["important"] = false,
["long"] = false,
["short"] = false,
["major"] = false,
["minor"] = false,
["high"] = false,
["tall"] = false,
["low"] = false,
["left"] = false, -- left tributary
["right"] = false, -- right tributary
["modern"] = false, -- for use in opposition to "ancient" in another definition
-- "former" qualifiers
["abandoned"] = true,
["ancient"] = true,
["deserted"] = true,
["extinct"] = true,
["former"] = false,
["historic"] = "historical",
["historical"] = true,
["medieval"] = true,
["mediaeval"] = true,
["ruined"] = true,
["traditional"] = true,
-- sea qualifiers
["coastal"] = true,
["inland"] = true, -- note, we also have an entry in placetype_data for 'inland sea' to get a link to [[inland sea]]
["maritime"] = true,
["overseas"] = true,
["seaside"] = true,
["beachfront"] = true,
["beachside"] = true,
["riverside"] = true,
-- lake qualifiers
["freshwater"] = true,
["saltwater"] = true,
["endorheic"] = true,
["oxbow"] = true,
["ox-bow"] = "[[oxbow]]", -- [[ox-bow]] is a red link
["tidal"] = true,
-- land qualifiers
["hilltop"] = true,
["hilly"] = true,
["insular"] = true,
["peninsular"] = true,
["chalk"] = true,
["karst"] = true,
["limestone"] = true,
["mountainous"] = true,
["mountaintop"] = true,
["alpine"] = true,
["volcanic"] = true, -- for an island
-- political status qualifiers
["autonomous"] = true,
["incorporated"] = true,
["special"] = true,
["unincorporated"] = true,
["coterminous"] = true,
-- monetary status/etc. qualifiers
["fashionable"] = true,
["wealthy"] = true,
["affluent"] = true,
["declining"] = true,
-- city vs. rural qualifiers
["urban"] = true,
["suburban"] = true,
["exurban"] = true,
["outlying"] = true,
["remote"] = true,
["rural"] = true,
["outback"] = true,
["inner"] = false,
["inner-city"] = true,
["central"] = false,
["outer"] = false,
-- land use qualifiers
["residential"] = true,
["agricultural"] = true,
["business"] = true,
["commercial"] = true,
["industrial"] = true,
-- business use qualifiers
["railroad"] = true,
["railway"] = true,
["farming"] = true,
["fishing"] = true,
["mining"] = true,
["logging"] = true,
["cattle"] = true,
-- tourism use qualifiers
["resort"] = true, -- note, we also have 'resort city' and 'resort town', that take precedecne
["spa"] = true, -- note, we also have 'spa city' and 'spa town', that take precedecne
["ski"] = true, -- note, we also have 'ski resort city' and 'ski resort town', that take precedecne
-- religious qualifiers
["holy"] = true,
["sacred"] = true,
["religious"] = true,
["secular"] = true,
-- qualifiers for nonexistent places
["claimed"] = false,
["fictional"] = true,
["legendary"] = true,
["mythical"] = true,
["mythological"] = true,
-- directional qualifiers
["northern"] = false,
["southern"] = false,
["eastern"] = false,
["western"] = false,
["north"] = false,
["south"] = false,
["east"] = false,
["west"] = false,
["northeastern"] = false,
["southeastern"] = false,
["northwestern"] = false,
["southwestern"] = false,
["northeast"] = false,
["southeast"] = false,
["northwest"] = false,
["southwest"] = false,
-- seasonal qualifiers
["summer"] = true, -- e.g. for 'summer capital'
["winter"] = true,
-- legal status qualifiers
-- FIXME: Two-word qualifiers don't work yet. But you can enter "de-facto" and it's canonicalized to [[de facto]].
["official"] = true,
["unofficial"] = true,
["de facto"] = true, -- 'de facto capital'
["de-facto"] = "[[de facto]]", -- [[de-facto]] is a red link
["de jure"] = true, -- 'de jure capital'
["de-jure"] = "[[de jure]]", -- [[de-jure]] is a red link
-- NOTE: 'unrecognized/unrecognised' are handled as placetypes 'unrecognized country', 'unrecognized state'
-- misc. qualifiers
["planned"] = true,
["chartered"] = true,
["landlocked"] = true,
["uninhabited"] = true,
-- superlative qualifiers
["first"] = no_link_def_article,
["second"] = no_link_def_article, -- for "second largest" etc.
["third"] = no_link_def_article,
["fourth"] = no_link_def_article,
["last"] = no_link_def_article,
["only"] = no_link_def_article,
["sole"] = no_link_def_article,
["main"] = no_link_def_article,
["largest"] = no_link_def_article,
["biggest"] = no_link_def_article,
["smallest"] = no_link_def_article,
["shortest"] = no_link_def_article,
["longest"] = no_link_def_article,
["tallest"] = no_link_def_article,
["highest"] = no_link_def_article,
["lowest"] = no_link_def_article,
["leftmost"] = no_link_def_article,
["rightmost"] = no_link_def_article,
["innermost"] = no_link_def_article,
["outermost"] = no_link_def_article,
["northernmost"] = no_link_def_article,
["southernmost"] = no_link_def_article,
["westernmost"] = no_link_def_article,
["easternmost"] = no_link_def_article,
["northwesternmost"] = no_link_def_article,
["southwesternmost"] = no_link_def_article,
["northeasternmost"] = no_link_def_article,
["southeasternmost"] = no_link_def_article,
-- several/various
["several"] = no_link_no_article,
["various"] = no_link_no_article,
["numerous"] = no_link_no_article,
["multiple"] = no_link_no_article,
["many"] = no_link_no_article,
["other"] = no_link_no_article,
}
--[==[ var:
In this table, the key qualifiers should be treated the same as the value qualifiers for categorization purposes. This
is overridden by `placetype_data` and `qualifier_to_placetype_equivs`.
]==]
export.former_qualifiers = {
["abandoned"] = {"FORMER"},
["ancient"] = {"ANCIENT", "FORMER"},
["former"] = {"FORMER"},
["extinct"] = {"FORMER"},
["historic"] = {"FORMER"},
["historical"] = {"FORMER"},
["medieval"] = {"ANCIENT", "FORMER"},
["mediaeval"] = {"ANCIENT", "FORMER"},
["ruined"] = {"ANCIENT", "FORMER"},
["traditional"] = {"FORMER"},
}
--[==[ var:
In this table, any placetypes containing these qualifiers that do not occur in `placetype_data` should be mapped to the
specified placetypes for categorization purposes. Entries here are overridden by `placetype_data`.
]==]
export.qualifier_to_placetype_equivs = {
["fictional"] = "fictional location",
["legendary"] = "mythological location",
["mythical"] = "mythological location",
["mythological"] = "mythological location",
-- For e.g. Taiwan as a "claimed province" of China; parts of Belize as claimed by Guatemala; various islands
-- claimed by various parties in East Asia. FIXME: We should conditionalize on what is being claimed since there are
-- also claimed capitals, e.g. Israel and Palestine claim Jerusalem as their capital.
["claimed"] = "claimed political division",
}
--[==[ var:
Mapping from placetypes to the corresponding plural category-only placetype for a capital of that placetype. The reverse
mapping also exists.
]==]
export.placetype_to_capital_cat = {
["autonomous community"] = "autonomous community capitals",
["canton"] = "cantonal capitals",
["comarca"] = "comarca capitals",
["country"] = "national capitals",
-- The following are not obviously different from 'county seats' but the latte terminology is used in the US.
["county"] = "county capitals",
["department"] = "departmental capitals",
["district"] = "district capitals",
["division"] = "division capitals",
["emirate"] = "emirate capitals",
["governorate"] = "governorate capitals",
["hromada"] = "hromada capitals",
["krai"] = "krai capitals",
["metropolitan city"] = "metropolitan city capitals",
["municipality"] = "municipal capitals",
["oblast"] = "oblast capitals",
["okrug"] = "okrug capitals",
["prefecture"] = "prefectural capitals",
["province"] = "provincial capitals",
["raion"] = "raion capitals",
["regency"] = "regency capitals",
["region"] = "regional capitals",
["regional unit"] = "regional unit capitals",
["republic"] = "republic capitals",
["state"] = "state capitals",
["territory"] = "territorial capitals",
["voivodeship"] = "voivodeship capitals",
}
--[==[ var:
This contains placenames that should be preceded by an article (almost always "the"). '''NOTE''': There are multiple
ways that placenames can come to be preceded by "the":
# Listed here.
# Given in [[Module:place/locations]] with an initial "the". All such placenames are added to this map by the code
just below the map.
# The placetype of the placename has `holonym_use_the = true` in its placetype_data.
# A regex in placename_the_re matches the placename.
Note that "the" is added only before the first holonym in a place description.
]==]
export.placename_article = {
-- This should only contain info that can't be inferred from [[Module:place/locations]].
["archipelago"] = {
["Cyclades"] = "the",
["Dodecanese"] = "the",
},
["country"] = {
["Holy Roman Empire"] = "the",
},
["empire"] = {
["Holy Roman Empire"] = "the",
},
["island"] = {
["North Island"] = "the",
["South Island"] = "the",
},
["region"] = {
["Balkans"] = "the",
["Russian Far East"] = "the",
["Caribbean"] = "the",
["Caucasus"] = "the",
["Middle East"] = "the",
["New Territories"] = "the",
["North Caucasus"] = "the",
["South Caucasus"] = "the",
["West Bank"] = "the",
["Gaza Strip"] = "the",
},
["valley"] = {
["San Fernando Valley"] = "the",
},
}
--[==[ var:
Regular expressions to apply to determine whether we need to put 'the' before a holonym. The key "*" applies to all
holonyms, otherwise only the regexes for the holonym's placetype apply.
]==]
export.placename_the_re = {
-- We don't need entries for peninsulas, seas, oceans, gulfs or rivers
-- because they have holonym_use_the = true.
["*"] = {"^Isle of ", " Islands$", " Mountains$", " Empire$", " Country$", " Region$", " District$", "^City of "},
["bay"] = {"^Bay of "},
["lake"] = {"^Lake of "},
["country"] = {"^Republic of ", " Republic$"},
["republic"] = {"^Republic of ", " Republic$"},
["region"] = {" [Rr]egion$"},
["river"] = {" River$"},
["local government area"] = {"^Shire of "},
["county"] = {"^Shire of "},
["Indian reservation"] = {" Reservation", " Nation"},
["tribal jurisdictional area"] = {" Reservation", " Nation"},
}
--[==[ var:
If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of
holonyms for categorization (but not display) purposes.
]==]
export.cat_implications = {
["region"] = {
["Eastern Europe"] = {"continent/Europe"},
["Central Europe"] = {"continent/Europe"},
["Western Europe"] = {"continent/Europe"},
["South Europe"] = {"continent/Europe"},
["Southern Europe"] = {"continent/Europe"},
["Northern Europe"] = {"continent/Europe"},
["Northeast Europe"] = {"continent/Europe"},
["Northeastern Europe"] = {"continent/Europe"},
["Southeast Europe"] = {"continent/Europe"},
["Southeastern Europe"] = {"continent/Europe"},
["North Caucasus"] = {"continent/Europe"},
["South Caucasus"] = {"continent/Asia"},
["South Asia"] = {"continent/Asia"},
["Southern Asia"] = {"continent/Asia"},
["East Asia"] = {"continent/Asia"},
["Eastern Asia"] = {"continent/Asia"},
["Central Asia"] = {"continent/Asia"},
["West Asia"] = {"continent/Asia"},
["Western Asia"] = {"continent/Asia"},
["Southeast Asia"] = {"continent/Asia"},
["North Asia"] = {"continent/Asia"},
["Northern Asia"] = {"continent/Asia"},
["Anatolia"] = {"continent/Asia"},
["Asia Minor"] = {"continent/Asia"},
["Mesopotamia"] = {"continent/Asia"},
["North Africa"] = {"continent/Africa"},
["Central Africa"] = {"continent/Africa"},
["West Africa"] = {"continent/Africa"},
["East Africa"] = {"continent/Africa"},
["Southern Africa"] = {"continent/Africa"},
["Central America"] = {"continent/Central America"},
["Caribbean"] = {"continent/North America"},
["Polynesia"] = {"continent/Oceania"},
["Micronesia"] = {"continent/Oceania"},
["Melanesia"] = {"continent/Oceania"},
["Siberia"] = {"country/Russia", "continent/Asia"},
["Russian Far East"] = {"country/Russia", "continent/Asia"},
["South Wales"] = {"constituent country/Wales", "continent/Europe"},
["Balkans"] = {"continent/Europe"},
["West Bank"] = {"country/Palestine", "continent/Asia"},
["Gaza"] = {"country/Palestine", "continent/Asia"},
["Gaza Strip"] = {"country/Palestine", "continent/Asia"},
}
}
------------------------------------------------------------------------------------------
-- Category and display handlers --
------------------------------------------------------------------------------------------
local function city_type_cat_handler(data)
local entry_placetype = data.entry_placetype
local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities")
if not generic_before_non_cities then
internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" ..
" setting", entry_placetype)
end
local plural_entry_placetype = export.pluralize_placetype(entry_placetype)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and not spec.is_city then
-- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both
-- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.)
local cap_plural_entry_placetype = ucfirst(plural_entry_placetype)
local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities,
export.get_prefixed_key(key, spec))}
if container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities,
export.get_prefixed_key(container.key, container.spec)))
end
end
return retcats
end
end
local function capital_city_cat_handler(data, non_city)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
-- The first time we're called we want to return something; otherwise we will be called for later-mentioned
-- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in
-- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital
-- category/categories we add below.
local retcats
if not non_city and place_desc.holonyms then
for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do
local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename
retcats = city_type_cat_handler {
entry_placetype = "city",
holonym_placetype = h_placetype,
holonym_placename = h_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if retcats then
break
end
end
end
if not retcats then
retcats = {}
end
-- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we
-- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State
-- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory'
-- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's
-- an entry for 'autonomous community').
local capital_cat = export.placetype_to_capital_cat[holonym_placetype]
if not capital_cat then
capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")]
end
if capital_cat then
capital_cat = ucfirst(capital_cat)
local inserted_specific_variant_cat = false
if holonym_index then
-- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern
-- where we use :also to specify that a given city is the capital at multiple surrounding levels.
local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index
for h_index = holonym_index, #place_desc.holonyms do
if place_desc.holonyms[h_index].placetype then
matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location {
holonym_placetype = place_desc.holonyms[h_index].placetype,
holonym_placename = place_desc.holonyms[h_index].unlinked_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if matching_group then
matching_holonym_index = h_index
break
end
end
end
if matching_holonym_index == holonym_index then
if matching_container_trail[1] and not matching_spec.no_container_cat then
for _, container in ipairs(matching_container_trail[1]) do
insert(retcats, ("%s of %s"):format(capital_cat, export.get_prefixed_key(container.key,
container.spec)))
inserted_specific_variant_cat = true
end
end
elseif matching_holonym_index then
-- Check to make sure that the holonym placetype we were called on is listed among the
-- divtypes of the location we found.
local function insert_specific_variant_if_possible(key, spec)
return export.get_equiv_placetype_prop(holonym_placetype, function(pt)
local plural_holonym_placetype = export.pluralize_placetype(pt)
local saw_matching_div
if spec.divs then
local divs = spec.divs
if type(divs) ~= "table" then
divs = {divs}
end
for _, div in ipairs(divs) do
if type(div) ~= "table" then
div = {type = div}
end
if plural_holonym_placetype == div.type then
saw_matching_div = true
break
end
end
end
if saw_matching_div then
insert(retcats, ("%s of %s"):format(capital_cat, export.get_prefixed_key(key, spec)))
return true
end
return false
end)
end
if insert_specific_variant_if_possible(matching_key, matching_spec) then
inserted_specific_variant_cat = true
elseif not matching_spec.no_container_cat then
for _, containers in ipairs(matching_container_trail) do
local saw_no_container_cat = false
for _, container in ipairs(containers) do
if insert_specific_variant_if_possible(container.key, container.spec) then
inserted_specific_variant_cat = true
break
end
saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat
end
if inserted_specific_variant_cat or saw_no_container_cat then
break
end
end
end
end
else
-- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for
-- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing.
-- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to
-- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab.
-- Possibly we can just skip this case entirely.
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, ("%s of %s"):format(capital_cat, export.get_prefixed_key(container.key,
container.spec)))
inserted_specific_variant_cat = true
end
end
end
if not inserted_specific_variant_cat then
insert(retcats, capital_cat)
end
else
-- We didn't recognize the holonym placetype; just put in 'Capital cities'.
insert(retcats, "Capital cities")
end
return retcats
end
--[=[
This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used
in two ways:
# To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and
[[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym.
# To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym
description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this
case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments,
administrative regions, and for the entire country, and for example we only want to categorize a demonym into
[[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym
invocation only adds the most specific holonym category and not the category of any containing polity (hence if we
add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]).
This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston`
as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and
[[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities
having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]],
[[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing
polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`).
Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the
mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions
Ohio and a holonym for a Columbus in a different country is encountered, because of the function
`augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered.
The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding
language code).
]=]
local function generic_place_cat_handler(data)
local from_demonym = data.from_demonym
local retcats = {}
local function insert_retkey(key, spec)
if from_demonym then
insert(retcats, key)
else
insert(retcats, ("Places in %s"):format(export.get_prefixed_key(key, spec)))
end
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
if not spec.no_generic_place_cat then
-- This applies to continents and continental regions.
insert_retkey(key, spec)
end
-- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in
-- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when
-- no_container_cat is set (e.g. for 'United Kingdom').
if not spec.no_container_cat then
for _, container_set in ipairs(container_trail) do
local stop_adding_containers = false
for _, container in ipairs(container_set) do
if not container.spec.no_generic_place_cat then
insert_retkey(container.key, container.spec)
end
if container.spec.no_container_cat then
stop_adding_containers = true
end
end
if stop_adding_containers then
break
end
end
end
return retcats
end
end
--[==[
Special category handler run for all placetypes that checks for specified division placetypes of known locations and
categorizes appropriately.
]==]
function export.political_division_cat_handler(data)
if data.from_demonym then
return
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
local divlists = {}
if spec.divs then
insert(divlists, spec.divs)
end
if spec.addl_divs then
insert(divlists, spec.addl_divs)
end
for _, divlist in ipairs(divlists) do
if type(divlist) ~= "table" then
divlist = {divlist}
end
for _, div in ipairs(divlist) do
if type(div) == "string" then
div = {type = div}
end
local sgdiv = export.maybe_singularize_placetype(div.type) or div.type
local prep = div.prep or "of"
local cat_as = div.cat_as or div.type
if type(cat_as) ~= "table" then
cat_as = {cat_as}
end
if not export.placetype_data[sgdiv] then
internal_error("Placetype %s associated with known location key %s and data %s not found in " ..
"`placetype_data`", sgdiv, key, spec)
end
if sgdiv == data.entry_placetype then
local retcats = {}
for _, pt_cat in ipairs(cat_as) do
if type(pt_cat) == "string" then
pt_cat = {type = pt_cat}
end
local pt_prep = pt_cat.prep or prep
insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " ..
export.get_prefixed_key(key, spec))
end
return retcats
end
end
end
end
end
--[==[
This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any
foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value
in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the
modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the
entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the
country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized
into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to
make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is
intended for Newark, New Jersey).
]==]
function export.get_bare_categories(args, overall_place_spec)
local bare_cats = {}
local place_descs = overall_place_spec.descs
local possible_placetypes_by_place_desc = {}
for i, place_desc in ipairs(place_descs) do
possible_placetypes_by_place_desc[i] = {}
for _, placetype in ipairs(place_desc.placetypes) do
if not export.placetype_is_ignorable(placetype) then
local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true})
for _, equiv in ipairs(equivs) do
insert(possible_placetypes_by_place_desc[i], equiv.placetype)
end
end
end
end
local function check_term(term)
-- Treat Wikipedia links like local ones.
term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[")
term = export.remove_links_and_html(term)
term = term:gsub("^the ", "")
for i, place_desc in ipairs(place_descs) do
-- Iterate over all matching locations in case there are multiple, as with Delhi defined as
-- {{place|en|megacity/and/union territory|c/India|containing the national capital [[New Delhi]]}}.
for group, key, spec, container_trail in export.iterate_matching_holonym_location {
holonym_placetype = possible_placetypes_by_place_desc[i],
holonym_placename = term,
place_desc = place_desc,
} do
insert(bare_cats, key)
end
end
end
-- FIXME: Should we only do the following if the language is English (requires that the lang is passed in)?
-- We should always do it if `pagename` is given (as it is with {{tcl}}) but maybe not otherwise unless 1=en. There
-- are cases like [[Ankara]] = English name for capital of Turkey, but also the name in various languages for the
-- capital of Ghana (= English [[Accra]]). But this should get caught by mismatching the containing country. The
-- advantage of checking when the language isn't English is we catch those places that fail to give an English
-- translation but where the translation happens to be the same as the other-language spelling. However, I don't
-- know how often this situation occurs.
check_term(args.pagename or mw.loadData("Module:headword/data").pagename)
for _, t in ipairs(args.t) do
check_term(t)
end
local function check_termobj_list(terms)
for _, term in ipairs(terms) do
if term.eq then
check_term(term.eq)
end
if term.alt or term.term then
check_term(term.alt or term.term)
end
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
local arg = extra_info_terms.arg
if arg == "modern" or arg == "now" or arg == "full" or arg == "short" then
check_termobj_list(extra_info_terms.terms)
end
end
for _, directive in ipairs(overall_place_spec.directives) do
check_termobj_list(directive.terms)
end
return bare_cats
end
--[==[
This is used to augment the holonyms associated with a place description with the containing polities. For example,
given the following:
`# {{tl|place|en|subprefecture|pref/Hokkaido}}.`
We auto-add Japan as another holonym so that the term gets categorized into [[:Category:Subprefectures of Japan]].
To avoid over-categorizing we need to check to make sure no other countries are specified as holonyms.
]==]
function export.augment_holonyms_with_container(place_descs)
for _, place_desc in ipairs(place_descs) do
if place_desc.holonyms then
-- This ends up containing a copy of the original holonyms, with the augmented holonyms inserted in their
-- appropriate position. We don't just put them at the end because some holonyms have use the `:also`
-- modifier, which causes category processing to restart at that point after generating categories for a
-- preceding holonym, and we don't want the preceding holonym's augmented holonyms interfering with
-- categorization of a later holonym. We proceed from right to left, and each time we augment, we copy
-- the holonyms with the augmented holonym(s) inserted appropriately and replace the place description's
-- holonyms with the augmented ones before the next iteration. The reason for this is so that e.g.
-- {{place|neighborhood|city/Birmingham|co/West Midlands|cc/England}} doesn't throw an error during the
-- augmentation process due to 'Birmingham' referring to two known locations (in England and Alabama). If
-- we go left to right, we will throw an ambiguity error on `city/Birmingham` because code to exclude
-- Birmingham, Alabama needs `c/United Kingdom` present (to cause a mismatch with `c/United States`),
-- which isn't yet present as the augmentation code hasn't gotten to `cc/England` yet. For similar
-- reasons, we need to include the augmented holonyms in the holonyms considered in the next iteration
-- rather than modifying the place description once at athe end.
for i = #place_desc.holonyms, 1, -1 do
local holonym = place_desc.holonyms[i]
if holonym.placetype and not export.placetype_is_ignorable(holonym.placetype) then
local group, key, spec, container_trail = export.find_matching_holonym_location {
holonym_placetype = holonym.placetype,
holonym_placename = holonym.unlinked_placename,
holonym_index = i,
place_desc = place_desc,
}
if group and container_trail[1] and not spec.no_auto_augment_container then
local augmented_holonyms = {}
for j = 1, i do
insert(augmented_holonyms, place_desc.holonyms[j])
end
for _, containers in ipairs(container_trail) do
local any_no_auto_augment_container = false
for _, container in ipairs(containers) do
any_no_auto_augment_container = any_no_auto_augment_container or
container.spec.no_auto_augment_container
local containing_type = container.spec.placetype
if type(containing_type) == "table" then
-- If the containing type is a list, use the first element as the canonical variant.
containing_type = containing_type[1]
end
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
-- Don't side-effect holonyms while processing them.
local new_holonym = {
-- By the time we run, the display has already been generated so we don't need to
-- set display_placename.
placetype = containing_type,
-- placename_to_key() for the group should correctly handle both full and elliptical
-- placenames, but the full placename seems less likely to be ambiguous. FIXME: We
-- should just store the key directly and use it when available to avoid having to
-- convert key to placename and back to key.
unlinked_placename = full_container_placename,
-- Indicate that this is an augmented holonym, and was derived from the specified
-- holonym. In iterate_matching_holonym_location(), we ignore augmented holonyms
-- derived from holonyms that are different from the holonym we're searching for but
-- of the same placetype. This is to correctly handle a situation like
-- {{place|river|dept/Ardèche,Gard,Vaucluse,Bouches-du-Rhône|c/France}}. Here,
-- `Ardèche` is in `r/Auvergne-Rhône-Alpes`, while `Gard` is in `r/Occitania` and
-- the other two are in `r/Provence-Alpes-Côte d'Azur`. Augmenting proceeds from
-- right to left, so after it adds `r/Provence-Alpes-Côte d'Azur` to
-- `Bouches-du-Rhône`, Vaucluse gets augmented correctly but `Gard` fails to match
-- in find_matching_holonym_location() because of the mismatch between augmented
-- `r/Provence-Alpes-Côte d'Azur` and actual `r/Occitania`. Similarly, all later
-- calls to find_matching_holonym_location() fail to match `Gard` (and likewise
-- `Ardèche`) against any known location. To deal with this, we mark augmented
-- holoynms as being augmented due to a source holonym, and when processing a given
-- holonym, ignore augmented holonyms from other holonyms of the same placetype.
-- The restriction to the same placetype is so that `Birmingham` still gets
-- correctly disambiguated to Birmingham, England in the example given above near
-- the top of this function, using the augmented holonym `c/United Kingdom` added by
-- the specified `cc/England` (whose placetype `constituent country` differs from
-- the placetype `city` of Birmingham).
augmented_from_holonym = holonym,
}
insert(augmented_holonyms, new_holonym)
-- But it is safe to modify other parts of the place_desc.
export.key_holonym_into_place_desc(place_desc, new_holonym)
end
if any_no_auto_augment_container then
break
end
end
for j = i + 1, #place_desc.holonyms do
insert(augmented_holonyms, place_desc.holonyms[j])
end
place_desc.holonyms = augmented_holonyms
end
end
end
end
end
end
-- Cat handler for district, areas, neighborhoods and suburbs. Districts are tricky because they can either be political
-- divisions or city neighborhoods. Areas similarly can be political divisions (rarely; specifically, in Kuwait), city
-- neighborhoods or larger geographical areas/regions. We handle this as follows:
-- (1) `placetype_data` cat entries for specific countries or country divisions take precedence over cat_handlers, so if
-- the user says {{tl|place|district|s/Maharashtra|c/India}}, we won't even be called because there is an entry that
-- categorizes into [[:Category|Districts of Maharashtra, India]].
-- (2) If we're called, we check the holonym we're called on to see if it is a recognized city, e.g. if we're called
-- using {{tl|place|district|city/Mumbai|s/Maharashtra|c/India}}. If so, we categorize under e.g.
-- [[:Category:Neighbourhoods of Mumbai]]. (Choosing the spelling "neighbourhoods" because we're in India.)
-- (3) If we're called and the holonym is not a recognized city, we check if the placetype has has_neighborhoods set.
-- If so, it's "city-like" and we categorize under the first containing polity that we recognize. For example, if
-- we're called using {{tl|place|district|town/Northampton|co/Hampshire|s/Massachusetts|c/US}}, we should recognize
-- town as "city-like" and categorize under [[:Category:Neighborhoods in Massachusetts]]. (Note "in" not "of", and
-- note the spelling "neighborhoods" because we're in the US.)
-- (4) If the holonym is not city-like, we do nothing. If there's a city or city-like placetype farther up (e.g. we're
-- called as {{tl|place|district|ward/Foo|mun/Bar|...}}), we will handle the city-like entity according to (2) or
-- (3) when called on that holonym. Otherwise either the categorization in (1) takes place or there's no
-- categorization.
local function district_neighborhood_cat_handler(data)
local function get_plural_entry_placetype(location_spec, container_trail)
if data.entry_placetype == "suburb" then
return "Suburbs"
else
-- Check for `british_spelling` setting on the spec itself or any container.
local uses_british_spelling = location_spec.british_spelling
if uses_british_spelling == nil and container_trail then
for _, container_set in ipairs(container_trail) do
local must_outer_break = false
for _, container in ipairs(container_set) do
if container.spec.british_spelling ~= nil then
uses_british_spelling = container.spec.british_spelling
must_outer_break = true
break
end
end
if must_outer_break then
break
end
end
end
return uses_british_spelling and "Neighbourhoods" or "Neighborhoods"
end
end
-- First check the immediate holonym to see if it's a city or a city-like top-level entity (Hong Kong, Bonaire,
-- etc.)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and spec.is_city then
return {get_plural_entry_placetype(spec, container_trail) .. " of " .. export.get_prefixed_key(key, spec)}
end
-- If the entry placetype is neighbo(u)rhood, assume it is a neighborhood even if there isn't a city-like
-- entity father up the chain. (E.g. due to a mistaken use of m/ instead of mun/ for municipality.)
local has_neighborhoods
local entry_placetype = data.entry_placetype
if entry_placetype == "neighborhood" or entry_placetype == "neighbourhood" or entry_placetype == "suburb" then
has_neighborhoods = true
else
-- Otherwise, make sure the current holonym is city-like.
has_neighborhoods = export.get_equiv_placetype_prop(data.holonym_placetype, function(pt)
return export.get_placetype_prop(pt, "has_neighborhoods")
end, {continue_on_nil_only = true})
end
if has_neighborhoods then
-- Loop up the holonyms, looking for city and city-like entities in case of e.g. [[Sepulveda]] written
-- {{place|en|neighborhood|valley/San Fernando Valley|city/Los Angeles|s/California|c/USA}}
-- but also look for a recognizable poldiv, and if so categorize as "Neighborhoods in POLDIV". We need
-- to start with the current holonym, which is especially important for neighborhoods and suburbs that
-- may have the first holonym be a recognizable province, etc. but can't hurt otherwise. (Previously
-- we skipped the first/current holonym.)
for other_holonym_index, other_holonym in export.get_holonyms_to_check(data.place_desc,
data.holonym_index) do
local other_holonym_data = {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = data.place_desc,
}
local group, key, spec, container_trail = export.find_matching_holonym_location(other_holonym_data)
if group and not spec.is_former_place then
return {get_plural_entry_placetype(spec, container_trail) .. (spec.is_city and " of " or " in ") ..
export.get_prefixed_key(key, spec)}
end
end
end
end
function export.check_already_seen_string(holonym_placename, already_seen_strings)
local canon_placename = ulower(m_links.remove_links(holonym_placename))
if type(already_seen_strings) ~= "table" then
already_seen_strings = {already_seen_strings}
end
for _, already_seen_string in ipairs(already_seen_strings) do
if canon_placename:find(already_seen_string) then
return true
end
end
return false
end
-- Prefix display handler that adds a prefix such as "Metropolitan Borough of " to the display
-- form of holonyms. We make sure the holonym doesn't contain the prefix or some variant already.
-- We do this by checking if any of the strings in ALREADY_SEEN_STRINGS, either a single string or
-- a list of strings, or the prefix if ALREADY_SEEN_STRINGS is omitted, are found in the holonym
-- placename, ignoring case and links. If the prefix isn't already present, we create a link that
-- uses the raw form as the link destination but the prefixed form as the display form, unless the
-- holonym already has a link in it, in which case we just add the prefix.
local function prefix_display_handler(prefix, holonym_placename, already_seen_strings)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(prefix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return prefix .. " " .. holonym_placename
end
return prefix .. " [[" .. holonym_placename .. "]]"
end
-- Suffix display handler that adds a suffix such as " parish" to the display form of holonyms.
-- Works identically to prefix_display_handler but for suffixes instead of prefixes.
local function suffix_display_handler(suffix, holonym_placename, already_seen_strings, include_suffix_in_link)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(suffix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return holonym_placename .. " " .. suffix
end
if include_suffix_in_link then
return "[[" .. holonym_placename .. " " .. suffix .. "]]"
else
return "[[" .. holonym_placename .. "]] " .. suffix
end
end
-- Display handler for boroughs. New York City boroughs are display as-is. Others are suffixed
-- with "borough".
local function borough_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.new_york_boroughs[unlinked_placename] then
-- Hack: don't display "borough" after the names of NYC boroughs
return holonym_placename
end
return suffix_display_handler("borough", holonym_placename)
end
local function county_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
-- Display handler for Irish counties. Irish counties are displayed as e.g. "County [[Cork]]".
if m_locations.ireland_counties["County " .. unlinked_placename .. ", Ireland"] or
m_locations.northern_ireland_counties["County " .. unlinked_placename .. ", Northern Ireland"] then
return prefix_display_handler("County", holonym_placename)
end
-- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County".
if m_locations.taiwan_counties[unlinked_placename .. " County, Taiwan"] then
return suffix_display_handler("County", holonym_placename)
end
-- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County".
if m_locations.romania_counties[unlinked_placename .. " County, Romania"] then
return suffix_display_handler("County", holonym_placename)
end
-- FIXME, we need the same for US counties but need to key off the country, not the specific county.
-- Others are displayed as-is.
return holonym_placename
end
-- Display handler for prefectures. Japanese prefectures are displayed as e.g. "[[Fukushima]] Prefecture".
-- Others are displayed as e.g. "[[Fthiotida]] prefecture".
local function prefecture_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
local suffix = m_locations.japan_prefectures[unlinked_placename .. " Prefecture, Japan"] and "Prefecture" or "prefecture"
return suffix_display_handler(suffix, holonym_placename)
end
-- Display handler for provinces of Bulgaria, Iran, Laos, North and South Korea, Thailand, Turkey and Vietnam. Recognized
-- provinces are displayed as e.g. "[[Gyeonggi]] Province" or "[[Antalya]] Province". Others are displayed as-is.
local function province_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if
m_locations.bulgaria_provinces[unlinked_placename .. "Province, Bulgaria"] or
m_locations.iran_provinces[unlinked_placename .. " Province, Iran"] or
m_locations.laos_provinces[unlinked_placename .. " Province, Laos"] or
m_locations.north_korea_provinces[unlinked_placename .. " Province, North Korea"] or
m_locations.south_korea_provinces[unlinked_placename .. " Province, South Korea"] or
m_locations.thailand_provinces[unlinked_placename .. " Province, Thailand"] or
m_locations.turkey_provinces[unlinked_placename .. " Province, Turkey"] or
m_locations.vietnam_provinces[unlinked_placename .. " Province, Vietnam"] then
return suffix_display_handler("Province", holonym_placename)
end
return holonym_placename
end
-- Display handler for Nigerian states. Nigerian states are display as "[[Kano]] State". Others are displayed as-is.
local function state_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.nigeria_states[unlinked_placename .. " State, Nigeria"] then
return suffix_display_handler("State", holonym_placename)
end
return holonym_placename
end
-- Display handler for voivodeships. Display as e.g. [[Subcarpathian Voivodeship]].
local function voivodesip_display_handler(holonym_placetype, holonym_placename)
return suffix_display_handler("Voivodeship", holonym_placename, nil, "include_suffix_in_link")
end
------------------------------------------------------------------------------------------
-- Placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
Main placetype data structure. This specifies, for each canonicalized placetype, various properties. The keys are
placetypes (in the singular, except for category-only placetypes, which are plural and followed by `!`), and the value
is a table of properties. The `"*"` key is special and is used for adding "generic" categories of the form
`Places in ``location`` `; it runs for all entry placetypes. Keys in the form of plural placetypes followed by `!` are
used only in [[Module:category tree/topic cat/data/Places]] for specifying the properties of categories containing the
specified placetype, esp. bare categories like [[:Category:States and territories]] (rather than qualified categories
like [[:Category:States and territories of Australia]]).
Keys under the value table for a given placetype of are two types: ''property keys'' (which specify the value of
specific properties) and ''categorization keys'' (which tell how to categorize certain sorts of holonyms if the
placetype in question occurs as an entry placetype). Categorization keys are either the special value `default` or are
wildcard strings with a slash in them, such as `"country/*"`. Note that only wildcard strings are currently allowed
directly in the placetype data; everything else is handled through category handlers, either per-placetype or special
(such as `political_division_cat_handler`). The algorithm for how category keys and handlers are used to generate
categories is described at the top of [[Module:place]].
There are several recognized property keys, of various types:
1. The following link-related property keys are recognized:
* `link`: '''Required''' except in category-only placetypes ending in `!`. Describes how to link and display the
placetype in the formatted description when occurring as an entry placetype. Also used for formatting pluralized
placetypes (which may occur in entry placetypes, esp. new-format ones, such as `two <<islands>>`) and may occur in
categories). The possible values are:
*# `true`: Link to the same-named Wiktionary entry. This creates a raw link, e.g. `<nowiki>[[city]]</nowiki>`, which is
converted to an English-specific link by JavaScript postprocessing. If the placetype is plural, this creates a
two-part raw link e.g. `<nowiki>[[city|cities]]</nowiki>`.
*# `"w"`: Link to the same-named Wikipedia entry. This creates a two-part link, e.g.
`<nowiki>[[w:census town|census town]]</nowiki>`, or `<nowiki>[[w:census town|census towns]]</nowiki>` if the
placetype is given plural.
*# `"+..."`: Create a two-part link to the entry following the `+` sign. For example, if `cercle` specifies
`"+w:cercles of Mali"`, a two-part link `<nowiki>[[w:cercles of Mali|cercle]]</nowiki>` will be generated, or
`<nowiki>[[w:cercles of Mali|cercles]]</nowiki>` if plural `cercles` is specified.
*# `"separately"`: Link each word separately. For example, if `administrative territory` specifies `"separately"`, it
will be linked as `<nowiki>[[administrative]] [[territory]]</nowiki>`, or as
`<nowiki>[[administrative]] [[territory|territories]]</nowiki>` if plural `administrative territories` is given.
*# another string: Use that string directly. If the placetype is plural, `pluralize()` in [[Module:en-utilities]] is
called on the string, which will correctly pluralize most strings, including those with links in them. (If there
are multiple links, the display form of the last link is pluralized.)
*# `false`: This placetype is not allowed as an entry placetype. An error will be thrown if this placetype is given as
an entry placetype. This is specified for internal-use placetypes, especially placetypes used in conjunction with
the qualifiers `former`, `ancient`, `historical` and such.
* `plural_link`: If specified and the placetype is plural, use the value in place of generating a pluralized version of
the link spec in `link`. Most commonly, this is either a string with links in it (which is used directly) or the
value `false`, indicating that the placetype cannot occur plural. (This is used for example by `caplc`, which displays
as `<nowiki>[[capital]] and [[large]]st [[city]]</nowiki>`, where a plural version doesn't make sense.) Generally if
this is specified, `plural` also needs to be specified to give a special placetype plural; this situation occurs
especially with multiword placetypes where something other than the last word is pluralized. An example is
`town with bystatus`, whose plural is `towns with bystatus`, which needs to be explicitly given. This example uses
`link = <nowiki>"[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>` ({{m|nb|bystatus}}) is a Norwegian
Bokmål word, and template calls aren't currently permitted in link strings), along with
`plural_link = <nowiki>"[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>`.
* `category_link`: Spec indicating how to display the placetype when occurring in category descriptions. Defaults to
the value of `link`, and in turn is overridden by more specific `category_link_*` keys; see below. Category-only
placetypes (which are plural and end in `!`) usually use `category_link` in preference to `link`. The value of
`category_link` can be any of the types of specs given above, but most commonly is a plural string with links in it,
spelling out the description; in this case it is used directly. When both `category_link` and `link` are given, the
value in `category_link` is typically longer and more descriptive. For example, `polity` uses `link = true`, which
just generates a link `<nowiki>[[polity]]</nowiki>` or plural `<nowiki>[[polity|polities]]</nowiki>`, but specifies a
separate `category_link = <nowiki>"[[independent]] or [[semi-]][[independent]] [[polity|polities]]"</nowiki>`, which
clarifies in the category description what a polity is.
* `category_link_top_level`: Spec indicating how to display top-level (bare/unqualified) categories, i.e. categories
where the placetype is not followed by `in ``location`` ` or `of ``location`` `. If given, this overrides
`category_link` for this type of category.
* `category_link_before_noncity`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` does not refer to a city. If given, this overrides
`category_link` for this type of category.
* `category_link_before_city`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` refer to a city. If given, this overrides `category_link` for
this type of category. An example where this is given is `neighborhood`, which uses the following specs:<ol>
<li>`link = true`</li>
<li>`category_link = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]"</nowiki>`</li>
<li>`category_link_before_city = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions"</nowiki>`</li>
</ol> This has the effect of making the entry placetype `neighborhood` display as just
`<nowiki>[[neighborhood]]</nowiki>`, while e.g. a category like `Neighborhoods of Chicago` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[Chicago]], ...</nowiki>` and a category like
`Neighborhoods in Illinois, USA` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]] in [[Illinois]], ...</nowiki>`.
* `disallow_in_entries`: If specified, this placetype cannot occur as an entry placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
* `disallow_in_holonyms`: If specified, this placetype cannot occur as a holonym placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
2. There is currently one fallback-related property key recognized:
* `fallback`: If specified, its value is a placetype which will be used for categorization purposes if no categories
get added using the placetype itself. As an example, `branch` sets a fallback of `river` but also sets
`preposition = "of"`, meaning that {{tl|place|en|branch|riv/Mississippi}} displays as `a branch of the Mississippi`
(whereas `river` itself uses the preposition `in`), but otherwise categorizes the same as `river`. A more complex
example is `area`, which sets a fallback of `geographic and cultural area` and also sets a category handler that
checks for cities or city-like entities (e.g. boroughs) occurring as holonyms and categorizes the toponym under
[[:Category:Neighborhoods of CITY]] (for recognized cities) or otherwise [[:Category:Neighborhoods of POLDIV]] (for
the nearest containing recognized location). In addition, `area` is set as a political division of Kuwait, meaning if
`c/Kuwait` occurs as holonym, the toponym is categorized under [[:Category:Areas of Kuwait]]. If none of these
categories trigger, the fallback of `geographic and cultural area` will take effect, and the toponym will be
categorized as e.g. [[:Category:Geographic and cultural areas of England]].
3. There is currently one property to control irregular plurals of placetypes:
* `plural`: If specified, its value is the plural of the placetype. Otherwise, the default pluralization algorithm in
[[Module:en-utilities]] applies (which correctly pluralizes most words, including those ending in `-y`, `-ch`, `-sh`,
`-x`, etc.). The value of `plural` is also used when converting a pluralized placetype into its singular equivalent;
for example, since the placetype `kibbutz` has `plural = "kibbutzim"`, the placetype `kibbutzim` will be recognized
as a plural and singularized to `kibbutz`. For this reason, it's occasionally necessary to specify a `plural` value
even when the default pluralization algorithm works correctly, if the default singularization algorithm won't
correctly reverse the pluralization (as with `pass` and other terms ending in `-ss`).
4. The following property keys relate to generating categories for entry placetypes and specifying the parents of those
categories:
* `class`: The general class of placetype. This is used for various purposes: (a) to categorize placetypes preceded by
a qualifier such as `former`, `ancient`, `medieval` or `historical` (note that these placetypes are not all treated
alike); (b) to determine the parent category of bare placetype categories (e.g. [[:Category:Villages]] for placetype
`village`); (c) to determine whether to add a parent category `political divisions of specific countries` to
qualified placetype categories (e.g. [[:Category:Villages in Mali]]). The possible values are:
*# `polity`: a more-or-less sovereign/independent polity, such as a country, kingdom or empire.
*# `subpolity`: a non-sovereign division of a polity, above the level of an individual settlement.
*# `settlement`: a city or smaller equivalent, such as a village. This also includes administrative divisions of a
settlement, such as wards and barangays.
*# `non-admin settlement`: similar to a settlement but without administrative or political significance, such as an
unincorporated community, farm or neighborhood.
*# `capital`: a settlement that is a capital. A former capital is generally still in existence, just not the capital
any more.
*# `natural feature`: any non-man-made feature, such as a lake, mountain, island, ocean, etc.
*# `man-made structure`: a man-made feature below the level of a neighborhood, such as a house, airport, university,
metro station, park or the like.
*# `geographic region`: a geographic or cultural region or area that has no administrative significance. These may vary
greatly in size but typically have some sort of cultural significance (possibly historical). The `former`, `ancient`,
etc. qualifier has no effect on the category of these placetypes.
*# `generic place`: a place that isn't further qualified into any specific subtype.
* `former_type`: The class of placetype used for categorizing placetypes preceded by a qualifier such as `former`,
`ancient`, `medieval` or `historical`. The possible values are the same as for `class` but with the addition of
`dependent territory` (for colonies, protectorates and the like) and `!` (ignore the historical/former/ancient/etc.
qualifier; used e.g. with `fictional location` and `mythological location`). If not specified, the value of `class`
is used. When a qualifier such as `former`, `ancient`, `medieval` or `historical` is encountered (specifically, those
in `former_qualifiers`), it is mapped using `former_qualifiers` to the appropriate internal qualifier or qualifiers
(one or both of `ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
qualifiers), which is prepended to the value of `former_type` or `class` to form a placetype whose properties are
looked up to determine how to categorize the toponym in question. For example, if `medieval village` is given, we map
`medieval` to `ANCIENT` and `FORMER`, and `village` to its `class` of `settlement`, and enter the placetypes
`ANCIENT settlement` and `FORMER settlement` (in that order) into the list of equivalent placetypes returned by
`get_placetype_equivs`. In this case, there is an entry in `placetype_data` for `ANCIENT settlement`, so its default
category spec `Ancient settlements` is used as the category. If on the other hand `medieval kingdom` is given, where
`kingdom` has a `class` value `polity`, we first look up `ANCIENT polity`, see there is no entry in `placetype_data`
for it, and then look up `FORMER polity`, which exists and has a default category spec `Former polities`, which is
used as the category. Note that if the placetype following the "former" qualifier is recognized in `placetype_data`
but has no `former_type` or `class` and no fallback with a `former_type` or `class` specified, it is an internal
error; but if the placetype isn't recognized (e.g. something like `former greenhouse` is specified and we don't have
an entry for `greenhouse`), we just track the occurrence and end up not categorizing.
* `bare_category_parent`: This specifies the first parent category of a bare placetype category named according to the
placetype in question (e.g. [[:Category:Atolls]] for placetype `atoll`, or [[:Category:Named buildings]] for
placetype `named buildings!`). If not specified, the first parent category is determined by the value of `class`,
using the mapping `class_to_bare_category_parent` in [[Module:category tree/topic cat/data/Places]].
* `addl_bare_category_parents`: Extra parent categories to add a bare placetype category to (see `bare_category_parent`
just above).
* `bare_category_breadcrumb`: Breadcrumb for bare placetype categories. Also used as the sort key of
`bare_category_parent` if it is a string.
* `inherently_former`: If specified and the given placetype is used as an entry placetype, act as if `former` or
`ancient` (depending on the value of `inherently_former`) were prefixed to the placetype. This is for placetypes that
always refer to no-longer-existing entities, such as `satrapy` and `treaty port`. The value of `inherently_former` is
a list of internal qualifiers (one or more of `ANCIENT` and/or `FORMER`), just as for `former_qualifiers`, and the
implementation is the same.
* `cat_handler`: Handler used to generate the categories to add a given toponym to, if its entry placetype is the
placetype in question. Generally the `cat_handler` function checks the holonyms specified in order to determine which
category or categories to generate. For example, `district_neighborhood_cat_handler` handles placetypes `district`,
`neighborhood`, `subdivision`, `suburb` and the like, and either adds the toponym to a category like
`Neighborhoods of ``city`` ` (if a recognized city is given as a holonym), or otherwise a category like
`Neighborhoods in ``location`` ` (for the first recognized non-city location given as a holonym, if an unrecognized
city or city-like entity is given before the recognized non-city). The algorithm that runs the category handlers
iterates over holonyms from left to right, running the `cat_handler` function on each holonym in turn until one or
more categories are returned; see below for more specifics. (Note that countries for which e.g. a `district` is a
political division do not get the corresponding category added by the `district_neighborhood_cat_handler` function but
by `political_division_cat_handler`.) `cat_handler` functions are called with one argument, `data`, describing the
resolved entry placetype (i.e. after resolving placetype aliases and fallbacks) and the holonym being processed. The
return value should be a list of category specs (categories minus the langcode prefix, with `+++` standing for the
holonym key, or the value `true`, which stands for ` ``Placetypes`` in/of ``Holonym`` `, i.e. the pluralized placetype
with the appropriate preposition as specified in `placetype_data`). `data` contains the following fields:
** `entry_placetype`: the resolved entry placetype for the entry placetype being processed (i.e. it will always have an
entry in `placetype_data` but may not be the original placetype given by the user);
** `holonym_placetype` and `holonym_placename`: the holonym placetype and placename being processed;
** `holonym_index`: the index of the holonym being processed, or {nil} if we're handling an overriding holonym (FIXME:
we will change the overriding holonym algorithm so there will be an index even when processing overriding holonyms);
** `place_desc`: a full description of the {{tl|place}} call, as specified at the top of [[Module:place]];
** `from_demonym`: If set, we are called from [[Module:demonym]], triggered by {{tl|demonym-adj}} or
{{tl|demonym-noun}}, instead of being triggered by {{tl|place}}.
* `has_neighborhoods`: If `true`, the specified placetype is city-like. This is used in the
`district_neighborhood_cat_handler` to determine whether to add a category such as `Neighborhoods in ``location`` `;
see the section just above on `cat_handler`.
5. The following preposition-related property keys are recognized:
* `preposition`: The preposition used after this placetype when it occurs as an entry placetype. Defaults to `"in"`.
* `generic_before_non_cities`: If specified, the appropriate category description handler in
[[Module:category tree/topic cat/data/Places]] will recognize categories of the form
` ``Placetype`` in/of ``location`` ` for the specified placetype and preposition, if ``location`` is a non-city. This
is used to generate descriptions for categories added by category handlers and by explicit category specs in the
placetype data. All placetypes that specify `generic_before_non_cities` or `generic_before_cities` *MUST* also specify
a value for `class` so that the category tree code can determine whether it's a political or non-political division.
* `generic_before_cities`: Like `generic_before_non_cities` but for locations referring to cities.
6. The following property keys control the auto-addition of affixes when formatting holonyms of a particular placetype:
* `affix_type`: If specified, add the placetype as an affix before or after holonyms of this placetype. Possible values
are:
*# `"pref"` (the holonym will display as `(the) placetype of Holonym`, where `the` appears when the holonym directly
follows an entry placetype);
*# `"Pref"` (same as `"pref"` but the placetype is capitalized; each word is capitalized if there are multiple);
*# `"suf"` (the holonym will display as `Holonym placetype`);
*# `"Suf"` (the holonym will display as `Holonym Placetype`, i.e. same as `"suf"` but the placetype is capitalized).
* `suffix`: String to use in place of the placetype itself when the placetype is displayed as a suffix after a holonym.
Note that `suffix` can be used independently of `affix_type` because the user can also request a suffix explicitly
using a syntax like `adr:suf/Occitania`, which will display as `Occitania region` because the placetype
`administrative region` specifies `suffix = "region"`.
* `prefix`: Like `suffix` but for use when the placetype is displayed as a prefix before the holonym.
* `affix`: Like `suffix` and `prefix` but for use when the placetype is displayed as an affix either before or after the
holonym. If both `suffix` or `prefix` and `affix` are given for a single placetype, `suffix` or `prefix` take
precedence.
* `no_affix_strings`: String or list of strings that, if they occur in the holonym, suppress the addition of any affix
requested using `affix_type`. Defaults to the placetype itself. For example, `autonomous okrug` specifies
`affix_type = "Suf"` so that `aokr/Nenets` displays as `Nenets Autonomous Okrug`, but also specifies
`no_affix_strings = "okrug"` so that `aokr/Nenets Okrug` or `aokr/Nenets Autonomous Okrug` displays as specified,
without a redundant `Autonomous Okrug` added. Matching is case-insensitive but whole-word.
* `display_handler`: A function of two arguments, `holonym_placetype` and `holonym_placename` (specifying a holonym).
Its return value is a string specifying the display form of the holonym.
7. The following property keys control the indefinite and definite articles used before entry placetypes and/or holonyms
of the specified placetype.
* `entry_placetype_use_the`: Use `"the"` before this placetype when it occurs as an entry placetype.
* `entry_placetype_indefinite_article`: Indefinite article used before this placetype when it occurs as an entry
placetype (usually `"a"`, specifically for placetypes beginning with u- that don't take the indefinite article
`"an"`). Defaults to the appropriate indefinite article (`"a"` or `"an"` depending on whether the placetype begins
with a vowel). Overridden by `entry_placetype_use_the`, and unlike for most properties, does not apply to equivalent
placetypes (i.e. fallbacks or those formed by removing a qualifier from the beginning); only to the exact placetype
specified.
* `holonym_use_the`: Use `"the"` before holonyms of this placetype.
'''NOTE:'''
# The `link` property must be specified on all placetypes, except those ending in `!` (category-only placetypes), which
must have either `link` or `category_link` specified.
# Either the `class` or `former_type` property must be specified on all placetypes not ending in `!` that do not have a
fallback (if a placetype has a fallback and omits the `class` and `former_type` properties, they are taken from the
fallback). An internal error will result if a placetype has no `class` or `former_type` property derivable either
directly or through a fallback, if an attempt is made to categorize a former/ancient/historical/etc. entity of this
placetype.
# It is possible to have multiple levels of fallback (e.g. `frazione` falls back to `hamlet`, which falls back
to `village`). Fallback loops will cause an internal error. All placetypes specified as fallbacks must exist in
`placetype_data` or an internal error occurs.
]==]
export.placetype_data = {
--[=[
If you need to sort the following, do this (using Vim):
1. Make sure all full-line comments are within the { ... } table, or are moved after and on the same line as single-line
entries.
2. Make sure the table uses tabs everywhere for indent, and not spaces.
3. Mark the top of the table with `ma`, go to the bottom and execute the following two lines in sequence:
:'a,.s/\n/\\n/g
:s/\\n\(\t\[\)/\r\1/g
The first command converts every newline to a literal `\n` sequence, so the whole thing becomes a single line, while
the second command restores the newlines before the beginning of each entry. The effect is to convert all entries to
a single line while not losing any information. (Potentially a negative lookahead could be used to do it all in one
command.)
4. Execute the following to sort:
:'a,.!perl -pe 's/^(\t\[")(.*?)(".*)$/$2 @@@ $1$2$3/' | sort -f | perl -pe 's/.*? @@@ //'
Note that a simple `sort -f` (where `-f` means case-insensitive) would almost work, but it would sort "hill station"
before "hill" and "county borough" before "county" because the space after e.g. "hill station" sorts before the
quotation mark after e.g. "hill". The above command deals with this by extracting the key, prepending it followed by
` @@@ `, sorting, and then removing key (the classic decorate-sort-undecorate pattern).
5. Put the table back to multi-line format by marking the top of the table with `ma`, going to the bottom and executing
:'a,.s/\\n/\r/g
Note that for some reason, in order to get a match a newline in the left side of a replacement, you must use \n, but
to insert a newline in the right sode of a replacement you must use \r.
]=]
["*"] = {
link = false,
cat_handler = generic_place_cat_handler,
},
["administrative atoll"] = {
-- Maldives
link = "+w:administrative divisions of the Maldives",
preposition = "of",
class = "subpolity",
},
["administrative capital"] = {
link = "w",
fallback = "capital city",
},
["administrative center"] = {
link = "w",
fallback = "non-city capital",
},
["administrative centre"] = {
link = "w",
fallback = "administrative center",
},
["administrative county"] = {
link = "w",
fallback = "county",
},
["administrative district"] = {
link = "w",
fallback = "district",
},
["administrative headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["administrative region"] = {
link = true,
preposition = "of",
suffix = "region", -- but prefix is still "administrative region (of)"
fallback = "region",
class = "subpolity",
},
["administrative seat"] = {
link = "w",
fallback = "administrative centre",
},
["administrative territory"] = {
link = "separately",
preposition = "of",
suffix = "territory", -- but prefix is still "administrative territory (of)"
fallback = "territory",
class = "subpolity",
},
["administrative unit"] = {
-- Grrr, it's difficult to generalize about "administrative units". In Albania, "administrative unit" is an
-- official term for a city-level division of municipalities; Wikipedia renders it using the more practical term
-- "commune". In Pakistan, "administrative unit" is a collective term used to refer to all the different types
-- of first-level divisions (four provinces, one federal territory, and two "disputed territories", i.e. Azad
-- Kashmir and Gilgit-Balistan, that are variously described). For this reason, we set no fallback, but we need
-- to include this so that it can be used as a placetype for Albania, categorizing as communes.
link = "w",
class = "subpolity",
},
["administrative village"] = {
link = "w",
preposition = "of",
has_neighborhoods = true,
class = "settlement",
},
["aimag"] = {
-- used in Mongolia, Russia and China (Inner Mongolia); in Mongolia, equivalent to a province;
-- in China, equivalent to a prefecture (below a province); in Russia, equivalent to a municipal district.
link = "w",
fallback = "prefecture",
},
["airport"] = {
link = true,
class = "man-made structure",
default = {true},
},
["alliance"] = {
link = true,
fallback = "confederation",
},
["archipelago"] = {
link = true,
fallback = "island",
},
["area"] = {
link = true,
preposition = "of",
fallback = "geographic and cultural area",
-- Areas can either be administrative divisions (specifically of Kuwait) or geographic areas. Assume the former
-- when categorizing 'Areas' but the latter when handling e.g. 'historical area'.
class = "subpolity",
former_type = "geographic region",
cat_handler = district_neighborhood_cat_handler,
},
["arm"] = {
link = true,
preposition = "of",
class = "natural feature",
default = {"Seas"},
},
["arrondissement"] = {
link = true,
preposition = "of",
-- FIXME!!! Grrrrr!!! In some countries, arrondissements are divisions of cities; in others, they are divisions
-- of departments or provinces. Need to conditionalize on the country for both of the following.
class = "subpolity",
has_neighborhoods = true,
},
["associated province"] = {
link = "separately",
fallback = "province",
},
["atoll"] = {
-- FIXME! Atolls are administrative divisions of the Maldives but natural features elsewhere. Need to
-- conditionalize `class` on the country. See also `administrative atoll`.
link = true,
class = "natural feature",
bare_category_parent = "islands",
default = {true},
},
["autonomous city"] = {
link = "w",
preposition = "of",
fallback = "city",
has_neighborhoods = true,
},
["autonomous community"] = {
-- Spain; refers to regional entities, not village-like entities, as might be expected from "community"
link = true,
preposition = "of",
class = "subpolity",
},
["autonomous island"] = {
-- Comoros; seems like an administrative atoll of the Maldives.
link = "+w:autonomous islands of Comoros",
preposition = "of",
class = "subpolity",
},
["autonomous oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "oblast",
class = "subpolity",
},
["autonomous okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "okrug",
class = "subpolity",
},
["autonomous prefecture"] = {
link = true,
fallback = "prefecture",
},
["autonomous province"] = {
link = "w",
fallback = "province",
},
["autonomous region"] = {
link = "w",
preposition = "of",
fallback = "administrative region",
-- "administrative region" sets an affix of "region" but we want to display as "Tibet Autonomous Region"
-- if the user writes 'ar:Suf/Tibet'.
affix = "autonomous region",
},
["autonomous republic"] = {
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territorial unit"] = {
-- Moldova; only two of them, one for Gagauzia and one for Transnistria.
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territory"] = {
link = "w",
fallback = "dependent territory",
},
["bailiwick"] = {
-- Jersey, etc.
link = true,
fallback = "polity",
},
["barangay"] = {
-- Philippines
link = true,
class = "settlement",
-- Barangays are formal administrative divisions of a city rather than informal neighborhoods, but can use
-- some of the properties of a neighborhood.
fallback = "neighborhood",
},
["barrio"] = {
-- Spanish-speaking countries; Philippines
link = true,
-- FIXME: Not completely correct, in some countries barrios are formal administrative divisions of a city.
-- `class` will need to conditionalize on the country to be completely correct.
fallback = "neighborhood",
},
["basin"] = {
link = true,
fallback = "lake",
},
["bay"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["beach"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"water"},
default = {true},
},
["beach resort"] = {
link = "w",
fallback = "resort town",
},
["bishopric"] = {
link = true,
fallback = "polity",
},
["bodies of water!"] = {
-- FIXME: This is (maybe?) a type category not a name category. There should be an option for this. We need to
-- straighten out the type vs. name vs. related-to issue.
category_link = "[[body of water|bodies of water]]",
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems", "water"},
},
["borough"] = {
link = true,
preposition = "of",
display_handler = borough_display_handler,
has_neighborhoods = true,
-- "former borough" could be a former settlement or a former part of a city but seems more likely to
-- be a former subpolity, particularly in England. FIXME, we really need a handler to take care of this
-- properly.
class = "subpolity",
-- Grr, some boroughs are city-like but some (e.g. in Britain) may be larger.
},
["borough seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["branch"] = {
link = true,
preposition = "of",
fallback = "river",
},
["bridge"] = {
link = true,
class = "man-made structure",
default = {"Named bridges"},
},
["building"] = {
link = true,
class = "man-made structure",
default = {"Named buildings"},
},
["built-up area"] = {
link = "w",
fallback = "area",
},
["burgh"] = {
link = true,
fallback = "borough",
},
["business park"] = {
link = true,
fallback = "park",
},
["caliphate"] = {
link = true,
fallback = "polity",
},
["canton"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["cape"] = {
link = true,
fallback = "headland",
},
["capital"] = {
link = true,
fallback = "capital city",
},
["capital city"] = {
link = true,
category_link = "[[capital city|capital cities]]: the [[seat of government|seats of government]] for a country or [[political]] [[division]] of a country",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
bare_category_parent = "cities",
cat_handler = capital_city_cat_handler,
default = {true},
-- The following is necessary so that e.g. [[Melbourne]] defined as {{place|en|capital city|s/Victoria|c/Australia}}
-- gets categorized in the bare category [[Category:en:Melbourne]]; otherwise placetype 'capital city' wouldn't
-- match against the placetype 'city' of Melbourne.
fallback = "city",
},
["caplc"] = {
link = "[[capital]] and [[large]]st [[city]]",
plural_link = false,
fallback = "capital city",
},
["captaincy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["caravan city"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"ANCIENT", "FORMER"},
},
["castle"] = {
link = true,
fallback = "building",
},
["cathedral city"] = {
link = true,
fallback = "city",
},
["cattle station"] = {
-- Australia
link = true,
fallback = "farm",
},
["census area"] = {
link = true,
affix_type = "Suf",
has_neighborhoods = true,
class = "non-admin settlement",
},
["census-designated place"] = {
-- United States
link = true,
class = "non-admin settlement",
},
["census division"] = {
-- Canada
link = "w",
preposition = "of",
class = "subpolity",
},
["census town"] = {
link = "w",
fallback = "town",
},
["central business district"] = {
link = true,
fallback = "neighborhood",
},
["cercle"] = {
-- Mali
link = "+w:cercles of Mali",
preposition = "of",
class = "subpolity",
},
["ceremonial county"] = {
link = true,
fallback = "county",
},
["chain of islands"] = {
link = "[[chain]] of [[island]]s",
plural = "chains of islands",
plural_link = "[[chain]]s of [[island]]s",
fallback = "island",
},
["channel"] = {
link = true,
fallback = "strait",
},
["charter community"] = {
-- Northwest Territories, Canada
link = "w",
fallback = "village",
},
["city"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["city-state"] = {
link = true,
category_link = "[[sovereign]] [[microstate]]s consisting of a single [[city]] and [[w:dependent territory|dependent territories]]",
has_neighborhoods = true,
class = "settlement",
["continent/*"] = {"City-states", "Cities in +++", "Countries in +++", "National capitals"},
default = {"City-states", "Cities", "Countries", "National capitals"},
},
["civil parish"] = {
-- Mostly England; similar to municipalities
link = true,
preposition = "of",
affix_type = "suf",
has_neighborhoods = true,
class = "subpolity",
},
["claimed political division"] = {
link = "[[claim]]ed [[political]] [[division]]",
class = "subpolity",
default = {true},
},
["co-capital"] = {
link = "[[co-]][[capital]]",
fallback = "capital city",
},
["coal city"] = {
link = "+w:coal town",
fallback = "city",
},
["coal town"] = {
link = "w",
fallback = "town",
},
["collectivity"] = {
link = "w",
preposition = "of",
-- No default; these are weird one-off governmental divisions in France (esp. for overseas collectivities)
class = "subpolity",
},
["colony"] = {
link = true,
fallback = "dependent territory",
},
["comarca"] = {
-- per Wikipedia: traditional region or local administrative division found in Portugal, Spain, and some of
-- their former colonies, like Brazil, Nicaragua, and Panama. In the Valencian Community, for example, it
-- sits between municipalities and provinces, something like a county or district.
link = true,
preposition = "of",
class = "subpolity",
},
["commandery"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["commonwealth"] = {
link = true,
preposition = "of",
-- No default; applies specifically to Puerto Rico
class = "subpolity",
},
["commune"] = {
link = true,
fallback = "municipality",
},
["community"] = {
link = true,
category_link = "[[community|communities]] of all sizes",
fallback = "village",
},
["community development block"] = {
-- in India; appears to be similar to a rural municipality; groups several villages, unclear if there will be
-- neighborhoods so I'm not setting `has_neighborhoods` for now
link = "w",
affix_type = "suf",
no_affix_strings = "block",
class = "subpolity",
},
["comune"] = {
-- Italy, Switzerland
link = true,
fallback = "municipality",
},
["condominium"] = {
link = true,
fallback = "polity",
},
["confederacy"] = {
link = true,
fallback = "confederation",
},
["confederation"] = {
link = true,
fallback = "polity",
},
["constituency"] = {
-- currently we have them as political divisions of Namibia but many countries have them
link = true,
preposition = "of",
class = "subpolity",
},
["constituent country"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["constituent part"] = {
link = "separately",
preposition = "of",
class = "subpolity",
},
["constituent republic"] = {
-- Of Russia, Yugoslavia, etc.
link = "separately",
preposition = "of",
class = "subpolity",
},
["counties and county-level cities!"] = {
-- This is used when grouping counties and county-level cities under prefecture-level cities in China.
category_link = "[[county|counties]] and [[county-level city|county-level cities]]",
class = "subpolity",
},
["continent"] = {
link = true,
category_link = false, -- can't occur as a bare category
class = "natural feature",
default = {"Continents and continental regions"},
},
["continental region"] = {
link = "separately",
category_link = false, -- can't occur as a bare category
class = "geographic region",
fallback = "continent",
},
["continents and continental regions!"] = {
category_link = "[[continent]]s and [[continent]]-[[level]] [[region]]s (e.g. [[Polynesia]])",
class = "geographic region",
},
["council area"] = {
link = true,
-- in Scotland; similar to a county
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["country"] = {
link = true,
class = "polity",
["continent/*"] = {true, "Countries"},
default = {true},
},
["country-like entities!"] = {
category_link = "[[polity|polities]] not normally considered [[country|countries]] but treated similarly for categorization purposes; typically, [[unrecognized]] [[de-facto]] countries or [[w:dependent territory|dependent territories]]",
class = "polity",
},
["county"] = {
link = true,
preposition = "of",
display_handler = county_display_handler,
class = "subpolity",
},
["county borough"] = {
link = true,
-- in Wales; similar to a county
preposition = "of",
affix_type = "suf",
fallback = "borough",
class = "subpolity",
},
["county seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["county town"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
fallback = "town",
has_neighborhoods = true,
class = "capital",
},
["county-administered city"] = {
-- In Taiwan, per Wikipedia similar to a Taiwanese township or district, which is a small city.
-- NOT anything like a "county-level city" in PR China, which is a county masquerading as a city.
link = "w",
fallback = "city",
has_neighborhoods = true,
class = "settlement",
},
["county-controlled city"] = {
-- Taiwan
link = "w",
fallback = "county-administered city",
},
["county-level city"] = {
-- PR China
link = "w",
fallback = "prefecture-level city",
},
["crater lake"] = {
link = true,
fallback = "lake",
},
["creek"] = {
link = true,
fallback = "stream",
},
["Crown colony"] = {
link = "+crown colony",
fallback = "crown colony",
},
["crown colony"] = {
link = true,
fallback = "colony",
},
["Crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["cultural area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["cultural region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["delegation"] = {
-- Tunisia
link = "+w:delegations of Tunisia",
preposition = "of",
class = "subpolity",
},
["department"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["departmental capital"] = {
link = "separately",
fallback = "capital city",
},
["dependency"] = {
link = true,
fallback = "dependent territory",
},
["dependent territory"] = {
link = "w",
preposition = "of",
class = "subpolity",
former_type = "dependent territory",
bare_category_parent = "political divisions",
["country/*"] = {true},
default = {true},
},
["desert"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems"},
default = {true},
},
["deserted mediaeval village"] = {
link = "w",
fallback = "deserted medieval village",
},
["deserted medieval village"] = {
link = "w",
fallback = "ANCIENT settlement",
},
["direct-administered municipality"] = {
-- China
link = "+w:direct-administered municipalities of China",
fallback = "municipality",
},
["direct-controlled municipality"] = {
-- several countries
link = "w",
fallback = "municipality",
},
["distributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["district"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- Grrr! FIXME! Here is where we need handlers for `class`. Using similar logic to
-- district_neighborhood_cat_handler, we need to check if we're below or above a city to determine if the class
-- is "settlement" or "subpolity".
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
-- No default. Countries for which districts are political divisions will get entries.
},
["districts and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Portugal.
category_link = "[[district]]s and [[autonomous region]]s",
class = "subpolity",
},
["districts and autonomous territorial units!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Moldova.
category_link = "[[district]]s and [[w:autonomous territorial unit|autonomous territorial unit]]s",
class = "subpolity",
},
["district capital"] = {
link = "separately",
fallback = "capital city",
},
["district headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["district municipality"] = {
-- In Canada, a district municipality is equivalent to a rural municipality and won't have neighborhoods; in
-- South Africa, district municipalities group local municipalities and hence won't have neighborhoods.
link = "w",
preposition = "of",
affix_type = "suf",
no_affix_strings = {"district", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["division"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["division capital"] = {
link = "separately",
fallback = "capital city",
},
["dome"] = {
link = true,
fallback = "mountain",
},
["dormant volcano"] = {
link = true,
fallback = "volcano",
},
["duchy"] = {
link = true,
fallback = "polity",
},
["emirate"] = {
link = true,
preposition = "of",
-- FIXME: Can be subpolities (of the United Arab Emirates).
fallback = "polity",
},
["empire"] = {
link = true,
fallback = "polity",
},
["enclave"] = {
link = true,
preposition = "of",
-- Enclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["entity"] = {
-- Bosnia and Herzegovina
link = "+w:entities of Bosnia and Herzegovina",
preposition = "of",
class = "subpolity",
},
["escarpment"] = {
link = true,
fallback = "mountain",
},
["ethnographic region"] = {
-- used in Lithuania
link = "+w:ethnographic regions of Lithuania",
fallback = "geographic and cultural area",
},
["exclave"] = {
link = true,
preposition = "of",
-- exclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["external territory"] = {
link = "separately",
fallback = "dependent territory",
},
["farm"] = {
link = true,
class = "non-admin settlement",
default = {"Farms and ranches"},
},
["farms and ranches!"] = {
category_link = "[[farm]]s and [[ranch]]es",
class = "non-admin settlement",
},
["federal city"] = {
link = "w",
preposition = "of",
fallback = "city",
},
["federal district"] = {
link = true,
preposition = "of",
-- Might have neighborhoods as federal districts are often cities (e.g. Mexico City)
has_neighborhoods = true,
class = "settlement",
},
["federal subject"] = {
-- In Russia; a generic term for first-level administrative divisions (republics, oblasts, okrugs, krais,
-- autonomous okrugs and autonomous oblasts).
link = "w",
preposition = "of",
class = "subpolity",
},
["federal territory"] = {
link = "w",
fallback = "territory",
},
["fictional location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["First Nations reserve"] = {
-- Canada
link = "[[First Nations]] [[w:Indian reserve|reserve]]",
-- Wikipedia uses "Indian reserve"; presumably that is the legal term
fallback = "Indian reserve",
class = "subpolity",
},
["fjord"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["footpath"] = {
link = true,
fallback = "road",
},
["forest"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems", "forestry"},
default = {true},
},
["fort"] = {
link = true,
fallback = "building",
},
["fortress"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- fortresses -> fortresse, so put an entry here to ensure we singularize correctly.
plural = "fortresses",
fallback = "building",
},
["frazione"] = {
link = "w",
fallback = "hamlet",
},
["freeway"] = {
link = true,
fallback = "road",
},
["French prefecture"] = {
link = "[[w:prefectures in France|prefecture]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["geographic and cultural area"] = {
link = "+w:cultural area",
-- `generic_before_non_cities` is used when generating the category description of categories of the format
-- `Geographic and cultural areas of PLACE`. `preposition` is used when generating {{place}} description and
-- categories for any placetype that falls back to `geographic and cultural area`.
generic_before_non_cities = "of",
preposition = "of",
class = "geographic region",
bare_category_parent = "places",
["country/*"] = {true},
["constituent country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["geographic area"] = {
link = "+w:geographic region",
fallback = "geographic and cultural area",
},
["geographic region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geopolitical zone"] = {
-- Nigeria
link = true,
preposition = "of",
class = "subpolity",
},
["gewog"] = {
-- Bhutan
link = true,
preposition = "of",
class = "subpolity",
},
["ghost town"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
bare_category_parent = "former settlements",
cat_handler = city_type_cat_handler,
default = {true},
},
["glen"] = {
link = true,
fallback = "valley",
},
["governorate"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["greater administrative region"] = {
-- China (former division)
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["gromada"] = {
-- Poland (former division)
link = "w",
preposition = "of",
affix_type = "Pref",
class = "subpolity",
inherently_former = {"FORMER"},
},
["group of islands"] = {
link = "[[group]] of [[island]]s",
plural = "groups of islands",
plural_link = "[[group]]s of [[island]]s",
fallback = "island group",
},
["gulf"] = {
link = true,
preposition = "of",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["hamlet"] = {
link = true,
fallback = "village",
},
["harbor city"] = {
link = "separately",
fallback = "city",
},
["harbor town"] = {
link = "separately",
fallback = "town",
},
["harbour city"] = {
link = "separately",
fallback = "city",
},
["harbour town"] = {
link = "separately",
fallback = "town",
},
["headland"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["headquarters"] = {
link = "w",
fallback = "administrative centre",
},
["heath"] = {
link = true,
fallback = "moor",
},
["hemisphere"] = {
link = true,
entry_placetype_use_the = true,
fallback = "continental region",
},
["highway"] = {
link = true,
fallback = "road",
},
["hill"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["hill station"] = {
link = "w",
fallback = "town",
},
["hill town"] = {
link = "w",
fallback = "town",
},
["historic region"] = {
-- provided only for the link
link = "+w:historical region",
fallback = "FORMER geographic region",
},
["historical county"] = {
-- needed for historical counties of England/etc.
link = "+w:historic county",
fallback = "FORMER subpolity",
},
["historical region"] = {
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["home rule city"] = {
link = "w",
fallback = "city",
},
["home rule municipality"] = {
link = "w",
fallback = "municipality",
},
["hot spring"] = {
link = true,
fallback = "spring",
},
["house"] = {
link = true,
fallback = "building",
},
["housing estate"] = {
-- not the same as a housing project (i.e. public housing)
link = true,
-- not exactly the case but approximately
fallback = "neighborhood",
},
["hromada"] = {
-- Ukraine
link = "w",
disallow_in_entries = "Use placetype 'urban hromada', 'rural hromada' or 'settlement hromada' in place of bare 'hromada'",
disallow_in_holonyms = "Use placetype 'urban hromada'/'uhrom', 'rural hromada'/'rhrom' or 'settlement hromada'/'shrom' in place of bare 'hromada'",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["inactive volcano"] = {
link = "w",
fallback = "dormant volcano",
},
["independent city"] = {
link = true,
fallback = "city",
},
["independent town"] = {
link = "+independent city",
fallback = "town",
},
["Indian reservation"] = {
link = "w",
-- In the US. Also known as "Native American reservation" or "domestic dependent nation", and the reservations
-- themselves often use the term "nation" in their official name (e.g. the "Navajo Nation"). But Wikipedia puts
-- the article at [[w:Indian reservation]] and uses that term when describing e.g. what the Navajo Nation is,
-- so this must still be the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["Indian reserve"] = {
link = "w",
-- In Canada. "First Nations reserve" sounds more modern/PC but Wikipedia uses "Indian reserve"; presumably that
-- is still the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["inland sea"] = {
-- note, we also have 'inland' as a qualifier
link = true,
fallback = "sea",
},
["inner city area"] = {
link = "[[inner city]] [[area]]",
fallback = "neighborhood",
},
["island"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["island country"] = {
-- FIXME: The following should map to both 'island' and 'country'.
link = "w",
fallback = "country",
},
["island group"] = {
link = "separately",
fallback = "island",
},
["island municipality"] = {
link = "w",
fallback = "municipality",
},
["islet"] = {
link = "w",
fallback = "island",
},
["Israeli settlement"] = {
link = "w",
class = "settlement",
default = {true},
},
["judicial capital"] = {
link = "w",
fallback = "capital city",
},
["khanate"] = {
link = true,
fallback = "polity",
},
["kibbutz"] = {
link = true,
plural = "kibbutzim",
class = "non-admin settlement",
default = {true},
},
["kingdom"] = {
link = true,
fallback = "monarchy",
},
["krai"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["lake"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["landforms!"] = {
category_link = "[[landform]]s",
bare_category_parent = "places",
addl_bare_category_parents = {"Earth"},
},
["largest city"] = {
link = "[[large]]st [[city]]",
entry_placetype_use_the = true,
fallback = "city",
has_neighborhoods = true,
},
["league"] = {
link = true,
fallback = "confederation",
},
["legislative capital"] = {
link = "separately",
fallback = "capital city",
},
["library"] = {
link = true,
fallback = "building",
},
["lieutenancy area"] = {
-- used in the United Kingdom; per Wikipedia:
-- In England, lieutenancy areas are colloquially known as the ceremonial counties, although this phrase does
-- not appear in any legislation referring to them. The lieutenancy areas of Scotland are subdivisions of
-- Scotland that are more or less based on the counties of Scotland, making use of the major cities as separate
-- entities.[2] In Wales, the lieutenancy areas are known as the preserved counties of Wales and are based on
-- those used for lieutenancy and local government between 1974 and 1996. The lieutenancy areas of Northern
-- Ireland correspond to the six counties and two former county boroughs.[3]
link = "w",
fallback = "ceremonial county",
},
["local authority district"] = {
link = "w",
fallback = "local government district",
},
["local government area"] = {
-- Australia
link = "w",
preposition = "of",
class = "subpolity",
},
["local council"] = {
-- Malta; similar to municipalities
link = "+w:local councils of Malta",
preposition = "of",
fallback = "municipality",
},
["local government district"] = {
link = "w",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local government district with borough status"] = {
link = "[[w:local government district|local government district]] with [[w:borough status|borough status]]",
plural = "local government districts with borough status",
plural_link = "[[w:local government district|local government districts]] with [[w:borough status|borough status]]",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local urban district"] = {
link = "w",
fallback = "unincorporated community",
},
["locality"] = {
link = "+w:locality (settlement)",
-- not necessarily true, but usually is the case
fallback = "village",
},
["London borough"] = {
link = "w",
preposition = "of",
affix_type = "pref",
affix = "borough",
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["macroregion"] = {
link = true,
fallback = "region",
},
["man-made structures!"] = {
category_link = "[[w:geographical feature#Engineered constructs|man-made structures]] such as [[airport]]s, [[university|universities]] and [[metro station]]s",
bare_category_parent = "places",
},
["manor"] = {
-- FIXME: or is this more like a farm?
link = true,
fallback = "building",
},
["marginal sea"] = {
link = true,
preposition = "of",
fallback = "sea",
},
["market city"] = {
link = "+market town",
fallback = "city",
},
["market town"] = {
link = true,
fallback = "town",
},
["massif"] = {
link = true,
fallback = "mountain",
},
["megacity"] = {
link = true,
fallback = "city",
},
["metro station"] = {
link = true,
class = "man-made structure",
},
["metropolitan borough"] = {
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"borough", "city"},
fallback = "local government district",
has_neighborhoods = true,
},
["metropolitan city"] = {
-- These exist e.g. in Italy and are more like municipalities or even provinces than cities.
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"metropolitan", "city"},
class = "subpolity",
},
["metropolitan county"] = {
link = true,
fallback = "county",
},
["metropolitan municipality"] = {
-- In South Africa, metropolitan municipalities group local municipalities and are like districts, between
-- provinces and municipalities.
-- In Turkey, metropolitan municipalities are provinces-level.
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"metropolitan", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["microdistrict"] = {
-- residential complex in post-Soviet states
link = true,
fallback = "neighborhood",
},
["micronations!"] = {
-- FIXME, merge with microstate
category_link = "[[micronation]]s",
bare_category_parent = "countries",
},
["microstate"] = {
link = true,
fallback = "country",
},
["military base"] = {
link = "w",
class = "settlement", -- or "man-made structure"?
default = {true},
},
["minster town"] = {
-- England
link = "separately",
fallback = "town",
},
["monarchy"] = {
link = true,
fallback = "polity",
},
["moor"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems"},
default = {true},
},
["moorland"] = {
link = true,
fallback = "moor",
},
["motorway"] = {
link = true,
fallback = "road",
},
["mountain"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["mountain indigenous district"] = {
-- Taiwan
link = "+w:district (Taiwan)",
fallback = "district",
},
["mountain indigenous township"] = {
-- Taiwan
link = "+w:township (Taiwan)",
fallback = "township",
},
["mountain pass"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "mountain passes",
class = "natural feature",
addl_bare_category_parents = {"mountains"},
default = {true},
},
["mountain range"] = {
link = true,
fallback = "mountain",
},
["mountainous region"] = {
link = "separately",
fallback = "region",
},
["mukim"] = {
-- Malaysia, Brunei, Indonesia, Singapore
link = true,
preposition = "of",
class = "subpolity",
},
["municipal district"] = {
link = "w",
-- meaning varies depending on the country; for now, assume no neighborhoods.
-- FIXME: has_neighborhoods might have to be a function that looks at the containing holonyms.
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "municipality",
},
["municipality"] = {
link = true,
preposition = "of",
has_neighborhoods = true,
class = "subpolity",
},
["municipality with city status"] = {
link = "[[municipality]] with [[w:city status|city status]]",
plural = "municipalities with city status",
plural_link = "[[municipality|municipalities]] with [[w:city status|city status]]",
fallback = "municipality",
},
["museum"] = {
link = true,
fallback = "building",
},
["mythological location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["named bridges!"] = {
category_link = "notable [[bridge]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"bridges"},
},
["named buildings!"] = {
category_link = "notable [[house]]s, [[library|libraries]] and other [[building]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"buildings"},
},
["named roads!"] = {
category_link = "notable [[road]]s, [[highway]]s, [[trail]]s and similar linear structures",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"roads"},
},
["national capital"] = {
link = "w",
fallback = "capital city",
},
["national park"] = {
link = true,
fallback = "park",
},
["natural features!"] = {
category_link = "[[w:geographical feature#Natural features|natural features]] such as [[lake]]s, [[mountain]]s, [[island]]s and [[ocean]]s",
bare_category_parent = "places",
},
["neighborhood"] = {
-- The majority of the properties here apply to both `neighborhoods` and `neighbourhoods`; the choice of which
-- one to use is made by district_neighborhood_cat_handler() based on the value of `british_spelling` for the
-- location (city, political division, etc.) of the holonym that follows the word "neighbo(u)hoods" in the
-- category name. It does *NOT* depend on whether the {{place}} call uses "neighborhoods" or "neighbourhoods".
-- (In general it can't, because other things like "urban areas", "districts", "subdivisions" and the like also
-- categorize as neighbo(u)rhoods.)
link = true,
-- See below. These are used by category handlers in [[Module:category tree/topic cat/data/Places]].
generic_before_non_cities = "in",
generic_before_cities = "of",
-- The following text is suitable for the top-level description of a neighborhood as well as categories of the
-- form `Neighborhoods in POLDIV` e.g. `Neighborhoods in Illinois, USA` but not for categories of the form
-- `Neighborhoods of Chicago`, where we'd get "... and other subportions of [[city|cities]] of [[Chicago]]".
category_link = "[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighborhood]]s, [[district]]s and other subportions",
-- NOTE: This setting is needed for administrative divisions like barangays that fall back to `neighborhood`,
-- when set in [[Module:place/locations]] for a specific country (e.g. the Philippines). The above settings
-- for `generic_before_non_cities` and `generic_before_cities` are used by category handlers in
-- [[Module:category tree/topic cat/data/Places]] for `Neighborhoods in POLDIV` and `Neighborhoods of CITY`
-- categories. In fact, district_neighborhood_cat_handler() does not currently pay attention to them, but
-- generates "of" before cities and "in" before non-cities regardless. (FIXME: We should change that.)
preposition = "of",
class = "non-admin settlement",
cat_handler = district_neighborhood_cat_handler,
},
["neighbourhood"] = {
link = true,
category_link = "[[neighbourhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighbourhood]]s, [[district]]s and other subportions",
fallback = "neighborhood",
},
["new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
preposition = "in",
class = "subpolity", --?
},
["new town"] = {
link = true,
fallback = "town",
},
["non-city capital"] = {
link = "[[capital]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
cat_handler = function(data)
return capital_city_cat_handler(data, "non-city")
end,
-- FIXME, do we need the following?
default = {true},
},
["non-metropolitan county"] = {
link = "w",
fallback = "county",
},
["non-metropolitan district"] = {
link = "w",
fallback = "local government district",
},
["non-sovereign kingdom"] = {
-- especially in Africa and Asia
link = "+w:non-sovereign monarchy",
generic_before_non_cities = "in",
class = "subpolity",
["country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["non-sovereign monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["oblasts and autonomous republics!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Ukraine.
category_link = "[[oblast]]s and [[w:autonomous republic|autonomous republic]]s",
class = "subpolity",
},
["ocean"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"seas", "bodies of water"},
default = {true},
},
["okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["overseas collectivity"] = {
link = "w",
fallback = "collectivity",
},
["overseas department"] = {
link = "w",
fallback = "department",
},
["overseas territory"] = {
link = "w",
fallback = "dependent territory",
},
["parish"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["parish municipality"] = {
-- in Quebec, often similar to a rural village; the famous [[Saint-Louis-du-Ha! Ha!]] is one of them.
link = "+w:parish municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true,
},
["parish seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
class = "capital",
has_neighborhoods = true,
},
["park"] = {
link = true,
class = "man-made structure",
default = {true},
},
["pass"] = {
link = "+mountain pass",
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "passes",
fallback = "mountain pass",
},
["path"] = {
link = true,
fallback = "road",
},
["peak"] = {
link = true,
fallback = "mountain",
},
["peninsula"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["periphery"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["places!"] = {
generic_before_non_cities = "in",
generic_before_cities = "in",
class = "generic place",
category_link = "[[place]]s of all sorts",
-- `category_link_top_level` control the description used in the top-level [[Category:Places]] and
-- language-specific variants such as [[Category:en:Places]]. The actual text for a language-spefic variant is
-- "{{{langname}}} names of [[geographical]] [[place]]s of all sorts; [[toponym]]s." where the "names of"
-- portion is automatically generated by the appropriate handler in
-- [[Module:category tree/topic cat/data/Places]].
category_link_top_level = "[[geographical]] [[place]]s of all sorts; [[toponym]]s",
bare_category_parent = "names",
},
["planned community"] = {
-- Include this so we don't categorize 'planned community' into villages, as 'community' does.
link = true,
class = "settlement",
has_neighborhoods = true,
},
["plateau"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
-- FIXME: Should generate both "Plateaus" and the appropriate 'geographic and cultural area' category
},
["Polish colony"] = {
link = "[[w:colony (Poland)|colony]]",
affix_type = "suf",
affix = "colony",
fallback = "village",
has_neighborhoods = true,
},
["political divisions!"] = {
category_link = "[[political]] [[division]]s and [[subdivision]]s, such as [[state]]s, [[province]]s, [[county|counties]] or [[district]]s",
bare_category_parent = "places",
},
["polity"] = {
link = true,
category_link = "[[independent]] or [[semi-]][[independent]] [[polity|polities]]",
class = "polity",
bare_category_parent = "places",
default = {true},
},
["populated place"] = {
link = "+w:populated place",
-- not necessarily true, but usually is the case
fallback = "village",
},
["port"] = {
link = true,
class = "man-made structure",
default = {true},
},
["port city"] = {
-- FIXME: should categorize into "Ports" as well as "Cities"
link = true,
fallback = "city",
},
["port town"] = {
-- FIXME: should categorize into "Ports" as well as "Towns"
link = "w",
fallback = "town",
},
["prefecture"] = {
-- FIXME! `prefecture` is like a county in Japan and elsewhere but a department capital city in France.
-- May need `has_neighborhoods` to be a function.
link = true,
preposition = "of",
display_handler = prefecture_display_handler,
class = "subpolity",
},
["prefecture-level city"] = {
-- China; they are huge entities with a central city; not cities themselves.
link = "w",
preposition = "of",
class = "subpolity",
},
["preserved county"] = {
-- In Wales; they are former counties enshrined in law; there are 8 of them and each consists of one or more
-- "principal areas" (styled as "counties" or "county boroughs"), of which there are 22.
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["primary area"] = {
-- a grouping of "districts" (neighborhoods) in Gothenburg, Sweden
link = "+w:sv:primärområde",
fallback = "neighborhood",
},
["principality"] = {
link = true,
fallback = "monarchy",
},
["promontory"] = {
link = true,
fallback = "headland",
},
["protectorate"] = {
link = true,
fallback = "dependent territory",
},
["province"] = {
link = true,
preposition = "of",
display_handler = province_display_handler,
class = "subpolity",
},
["provinces and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case China.
category_link = "[[province]]s and [[autonomous region]]s",
class = "subpolity",
},
["provinces and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Canada and Pakistan.
category_link = "[[province]]s and [[territory|territories]]",
class = "subpolity",
},
["provincial capital"] = {
link = "separately",
fallback = "capital city",
},
["raion"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["ranch"] = {
link = true,
fallback = "farm",
},
["range"] = {
-- FIXME: Where is this used? Is it a mountain range?
link = true,
holonym_use_the = true,
class = "natural feature",
},
["regency"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["region"] = {
link = true,
preposition = "of",
-- If 'region' isn't a specific administrative division, fall back to 'geographic and cultural area'
fallback = "geographic and cultural area",
-- "former region" is a subpolity but traditional/historic(al)/ancient/medieval/etc. is a geographic region
class = "geographic region",
},
["regional capital"] = {
link = "separately",
fallback = "capital city",
},
["regional county municipality"] = {
-- Quebec
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"municipality", "county"},
fallback = "municipality",
},
["regional district"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "district",
},
["regional municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
},
["regional unit"] = {
link = "w",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["registration county"] = {
-- Used in Scotland for land registration purposes; formerly used in England, Wales and Ireland for statistical
-- purposes (registration of births, deaths and marriages, and for the output of census information).
link = "w",
fallback = "county",
},
["republic"] = {
-- Of Russia, Yugoslavia, etc. "Republics" in general are sovereign but we use "country" in that case.
link = true,
fallback = "constituent republic",
},
["research base"] = {
link = "+w:research station",
fallback = "research station",
},
["research station"] = {
link = "w",
class = "non-admin settlement", -- or "man-made structure"?
default = {true},
},
["reservoir"] = {
link = true,
fallback = "lake",
},
["residential area"] = {
link = "separately",
fallback = "neighborhood",
},
["resort city"] = {
link = "w",
fallback = "city",
},
["resort town"] = {
link = "w",
fallback = "town",
},
["river"] = {
link = true,
generic_before_non_cities = "in",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
cat_handler = city_type_cat_handler,
["continent/*"] = {true},
default = {true},
},
["river island"] = {
link = "w",
fallback = "island",
},
["road"] = {
link = true,
class = "man-made structure",
default = {"Named roads"},
},
["Roman province"] = {
-- FIXME! Eliminate this in favor of 'former province|emp/Roman Empire'
link = "w",
default = {"Provinces of the Roman Empire"},
class = "subpolity",
},
["royal borough"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"royal", "borough"},
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["royal burgh"] = {
link = true,
fallback = "borough",
},
["royal capital"] = {
link = "w",
fallback = "capital city",
},
["rural committee"] = {
-- Hong Kong; a group of villages
link = "w",
affix_type = "Suf",
has_neighborhoods = true,
class = "settlement",
},
["rural community"] = {
-- New Brunswick
link = "+w:list of municipalities in New_Brunswick#Rural communities",
fallback = "municipality",
},
["rural hromada"] = {
link = "[[rural]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["rural municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
has_neighborhoods = true, --?
},
["rural township"] = {
-- Taiwan
link = "+w:rural township (Taiwan)",
fallback = "township",
},
["sanctuary"] = {
link = true,
fallback = "temple",
},
["satrapy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["sea"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["seaport"] = {
link = true,
fallback = "port",
},
["seat"] = {
link = true,
fallback = "administrative centre",
},
["self-administered area"] = {
-- Myanmar (groups self-administered divisions and zones)
link = "+w:self-administered zone",
preposition = "of",
class = "subpolity",
},
["self-administered division"] = {
-- Myanmar (only one of them: Wa Self-Administered Division)
link = "w",
fallback = "self-administered area",
},
["self-administered zone"] = {
-- Myanmar (five of them)
link = "w",
fallback = "self-administered area",
},
["separatist state"] = {
link = "separately",
fallback = "unrecognized country",
},
["settlement"] = {
link = true,
category_link = "[[settlement]]s such as [[city|cities]], [[village]]s and [[farm]]s",
bare_category_parent = "places",
-- not necessarily true, but usually is the case
fallback = "village",
},
["settlement hromada"] = {
link = "[[w:Populated places in Ukraine#Rural settlements|settlement]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["sheading"] = {
-- Isle of Man
link = true,
fallback = "district",
},
["sheep station"] = {
-- Australia
link = true,
fallback = "farm",
},
["shire"] = {
link = true,
fallback = "county",
},
["shire county"] = {
link = "w",
fallback = "county",
},
["shire town"] = {
link = true,
fallback = "county seat",
},
["ski resort city"] = {
link = "[[ski resort]] [[city]]",
fallback = "city",
},
["ski resort town"] = {
link = "[[ski resort]] [[town]]",
fallback = "town",
},
["spa city"] = {
link = "+w:spa town",
fallback = "city",
},
["spa town"] = {
link = "w",
fallback = "town",
},
["space station"] = {
link = true,
fallback = "research station",
},
["special administrative region"] = {
-- in China; in practice they are city-like (Hong Kong, Macau); also [[Oecusse]] in East Timor is formally a
-- "special administrative region"; North Korea had one such region planned (Sinuiju) but abandoned; Indonesia
-- has similar "special regions" of Jakarta, Yogyakarta and Aceh; and South Sudan has three "special
-- administrative areas"
link = "+w:special administrative regions of China",
preposition = "of",
class = "subpolity",
has_neighborhoods = true, --?
-- no suffix since places in Hong Kong or Macau are listed without China, except Hong Kong and Macau themselves
-- they also contain regions (or areas), e.g. [[Kowloon]], so it would be confusing
suffix = "",
},
["special collectivity"] = {
link = "w",
fallback = "collectivity",
},
["special municipality"] = {
-- formerly linked to the Taiwan article but there are also special municipalities of the Netherlands
link = "w",
fallback = "municipality",
},
["special ward"] = {
-- Tokyo
link = true,
fallback = "municipality",
},
["spit"] = {
link = true,
fallback = "peninsula",
},
["spring"] = {
link = true,
class = "natural feature",
default = {true},
},
["star"] = {
link = true,
class = "natural feature",
default = {true},
},
["state"] = {
link = true,
preposition = "of",
class = "subpolity",
-- 'former/historical state' could refer either to a state of a country (a division) or a state = sovereign
-- entity. The latter appears more common (e.g. in various "ancient states" of East Asia).
former_type = "polity",
},
["states and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Australia.
category_link = "[[state]]s and [[territory|territories]]",
class = "subpolity",
},
["states and union territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case India.
category_link = "[[state]]s and [[union territory|union territories]]",
class = "subpolity",
},
["state capital"] = {
link = true,
fallback = "capital city",
},
["state park"] = {
link = true,
fallback = "park",
},
["state-level new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
fallback = "new area",
},
["statistical region"] = {
-- Slovenia
link = true,
fallback = "administrative region",
},
["statutory city"] = {
link = "w",
fallback = "city",
},
["statutory town"] = {
link = "w",
fallback = "town",
},
["strait"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["stream"] = {
link = true,
fallback = "river",
},
["street"] = {
link = true,
fallback = "road",
},
["strip"] = {
link = true,
fallback = "geographic region",
},
["strip of land"] = {
link = "[[strip]] of [[land]]",
plural = "strips of land",
plural_link = "[[strip]]s of [[land]]",
fallback = "geographic region",
},
["sub-metropolitan city"] = {
link = "+w:List of cities in Nepal#Sub-metropolitan cities",
fallback = "city",
},
["sub-prefectural city"] = {
link = "w",
fallback = "subprovincial city",
},
["subdistrict"] = {
link = true,
preposition = "of",
has_neighborhoods = true, --?
-- FIXME: subdistricts can be neighborhood-like (of Jakarta) or larger (in China); need a handler
class = "subpolity",
default = {true},
},
["subdivision"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- FIXME: subdivisions can be neighborhood-like or larger; need a handler
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
},
["submerged ghost town"] = {
-- FIXME: Consider just having "submerged" as a qualifier.
link = "[[submerged]] [[ghost town]]",
fallback = "ghost town",
},
["subnational kingdom"] = {
link = "+w:subnational monarchy",
fallback = "non-sovereign kingdom",
},
["subnational monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["subprefecture"] = {
link = true,
affix_type = "suf",
preposition = "of",
class = "subpolity",
},
["subprovince"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["subprovincial city"] = {
link = "w",
-- China; special status given to certain prefecture-level cities
fallback = "prefecture-level city",
},
["subprovincial district"] = {
link = "w",
-- China; special status given to Binhai New Area and Pudong New Area, which are county-level districts
preposition = "of",
class = "subpolity",
},
["subregion"] = {
link = true,
fallback = "geographic region",
},
["suburb"] = {
link = true,
-- The following text is suitable for the top-level description of a suburb as well as categories of the form
-- 'Suburbs in POLDIV' e.g. 'Suburbs in Illinois, USA' but not for categories of the form 'Suburbs of Chicago',
-- where we'd get "[[suburb]]s of [[city|cities]] of [[Chicago]]".
category_link = "[[suburb]]s of [[city|cities]]",
category_link_before_city = "[[suburb]]s",
-- See comments under "neighborhood" for the following three settings. They are used by
-- [[Module:category tree/topic cat/data/Places]] for generating the text of 'Suburbs in/of PLACE' categories
-- but currently ignored by district_neighborhood_cat_handler (which actually generates the categories for a
-- given page), which hardcodes "in" for non-cities and "of" for cities. (FIXME: Change this.)
generic_before_non_cities = "in",
generic_before_cities = "of",
preposition = "of",
has_neighborhoods = true, --?
class = "non-admin settlement", --?
cat_handler = district_neighborhood_cat_handler,
},
["suburban area"] = {
link = "w",
fallback = "suburb",
},
["subway station"] = {
link = "w",
fallback = "metro station",
},
["sum"] = {
-- In China, Mongolia, Russia; something like a county in Mongolia but a township in China (Inner Mongolia),
-- and equivalent to a [[selsoviet]] in the parts of Russia where it's in use (a rural council, below a raion).
link = "+w:sum (administrative division)",
-- This fallback is somewha arbitrary. We could use "county" but that has a display handler
-- which we don't want to be active (FIXME: If the display handler would be active, that's a bug).
fallback = "division",
},
["supercontinent"] = {
link = true,
fallback = "continent",
},
["tehsil"] = {
link = true,
affix_type = "suf",
no_affix_strings = {"tehsil", "tahsil"},
class = "subpolity",
},
["temple"] = {
link = true,
fallback = "building",
},
["territorial authority"] = {
link = "w",
fallback = "district",
},
["territory"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["theme"] = {
link = "+w:theme (Byzantine district)",
preposition = "of",
class = "subpolity",
},
["town"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["town with bystatus"] = {
-- can't use templates in links currently
link = "[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]",
plural = "towns with bystatus",
plural_link = "[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]",
fallback = "town",
},
["township"] = {
link = true,
has_neighborhoods = true,
class = "settlement", --?
default = {true},
},
["township municipality"] = {
-- Quebec
link = "+w:township municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["traditional county"] = {
link = true,
fallback = "county",
},
["traditional region"] = {
-- FIXME: Verify this works. Same for 'historic(al) region'.
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["trail"] = {
link = true,
fallback = "road",
},
["treaty port"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"FORMER"},
},
["tributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["underground station"] = {
link = "w",
fallback = "metro station",
},
["unincorporated area"] = {
link = "w",
-- I don't know if this fallback makes sense everywhere.
fallback = "unincorporated community",
},
["unincorporated community"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
},
["unincorporated territory"] = {
link = "w",
fallback = "territory",
},
["union territory"] = {
-- India
link = true,
preposition = "of",
entry_placetype_indefinite_article = "a",
class = "subpolity",
},
["unitary authority"] = {
-- UK, New Zealand
link = true,
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["unitary district"] = {
link = "w",
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["united township municipality"] = {
-- Quebec
link = "+w:united township municipality (Quebec)",
entry_placetype_indefinite_article = "a",
fallback = "township municipality",
has_neighborhoods = true, --?
},
["university"] = {
link = true,
entry_placetype_indefinite_article = "a",
class = "man-made structure",
default = {true},
},
["unrecognised country"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized and nearly unrecognized countries!"] = {
category_link = "[[de facto]] [[independent]] [[state]]s with little or no {{w|international recognition}}",
bare_category_parent = "country-like entities",
},
["unrecognized country"] = {
link = "w",
class = "polity",
default = {"Unrecognized and nearly unrecognized countries"},
},
["unrecognised state"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized state"] = {
link = "w",
fallback = "unrecognized country",
},
["urban area"] = {
link = "separately",
fallback = "neighborhood",
},
["urban hromada"] = {
link = "[[urban]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["urban service area"] = {
-- A strange beast existing in Alberta; technically a type of hamlet but in practice used for much larger
-- cities and treated equivalent to a city. (There are only two of them, [[Fort McMurray]] and [[Sherwood Park]]).
link = "w",
fallback = "city",
},
["urban township"] = {
link = "w",
fallback = "township",
},
["urban-type settlement"] = {
-- appears to be a particular type of small urban settlement in post-Soviet states,
-- had an administrative function.
link = "w",
fallback = "town",
},
["valley"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "water"},
default = {true},
},
["viceroyalty"] = {
-- in essence, a type of colony
link = true,
fallback = "dependent territory",
},
["village"] = {
link = true,
generic_before_non_cities = "in",
category_link = "[[village]]s, [[hamlet]]s, and other small [[community|communities]] and [[settlement]]s",
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["village development committee"] = {
-- former administrative structure in Nepal; also exists in India but not as a formal unit
link = "+w:village development committee (Nepal)",
inherently_former = {"FORMER"},
fallback = "village",
},
["village municipality"] = {
-- Quebec
link = "+w:village municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["voivodeship"] = {
-- Poland
link = true,
display_handler = voivodeship_display_handler,
preposition = "of",
class = "subpolity",
},
["volcano"] = {
link = true,
plural = "volcanoes",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true, "Mountains"},
},
["ward"] = {
link = true,
class = "settlement",
-- Wards are formal administrative divisions of a city but have some properties of neighborhoods.
fallback = "neighborhood",
},
["watercourse"] = {
link = true,
fallback = "channel",
},
["Welsh community"] = {
-- Wales
link = "[[w:community (Wales)|community]]",
preposition = "of",
affix_type = "suf",
affix = "community",
has_neighborhoods = true,
class = "settlement",
},
["zone"] = {
-- administrative division of Ethiopia, Qatar, Nepal, India
link = "+w:zone#Place names",
preposition = "of",
class = "subpolity",
},
----------------------------------------------------------------------------------------------
-- Categories for former places --
----------------------------------------------------------------------------------------------
["ANCIENT capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
-- FIXME: Consider removing 'ancient settlements' here. Ancient capitals, like former capitals, often still
-- exist but just aren't the capital any more. Maybe we should have an 'Ancient capitals' category.
default = {"Ancient settlements", "Former capitals"},
},
["ANCIENT non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "ANCIENT settlement",
},
["ANCIENT settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Ancient settlements"},
},
["ancient settlements!"] = {
category_link = "former [[city|cities]], [[town]]s and [[village]]s that existed in [[antiquity]]",
bare_category_parent = "former settlements",
},
["FORMER capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
default = {"Former capitals"},
},
["former capitals!"] = {
category_link = "former [[capital]] [[city|cities]] and [[town]]s",
bare_category_parent = "settlements",
},
["former counties and county-level cities!"] = {
-- For categorizing former counties and county-level cities of China
category_link = "no-longer existing [[county|counties]] and [[county-level city|county-level cities]]",
bare_category_breadcrumb = "counties and county-level cities",
bare_category_parent = "former political divisions",
},
["FORMER county"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER county-level city"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["former countries and country-like entities!"] = {
category_link = "[[country|countries]] and similar [[polity|polities]] that no longer exist",
bare_category_breadcrumb = "countries and country-like entities",
bare_category_parent = "former polities",
},
["FORMER country"] = {
link = false,
class = "polity",
default = {"Former countries and country-like entities"},
},
["former dependent territories!"] = {
category_link = "[[w:dependent territory|dependent territories]] (colonies, dependencies, protectorates, etc.) that no longer exist",
bare_category_breadcrumb = "dependent territories",
bare_category_parent = "former political divisions",
},
["FORMER dependent territory"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former dependent territories"},
},
["former districts!"] = {
-- For categorizing former districts of China
category_link = "no-longer-existing [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "former political divisions",
},
["FORMER district"] = {
-- For categorizing former districts of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER geographic region"] = {
link = false,
fallback = "geographic and cultural area",
},
["FORMER man-made structure"] = {
link = false,
class = "man-made structure",
default = {"Former man-made structures"},
},
["former man-made structures!"] = {
category_link = "man-made structures such as [[airport]]s and [[park]]s that no longer exist",
bare_category_breadcrumb = "man-made structures",
bare_category_parent = "former places",
},
["former municipalities!"] = {
-- For categorizing former municipalities of the Netherlands
category_link = "no-longer-existing [[municipality|municipalities]]",
bare_category_breadcrumb = "municipalities",
bare_category_parent = "former political divisions",
},
["FORMER municipality"] = {
-- For categorizing former municipalities of the Netherlands
link = false,
fallback = "FORMER subpolity",
},
["FORMER natural feature"] = {
link = false,
class = "natural feature",
default = {"Former natural features"},
},
["former natural features!"] = {
category_link = "natural features such as [[lake]]s, [[river]]s and [[island]]s that no longer exist",
bare_category_breadcrumb = "natural features",
bare_category_parent = "former places",
},
["FORMER non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "FORMER settlement",
},
["former places!"] = {
category_link = "[[place]]s of all sorts that no longer exist",
bare_category_breadcrumb = "former",
bare_category_parent = "places",
},
["former political divisions!"] = {
category_link = "[[political]] [[division]]s (states, provinces, counties, etc.) that no longer exist",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former places",
},
["former polities!"] = {
category_link = "[[polity|polities]] (countries, kingdoms, empires, etc.) that no longer exist",
bare_category_breadcrumb = "polities",
bare_category_parent = "former places",
},
["FORMER polity"] = {
link = false,
class = "polity",
default = {"Former polities"},
},
["former prefectures!"] = {
-- For categorizing former prefectures of China
category_link = "no-longer-existing [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "former political divisions",
},
["FORMER prefecture"] = {
-- For categorizing former prefectures of China
link = false,
fallback = "FORMER subpolity",
},
["former provinces!"] = {
-- For categorizing former provinces of China, etc.
category_link = "no-longer-existing [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "former political divisions",
},
["FORMER province"] = {
-- For categorizing ancient/historical/former provinces of the Roman Empire
link = false,
fallback = "FORMER subpolity",
},
["former region"] = {
-- A former region is considered a former political division, but not a 'historical/traditional/etc.' region.
link = "separately",
preposition = "of",
inherently_former = {"FORMER"},
class = "subpolity",
},
["FORMER settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Former settlements"},
},
["former settlements!"] = {
category_link = "[[city|cities]], [[town]]s and [[village]]s that no longer exist or have been merged or reclassified",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former political divisions",
},
["FORMER subpolity"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former political divisions"},
},
----------------------------------------------------------------------------------------------
-- form-of categories --
----------------------------------------------------------------------------------------------
---------- Abbreviations ----------
["abbreviations of counties!"] = {
-- For categorizing abbreviations of counties of e.g. England
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[county|counties]]",
bare_category_breadcrumb = "counties",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of places",
},
["abbreviations of departments!"] = {
-- For categorizing abbreviations of departments of e.g. France
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[department]]s",
bare_category_breadcrumb = "departments",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of districts!"] = {
-- For categorizing abbreviations of districts of e.g. ???
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of divisions!"] = {
-- For categorizing abbreviations of divisions of e.g. Bangladesh
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[division]]s",
bare_category_breadcrumb = "divisions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of former countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of former places",
},
["abbreviations of former places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "abbreviations of places", sort = "former"}},
},
["abbreviations of places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "places",
},
["abbreviations of political divisions!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[political]] [[division]]s",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "abbreviations of places",
},
["abbreviations of prefectures!"] = {
-- For categorizing abbreviations of prefectures of e.g. Japan
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces!"] = {
-- For categorizing abbreviations of provinces of e.g. Canada
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s and [[territory|territories]]",
bare_category_breadcrumb = "provinces and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of regions!"] = {
-- For categorizing abbreviations of regions of e.g. Italy
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[administrative region]]s",
bare_category_breadcrumb = "regions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states!"] = {
-- For categorizing abbreviations of states of e.g. the United States
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[territory|territories]]",
bare_category_breadcrumb = "states and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and union territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[union territory|union territories]]",
bare_category_breadcrumb = "states and union territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[territory|territories]]",
bare_category_breadcrumb = "territories",
bare_category_parent = "abbreviations of political divisions",
},
["ABBREVIATION_OF country"] = {
link = false,
default = {"Abbreviations of countries"},
},
["ABBREVIATION_OF county"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF department"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF district"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF division"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF FORMER country"] = {
link = false,
default = {"Abbreviations of former countries"},
},
["ABBREVIATION_OF FORMER place"] = {
link = false,
default = {"Abbreviations of former places"},
},
["ABBREVIATION_OF place"] = {
link = false,
default = {"Abbreviations of places"},
},
["ABBREVIATION_OF prefecture"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF province"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF region"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF state"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF subpolity"] = {
link = false,
default = {"Abbreviations of political divisions"},
},
["ABBREVIATION_OF territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF union territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
---------- Archaic forms ----------
["archaic forms of places!"] = {
full_category_link = "{{glossary|archaic}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "archaic forms",
bare_category_parent = "places",
},
["ARCHAIC_FORM_OF place"] = {
link = false,
default = {"Archaic forms of places"},
},
---------- Clippings ----------
["clippings of places!"] = {
full_category_link = "{{glossary|clipping}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "clippings",
bare_category_parent = "places",
},
["CLIPPING_OF place"] = {
link = false,
default = {"Clippings of places"},
},
---------- Dated forms ----------
["dated forms of places!"] = {
full_category_link = "{{glossary|dated}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "dated forms",
bare_category_parent = "places",
},
["DATED_FORM_OF place"] = {
link = false,
default = {"Dated forms of places"},
},
---------- Derogatory names ----------
["derogatory names for cities!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[city|cities]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["derogatory names for continents!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for continents"},
},
["derogatory names for countries!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for countries"},
},
["derogatory names for places!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[place]]s",
bare_category_breadcrumb = "derogatory names",
bare_category_parent = "nicknames for places",
},
["derogatory names for states!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for states"},
},
["DEROGATORY_NAME_FOR capital"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR city"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR continent"] = {
link = false,
default = {"Derogatory names for continents"},
},
["DEROGATORY_NAME_FOR country"] = {
link = false,
default = {"Derogatory names for countries"},
},
["DEROGATORY_NAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR place"] = {
link = false,
default = {"Derogatory names for places"},
},
["DEROGATORY_NAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR state"] = {
link = false,
default = {"Derogatory names for states"},
},
["DEROGATORY_NAME_FOR town"] = {
link = false,
default = {"Derogatory names for cities"},
},
---------- Ellipses ----------
["ellipses of places!"] = {
full_category_link = "{{glossary|ellipsis|ellipses}} of [[name]]s of [[place]]s",
bare_category_breadcrumb = "ellipses",
bare_category_parent = "places",
},
["ELLIPSIS_OF place"] = {
link = false,
default = {"Ellipses of places"},
},
---------- Former long-form names ----------
["former long-form names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former long-form names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "long-form"}},
},
["former long-form names of places!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form",
bare_category_parent = "former names of places",
},
["FORMER_LONG_FORM_OF country"] = {
link = false,
default = {"Former long-form names of countries"},
},
["FORMER_LONG_FORM_OF place"] = {
link = false,
default = {"Former long-form names of places"},
},
---------- Former names ----------
["former names of capitals!"] = {
full_category_link = "[[former]] [[name]]s of [[capital city|capital cities]] that generally still exist but under a different name",
bare_category_breadcrumb = "capitals",
bare_category_parent = "former names of settlements",
},
["former names of countries!"] = {
full_category_link = "[[former]] [[name]]s of [[country|countries]] that generally still exist but under a different name",
bare_category_breadcrumb = "countries",
bare_category_parent = "former names of places",
},
["former names of places!"] = {
full_category_link = "[[former]] [[name]]s of [[place]]s that generally still exist but under a different name",
bare_category_breadcrumb = "former names",
bare_category_parent = "places",
},
["former names of political divisions!"] = {
full_category_link = "[[former]] [[name]]s of [[political]] [[division]]s (states, provinces, counties, etc.) that generally still exist but under a different name",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former names of places",
},
["former names of polities!"] = {
full_category_link = "[[former]] [[name]]s of [[polity|polities]] (e.g. [[country|countries]]) that generally still exist but under a different name",
bare_category_breadcrumb = "polities",
bare_category_parent = "former names of places",
},
["former names of settlements!"] = {
full_category_link = "[[former]] [[name]]s of [[city|cities]], [[town]]s, [[village]]s, etc. that generally still exist but under a different name",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former names of political divisions",
},
["FORMER_NAME_OF capital"] = {
link = false,
default = {"Former names of capitals"},
},
["FORMER_NAME_OF country"] = {
link = false,
default = {"Former names of countries"},
},
["FORMER_NAME_OF place"] = {
link = false,
default = {"Former names of places"},
},
["FORMER_NAME_OF polity"] = {
link = false,
default = {"Former names of polities"},
},
["FORMER_NAME_OF region"] = {
link = false,
fallback = "FORMER_NAME_OF subpolity",
},
["FORMER_NAME_OF settlement"] = {
link = false,
default = {"Former names of settlements"},
},
["FORMER_NAME_OF subpolity"] = {
link = false,
default = {"Former names of political divisions"},
},
---------- Former nicknames ----------
["former nicknames for cities!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[city|cities]], e.g. the [[Eternal City]] for [[Kyoto]] during the {{w|Heian period}} ({{circa2|800–1100|short=yes}} {{AD}})",
bare_category_breadcrumb = "cities",
bare_category_parent = "former nicknames for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["former nicknames for places!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "former",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {{name = "former names of places", sort = "nicknames"}},
},
["FORMER_NICKNAME_FOR capital"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR city"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR place"] = {
link = false,
default = {"Former nicknames for places"},
},
["FORMER_NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR town"] = {
link = false,
default = {"Former nicknames for cities"},
},
---------- Former official names ----------
["former official names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former official names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "official"}},
},
["former official names of places!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "former names of places",
},
["FORMER_OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Former official names of countries"},
},
["FORMER_OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Former official names of places"},
},
---------- Long-form names ----------
["long-form names of countries!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "long-form names of places",
},
["long-form names of places!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form names",
bare_category_parent = "places",
},
["LONG_FORM_OF country"] = {
link = false,
default = {"Long-form names of countries"},
},
["LONG_FORM_OF place"] = {
link = false,
default = {"Long-form names of places"},
},
---------- Nicknames ----------
["nicknames for cities!"] = {
full_category_link = "[[nickname]]s for [[city|cities]], e.g. the [[Big Apple]] for [[New York City]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"cities"},
},
["nicknames for continents!"] = {
full_category_link = "[[nickname]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"continents"},
},
["nicknames for countries!"] = {
full_category_link = "[[nickname]]s for [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"countries"},
},
["nicknames for places!"] = {
full_category_link = "[[nickname]]s for [[place]]s",
bare_category_breadcrumb = "places",
bare_category_parent = "nicknames",
addl_bare_category_parents = {"places"},
},
["nicknames for states!"] = {
-- For categorizing nicknames for states of e.g. the United States
full_category_link = "[[nicknames]] for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"states"},
},
["NICKNAME_FOR capital"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR city"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR continent"] = {
link = false,
default = {"Nicknames for continents"},
},
["NICKNAME_FOR country"] = {
link = false,
default = {"Nicknames for countries"},
},
["NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR place"] = {
link = false,
default = {"Nicknames for places"},
},
["NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR state"] = {
link = false,
default = {"Nicknames for states"},
},
["NICKNAME_FOR town"] = {
link = false,
default = {"Nicknames for cities"},
},
---------- Obsolete forms ----------
["obsolete forms of places!"] = {
full_category_link = "{{glossary|obsolete}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "obsolete forms",
bare_category_parent = "places",
},
["OBSOLETE_FORM_OF place"] = {
link = false,
default = {"Obsolete forms of places"},
},
---------- Official names ----------
["official names of countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of places",
},
["official names of former countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of former places",
},
["official names of former places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "official names",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "official names of places", sort = "former"}},
},
["official names of places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official names",
bare_category_parent = "places",
},
["OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Official names of countries"},
},
["OFFICIAL_NAME_OF FORMER country"] = {
link = false,
default = {"Official names of former countries"},
},
["OFFICIAL_NAME_OF FORMER place"] = {
link = false,
default = {"Official names of former places"},
},
["OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Official names of places"},
},
---------- Official nicknames ----------
["official nicknames for places!"] = {
full_category_link = "[[official]] [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for places",
},
["official nicknames for states!"] = {
-- For categorizing official nicknames for states of e.g. the United States
full_category_link = "[[official]] [[nicknames]] for [[state]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for states",
addl_bare_category_parents = {"states"},
},
["OFFICIAL_NICKNAME_FOR place"] = {
link = false,
default = {"Official nicknames for places"},
},
["OFFICIAL_NICKNAME_FOR state"] = {
link = false,
default = {"Official nicknames for states"},
},
}
export.plural_placetype_to_singular = {}
for sg_placetype, spec in pairs(export.placetype_data) do
if spec.plural then
export.plural_placetype_to_singular[spec.plural] = sg_placetype
end
end
------------------------------------------------------------------------------------------
-- ZH: Chinese localization functions --
------------------------------------------------------------------------------------------
--[==[
Get the Chinese display name for a placetype, resolving through the enwikt fallback chain.
`holonym_placetype` (optional string) provides context for placetypes like `capital city`
whose Chinese term depends on the containing administrative level (country → 首都,
province → 省會, state → 首府, etc.).
Returns two values: zh_name (string or array of regional variants), zh_suffix (string,
array, or nil). Returns nil, nil if no Chinese data is available for the placetype or
any of its fallbacks.
]==]
function export.get_zh_placetype_name(placetype, holonym_placetype)
placetype = export.resolve_placetype_aliases(placetype)
local zh_name, zh_suffix, zh_by_holonym = m_zh_data.get_zh_placetype_props(placetype, export)
if zh_name then
local resolved = m_zh_data.resolve_zh_name(zh_name, zh_by_holonym, holonym_placetype)
return resolved, zh_suffix
end
return nil, nil
end
--[==[
Get only the Chinese suffix for a placetype.
Used when rendering holonym `:pref`/`:suf` modifiers in Chinese: the suffix is appended
directly to the holonym name (e.g. `s:suf/New York` → 紐約州; `c:pref/Georgia` → 格魯吉亞國).
Returns a string, an array of regional variants, or nil if no suffix is defined.
]==]
function export.get_zh_placetype_suffix(placetype)
placetype = export.resolve_placetype_aliases(placetype)
local _, zh_suffix = m_zh_data.get_zh_placetype_props(placetype, export)
return zh_suffix
end
--[==[
Chinese placetype "pluralization" — a no-op, since Chinese has no grammatical plural.
Accepts and returns a string or an array (for multi-variant names) unchanged.
Provided so that call sites shared with the English path can call a uniform function.
]==]
function export.pluralize_zh_placetype(zh_name)
return zh_name
end
--[==[
Get the entry preposition for Chinese display: "in" or "of".
Identical to `get_placetype_entry_preposition` in semantics; the Chinese rendering
maps these to different constructions:
"in" → 位於 [holonyms] 的 [placetype]
"of" → [holonyms] 的 [placetype] (no 位於 prefix)
]==]
export.get_zh_entry_preposition = export.get_placetype_entry_preposition
-- Re-export Chinese data tables so that [[Module:place]] only needs to require
-- this module rather than both this module and [[Module:place/zh-data]] separately.
export.zh_strings = m_zh_data.zh_strings
export.zh_qualifiers = m_zh_data.zh_qualifiers
export.zh_extra_info_labels = m_zh_data.zh_extra_info_labels
export.zh_capital_label_by_holonym_type = m_zh_data.zh_capital_label_by_holonym_type
export.format_zh_name = m_zh_data.format_zh_name
return export
aq3x48x8ahow5m9neiwcyxkxw622pqh
9758132
9758129
2026-05-12T23:58:23Z
TongcyDai
53191
9758132
Scribunto
text/plain
local export = {}
export.force_cat = false -- set to true for testing
local m_locations = require("Module:place/locations")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_strutils = require("Module:string utilities")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
-- Chinese localization data (zh_name, zh_suffix, qualifiers, extra-info labels, etc.)
local m_zh_data = require("Module:place/data/sandbox")
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local internal_error = m_locations.internal_error
export.internal_error = internal_error
local process_error = m_locations.process_error
export.process_error = process_error
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local ucfirst = m_strutils.ucfirst
local ulower = m_strutils.lower
local rmatch = m_strutils.match
local split = m_strutils.split
--[==[ intro:
This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code
to work with both placetypes and locations, as well as some placename-related info (FIXME: Consider moving it to
[[Module:place/locations]]). See also [[Module:place/locations]], which has definitions of all known locations. You must
currently load this module using {{cd|require()}}, not using {{cd|mw.loadData()}}.
In particular, it contains two fundamental and tricky functions:
# `get_placetype_equivs`, which finds the equivalent placetypes to look under in order to find a given property, and in
the process correctly handles placetypes with qualifiers (including qualifiers that act similar to "type-raising"
operators in that they do something non-trivial to the placetype to their right) as well as form-of directives and
fallbacks.
# `find_matching_holonym_location`, which looks up a holonym to find a matching known location, but in the process
checks holonyms to the right to make sure there isn't a clash between the user-specified containing holonyms and the
containers of the known location being considered. This is done to prevent overcategorizing when either there are two
known locations with the same name (e.g. Birmingham in England and Birmingham, Alabama in the US), or more generally
two locations with the same name, one of which is a known location but where the other is not (e.g. we're processing
non-known-location Mérida, Spain and don't want it categorized like known location Mérida, Yucatán, Mexico).
Both of these functions are invoked repeatedly, and probably are invoked several times on the same inputs and as a
result are candidates for memoization to speed up the operation of {{tl|place}}.
]==]
------------------------------------------------------------------------------------------
-- Basic utilities --
------------------------------------------------------------------------------------------
--[==[
Return true if `force_cat` is set either in this module or in [[Module:place/locations]].
]==]
function export.get_force_cat()
return export.force_cat or m_locations.force_cat
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
function export.remove_links_and_html(text)
text = m_links.remove_links(text)
return text:gsub("<.->", "")
end
--[==[
Return the singular version of a maybe-plural placetype, or nil if not plural. This correctly handles placetypes with
irregular plurals such as `kibbutzim` plural of `kibbutz` by looking up in a table constructed from the `plural` values
specified in `placetype_data`. If a special plural value is not found, the regular singularization algorithm in
[[Module:en-utilities]] is invoked, which reverses the y -> ies change after vowels and the 'es' addition after sh/ch/x,
and otherwise just subtracts a final 's' (which will incorrectly generate 'passe' for plural 'passes'; FIXME: consider
changing this for words ending in '-sses'). If the generated singular is the same as the passed-in value, nil is
returned.
]==]
function export.maybe_singularize_placetype(placetype)
if not placetype then
return nil
end
if export.plural_placetype_to_singular[placetype] then
return export.plural_placetype_to_singular[placetype]
end
local retval = require(en_utilities_module).singularize(placetype)
if retval == placetype then
return nil
end
return retval
end
-- Return the correct plural of a placetype, and (if `do_ucfirst` is given) make the first letter uppercase. We first
-- look up the plural in `placetype_data`, falling back to pluralize() in [[Module:en-utilities]], which is almost
-- always correct.
function export.pluralize_placetype(placetype, do_ucfirst)
local ptdata = export.placetype_data[placetype]
if ptdata and ptdata.plural then
placetype = ptdata.plural
else
placetype = require(en_utilities_module).pluralize(placetype)
end
if do_ucfirst then
return ucfirst(placetype)
else
return placetype
end
end
--[==[
Get the data associated with a placetype, which may be in its singular or plural form. If `from_category` is specified,
we also look for category-only placetypes (generally plural) followed by `!`. Return three values: (a) the placetype
under which the data can be looked up (i.e. in its singular form if the passed-in `placetype` is plural and did not
match a category-only placetype followed by `!`); (b) the placetype data structure; (c) the type of `placetype` match
that occurred, one of `"direct"` if the canonical placetype is the same as the passed-in `placetype` and also the same
as the key under which `ptdata` was looked up, or `"direct-category"` if the `ptdata` was looked up under a key formed
from the passed-in `placetype` by adding `!`, or `"plural"` if the `ptdata` was looked up under the singularized version
of the plural passed-in `placetype`.
]==]
function export.get_placetype_data(placetype, from_category)
local ptdata = export.placetype_data[placetype]
if ptdata then
return placetype, ptdata, "direct"
end
if from_category then
ptdata = export.placetype_data[placetype .. "!"]
if ptdata then
return placetype .. "!", ptdata, "direct-category"
end
end
local sg_placetype = export.maybe_singularize_placetype(placetype)
if sg_placetype then
ptdata = export.placetype_data[sg_placetype]
if ptdata then
return sg_placetype, ptdata, "plural"
end
end
return nil
end
--[==[
Check for special pseudo-placetypes that should be ignored for categorization purposes.
]==]
function export.placetype_is_ignorable(placetype)
return placetype == "and" or placetype == "or" or placetype:find("^%(")
end
function export.resolve_placetype_aliases(placetype)
return export.placetype_aliases[placetype] or placetype
end
--[==[
Return a property from `placetype_data` for a given placetype. If the placetype isn't found in `placetype_data`, or the
key isn't found in the placetype's entry in `placetype_data`, return nil.
]==]
function export.get_placetype_prop(placetype, key)
-- Usually we are called on equivalent placetypes returned from `get_placetype_equivs`, in which case placetype
-- aliases have been resolved, but sometimes not, e.g. when fetching the indefinite article in
-- get_placetype_article(). `resolve_placetype_aliases` is just a simple lookup and it doesn't hurt to do it twice.
placetype = export.resolve_placetype_aliases(placetype)
if export.placetype_data[placetype] then
return export.placetype_data[placetype][key]
else
return nil
end
end
--[==[
Given a placetype, split the placetype into one or more potential ''splits'', each consisting of a three-element list
{ {``prev_qualifiers``, ``this_qualifier``, ``reduced_placetype``}}, i.e.
# the concatenation of zero or more previously-recognized qualifiers on the left, normally canonicalized (if there are
zero such qualifiers, the value will be nil);
# a single recognized qualifier, normally canonicalized (if there is no qualifier, the value will be nil);
# the "reduced placetype" on the right.
Splitting between the qualifier in (2) and the reduced placetype in (3) happens at each space character, proceeding from
left to right, and stops if a qualifier isn't recognized. All placetypes are canonicalized by checking for aliases
in `placetype_aliases`, but no other checks are made as to whether the reduced placetype is recognized. Canonicalization
of qualifiers does not happen if `no_canon_qualifiers` is specified.
For example, given the placetype `"small beachside unincorporated community"`, the return value will be
{ {
{nil, nil, "small beachside unincorporated community"},
{nil, "small", "beachside unincorporated community"},
{"small", "[[beachfront]]", "unincorporated community"},
{"small [[beachfront]]", "[[unincorporated]]", "community"},
}}
Here, `"beachside"` is canonicalized to `"[[beachfront]]"` and `"unincorporated"` is canonicalized to
`"[[unincorporated]]"`, in both cases according to the entry in `placetype_qualifiers`.
On the other hand, if given `"small former haunted community"`, the return value will be
{ {
{nil, nil, "small former haunted community"},
{nil, "small", "former haunted community"},
{"small", "former", "haunted community"},
}}
because `"small"` and `"former"` but not `"haunted"` are recognized as qualifiers.
Finally, if given `"former adr"`, the return value will be
{ {
{nil, nil, "former adr"},
{nil, "former", "administrative region"},
}}
because `"adr"` is a recognized placetype alias for `"administrative region"`.
]==]
function export.split_qualifiers_from_placetype(placetype, no_canon_qualifiers)
local splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
local prev_qualifier = nil
while true do
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if canon == nil then
break
end
local new_qualifier = qualifier
if type(canon) == "table" then
canon = canon.link
end
if not no_canon_qualifiers and canon ~= false then
if canon == true then
new_qualifier = "[[" .. qualifier .. "]]"
else
new_qualifier = canon
end
end
insert(splits, {prev_qualifier, new_qualifier, export.resolve_placetype_aliases(reduced_placetype)})
prev_qualifier = prev_qualifier and prev_qualifier .. " " .. new_qualifier or new_qualifier
placetype = reduced_placetype
else
break
end
end
return splits
end
--[==[
Given a `placetype` (which may be pluralized), return an ordered list of equivalent placetypes to look under to find the
placetype's properties (such as the category or categories to be inserted). The return value is actually an ordered list
of objects of the form `{qualifier=``qualifier``, placetype=``equiv_placetype``}` where ``equiv_placetype`` is a
placetype whose properties to look up, derived from the passed-in placetype or from a contiguous subsequence of the
words in the passed-in placetype (always including the rightmost word in the placetype, i.e. we successively chop off
qualifier words from the left and use the remainder to find equivalent placetypes). ``qualifier`` is the remaining words
not part of the subsequence used to find ``equiv_placetype``; or nil if all words in the passed-in placetype were used
to find ``equiv_placetype``. (FIXME: This qualifier is not currently used anywhere.) Only placetypes for which there is
an entry in `placetype_data` are included. The placetype passed in is always checked first, and will form the first
entry if it exists in `placetype_data`.
'''NOTE:''' This is a tricky function as it implements handling of (a) qualifiers, (b) fallback logic, (c)
"type-raising" qualifiers such as `former`/`ancient`/etc. as well as `fictional` and `mythological`, and (d) form-of
directives, which act somewhat similarly to `former`, and allows interaction between more than one of these
simultaneously (e.g. official names of former places, which have their own categorization).
If {{tl|place}} gets too slow, one potential speedup is to memoize the results of this function, as it appears to be
getting called more than once on the same inputs. Another similar potential speedup is to memoize the results of
`iterate_matching_holonym_location()`.
For example, given the placetype `left tributary`, the following placetype/qualifier combinations are checked in turn:
```
{qualifier = nil, placetype="left tributary"}
{qualifier = "left", placetype="tributary"}
{qualifier = "left", placetype="river"}
```
and the return value will be
{ {
{qualifier = "left", placetype="tributary"},
{qualifier = "left", placetype="river"},
}}
The algorithm first enters the placetype itself into the list, then checks for `left tributary` as a recognized
placetype in `placetype_data` and doesn't find it, so it doesn't enter it into the returned list (if it found it, it
would add it as well as any fallbacks directly after it). It then splits off the recognized qualifier `left` to form the
''reduced placetype'' `tributary`, which is entered into the list because it is found in `placetype_data`. Then, because
it has a fallback `river`, which exists in `placetype_data`, the fallback is entered next.
Another example is `small rural fraziones` (where a ''frazione'' is type of subdivision of a ''comune'' or municipality,
often specifically an outlying hamlet). the placetype/qualifier combinations checked are:
```
{qualifier = nil, placetype="small rural fraziones"}
{qualifier = nil, placetype="small rural frazione"}
{qualifier = "small", placetype="rural fraziones"}
{qualifier = "small", placetype="rural frazione"}
{qualifier = "small [[rural]]", placetype="fraziones"}
{qualifier = "small [[rural]]", placetype="frazione"}
{qualifier = "small [[rural]]", placetype="hamlet"}
{qualifier = "small [[rural]]", placetype="village"}
```
The return value ends up as
{qualifier = "small [[rural]]", placetype="frazione"},
{qualifier = "small [[rural]]", placetype="hamlet"},
{qualifier = "small [[rural]]", placetype="village"},
}}
Here, because the result of singularizing `fraziones` returns a different value from the placetype itself, that
singularized value is checked after the original plural value. Also, in the process of splitting off qualifiers,
they are canonicalized if the entry in `placetype_qualifiers` says to do so; in this case, links are placed around
`rural`. Finally, `frazione` has `hamlet` as its fallback, which in turn has `village` as its fallback, so both
fallbacks end up being returned.
`no_fallback`, if set, disables returning equivalent placetypes based on the `fallback` setting for a placetype. This is
used in the first of two loops in find_placetype_cat_specs() in [[Module:place]] to prefer exact matches for placetypes
such as barangays with later holonyms to matches based on a fallback such as `neighborhood` with an earlier holonym.
See the comment in that function in [[Module:place]] for a more detailed explanation of why this is needed. Only the
placetype itself, and any reduced placetypes created by chopping off recognized qualifiers at the beginning, are
returned; but we do not return reduced placetypes if a containing placetype exists in `placetype_data`. (For example,
`"overseas territory"` has a fallback `"dependent territory"`, and `"overseas"` is also a recognized qualifier. When
`no_fallback` is in place, without the above proviso, we would return `"overseas territory"` followed by `"territory"`
with the incorrect effect of classifying an `"overseas territory"` of the United Kingdom such as `"Gibraltar"` under
[[:Category:Territories of the United Kingdom]] instead of [[:Category:Dependent territories of the United Kingdom]].)
As an exception, if `historical`, `ancient`, `former` or the like are found, they proceed ignoring `no_fallback`,
because it seems tricky to handle them correctly in the presence of `no_fallback`, and historical/former placetypes
rarely occur with exact match category specs anyway.
`no_split_qualifiers` prevents splitting off recognized qualifiers and returning the remainder of the placetype as an
equivalent placetype. Only the passed-in placetype, and any fallbacks, will be returned. This is used in
[[Module:category tree/topic cat/data/Places]] when looking up placetypes found in categories. Such placetypes won't
have qualifiers and so it doesn't make sense to try and look for them.
`from_category`, if set, causes category-only placetypes (those ending in `!`) to also be checked.
`form_of_directive`, if set, causes the specified form-of directive (e.g. `FORMER_NAME_OF`) to be prepended to checked
placetypes, their directive-specific type (e.g. `FORMER_NAME_OF_type`), and their classes (`class`) to get the
appropriate placetypes to check for form-of-directive categories. It falls back to the prepended generic `place` as a
placetype, e.g. `FORMER_NAME_OF place`, if nothing else matches.
`no_check_for_inherently_former` is used internally to prevent an infinite loop when checking for `inherently_former`.
`register_former_as_non_former` is a major hack used in `get_bare_categories` to deal with the mismatch between e.g.
known location `Yugoslavia` declaring itself a `country` but definitions of it declaring it a `former country`. It
causes the non-former version of the specified placetype to be included in the returned equivalents along with the
former placetypes. [FIXME: This should apply only to the entries in `former_countries` but it's tricky to do that now;
fix this in the known-location refactor. -- The known-location refactor is already done but we haven't yet fixed this.]
]==]
function export.get_placetype_equivs(placetype, props)
local no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former
local form_of_directive
if props then
no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former =
props.no_fallback, props.no_split_qualifiers, props.no_check_for_inherently_former, props.from_category,
props.register_former_as_non_former
form_of_directive = props.form_of_directive
end
local equivs = {}
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. `qualifier` is
-- the preceding qualifier to insert into `equivs` along with the placetype (see comment at top of function). If
-- `from_category` is given, we also check for a category-specific entry consisting of the placetype followed by
-- `!`, and in all cases we also check to see if `placetype` is plural, and if so, insert the singularized version
-- along with its fallbacks (if any) in `placetype_data`. `form_of_prefix` is a form-of prefix such as
-- `OFFICIAL_NAME_OF`. If specified, we check the fallbacks of `placetype` without the prefix but then insert into
-- `equivs` the prefixed placetype. This way, if the user says e.g. {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}},
-- we will correctly categorize into [[:Category:Official names of countries]], rather than only trying to look up
-- `OFFICIAL_NAME_OF island country` and failing, falling back ultimately to [[:Category:Official names of places]].
local function insert_placetype_and_fallbacks(qualifier, placetype, form_of_prefix)
local function insert_equiv(pt)
if form_of_prefix then
-- Let's say the user says {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}} and we have
-- no entry for `OFFICIAL_NAME_OF island country` but we do for `OFFICIAL_NAME_OF country` (which we end
-- up processing because `island country` falls back to `country`), and that entry in turn is defined
-- using a fallback. We have to insert that fallback-of-fallback, and the easiest/cleanest way of
-- handling this is by calling ourselves recursively.
insert_placetype_and_fallbacks(qualifier, form_of_prefix .. " " .. pt)
else
insert(equivs, {qualifier=qualifier, placetype=pt})
end
end
-- Insert the placetype, along with any fallbacks.
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if ptdata then
insert_equiv(canon_placetype)
if no_fallback then
return
end
local first_placetype = #equivs + 1
local prev_placetype = nil
while true do
local pt_value = export.placetype_data[canon_placetype]
if not pt_value then
internal_error("Fallback value %s specified for placetype %s but is not in `placetype_data`",
canon_placetype, prev_placetype)
end
if pt_value.fallback then
insert_equiv(pt_value.fallback)
local last_placetype = #equivs
if last_placetype - first_placetype >= 10 then
local fallback_loop = {}
for i = first_placetype, last_placetype do
insert(fallback_loop, equivs[i].placetype)
end
internal_error("Apparent loop in fallback chain: %s", table.concat(fallback_loop, " -> "))
end
prev_placetype = canon_placetype
canon_placetype = pt_value.fallback
else
break
end
end
end
end
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. This is a
-- wrapper around the more basic `insert_placetype_and_fallbacks()` which handles form-of directives. If there is no
-- form-of directive, this function directly calls `insert_placetype_and_fallbacks()`. We do things this way so that
-- form-of directives correctly combine with `former`-type qualifiers. Note that we also have special backups for
-- form-of directives that check `DIRECTIVE place` (and before that, `DIRECTIVE FORMER/ANCIENT place` is there's a
-- `former`-type directive); these backups live outside this function because we want them done once, late, rather
-- than in each invocation of `process_and_insert_placetype()`.
local function process_and_insert_placetype(qualifier, reduced_placetype)
if form_of_directive then
-- First check for e.g. `OFFICIAL_NAME_OF island country` and its fallbacks; then we look for fallbacks of
-- `island country` and check e.g. `OFFICIAL_NAME_OF country` and its fallbacks. All of this is handled by
-- `insert_placetype_and_fallbacks()` with appropriate parameters. After that, check the general class of
-- the directive, e.g. `subpolity` if something like `district` is given. (Eventually, we check for
-- `OFFICIAL_NAME_OF place` as a backup, but this happens at the end outside the loop over qualifiers.)
insert_placetype_and_fallbacks(qualifier, reduced_placetype, form_of_directive)
if not no_fallback then
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype)
local directive_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, form_of_directive .. "_type") or
export.get_placetype_prop(pt, "class") end
)
if not directive_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s in conjunction with form-of directive %s, placetype data " ..
'located but directive-specific type property %s missing, and so is "class"; ' ..
"placetypes searched are %s", reduced_placetype, form_of_directive,
form_of_directive .. "_type", reduced_placetype_equivs)
else
-- This should be allowed, as we allow unrecognized placetypes in general.
end
elseif directive_type ~= "!" then
insert_placetype_and_fallbacks(qualifier, directive_type, form_of_directive)
end
end
else
insert_placetype_and_fallbacks(qualifier, reduced_placetype)
end
end
-- Successively split off recognized qualifiers and loop over successively greater sets of qualifiers from the left
-- (unless `no_split_qualifiers` is specified, in which case we don't check for qualifiers).
local splits
if no_split_qualifiers then
splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
else
splits = export.split_qualifiers_from_placetype(placetype)
end
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, reduced_placetype = unpack(split, 1, 3)
-- If a special "former" qualifier like `former` or `historical` isn't present, and
-- `no_check_for_inherently_former` is not given (this flag is used to avoid infinite loops), check for
-- "inherently former" placetypes like `satrapy` and `treaty port` that always refer to no-longer-existing
-- placetypes, and handle accordingly.
local unlinked_this_qualifier
if this_qualifier and this_qualifier:find("%[") then
unlinked_this_qualifier = export.remove_links_and_html(this_qualifier)
else
unlinked_this_qualifier = this_qualifier
end
local former_qualifiers = this_qualifier and export.former_qualifiers[unlinked_this_qualifier] or nil
if not former_qualifiers and not no_check_for_inherently_former then
former_qualifiers = export.get_equiv_placetype_prop(reduced_placetype,
function(pt) return export.get_placetype_prop(pt, "inherently_former") end,
{no_check_for_inherently_former = true})
end
-- If a special "former" qualifier like `former` or `historical` is present, map it to the appropriate internal
-- qualifiers (`ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
-- qualifiers), fetch the `former_type` property, and treat the placetype as if a concatenation of the mapped
-- qualifier(s) and the value of `former_type`. For example, if `medieval village` is given, we map `medieval`
-- to `ANCIENT` and `FORMER`, and `village` to its `former_type` of `settlement`, and enter the placetypes
-- `ANCIENT settlement` and `FORMER settlement` (in that order) into `equivs`. If the placetype following the
-- "former" qualifier is recognized in `placetype_data` but has no `former_type` and no fallback with a
-- `former_type` specified, it is an internal error; but if the placetype isn't recognized (e.g. something like
-- `former greenhouse` is specified and we don't have an entry for `greenhouse`), just track the occurrence and
-- don't enter anything into `equivs`.
if former_qualifiers then
-- FIXME: Should we respect `no_fallback` here? My instinct says no.
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype, {
no_check_for_inherently_former = true
})
local former_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, "former_type") or
export.get_placetype_prop(pt, "class") end
)
if not former_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s, placetype data located but `former_type` missing; " ..
"placetypes searched are %s", reduced_placetype, reduced_placetype_equivs)
else
-- Enable error when we've verified there aren't any examples.
track("bad-former-placetype")
track("bad-former-placetype/" .. reduced_placetype)
--process_error("For placetype '%s', unrecognized placetype following 'former'-type " ..
-- "qualifier; searched placetype(s) %s", reduced_placetype, dump(reduced_placetype_equivs))
end
elseif former_type ~= "!" then
-- First check directly for `ANCIENT/FORMER` + the original following placetype. This makes it possible
-- for (e.g.) former provinces of the Roman empire to be categorized specially.
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. reduced_placetype)
end
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. former_type)
end
-- HACK! See explanation above for `register_former_as_non_former`.
if register_former_as_non_former then
process_and_insert_placetype(prev_qualifier, reduced_placetype)
end
-- If we're processing a form-of directive, after doing everything else we do
-- `DIRECTIVE ANCIENT/FORMER place` e.g. `OFFICIAL_NAME_OF FORMER place` as a backup.
if form_of_directive and not no_fallback then
for _, former_qualifier in ipairs(former_qualifiers) do
insert_placetype_and_fallbacks(prev_qualifier, form_of_directive .. " " .. former_qualifier ..
" place")
end
end
-- Don't continue processing equivs. The reason is probably the same as the `break` below for
-- qualifier_to_placetype_equivs[]; categories for `former BLAH` are set using `default`, and
-- non-former equivs will otherwise take precedence.
break
end
end
-- Then see if the rightmost split-off qualifier is in qualifier_to_placetype_equivs
-- (e.g. 'fictional *' -> 'fictional location'). If so, add the mapping.
if this_qualifier and export.qualifier_to_placetype_equivs[unlinked_this_qualifier] then
insert(equivs, {
qualifier=prev_qualifier,
placetype=export.qualifier_to_placetype_equivs[unlinked_this_qualifier]
})
-- Don't continue processing equivs; otherwise, if we specify 'mythological city', even though the
-- equivalent entry for 'mythological location' gets inserted ahead of the entry for 'city', the
-- latter ends up generating the category because the category for 'mythological location' is set as
-- the default value, which is used only when no non-default category can be found.
break
end
-- Finally, join the rightmost split-off qualifier to the previously split-off qualifiers to form a combined
-- qualifier, and add it along with reduced_placetype and any mapping in placetype_data for reduced_placetype.
-- NOTE: The first time through this loop, both `prev_qualifier` and `this_qualifier` are nil, and this inserts
-- the full placetype into `equivs`.
local qualifier = prev_qualifier and prev_qualifier .. " " .. this_qualifier or this_qualifier
process_and_insert_placetype(qualifier, reduced_placetype)
-- If `no_fallback` and there's an entry in `placetype_data` for this placetype, don't include any reduced
-- placetypes to avoid the "overseas territory treated as a territory" issue describe above.
if no_fallback then
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(reduced_placetype, from_category)
if canon_placetype then
break
end
end
end
-- If we're processing a form-of directive, after doing everything else we do `DIRECTIVE place` e.g.
-- `OFFICIAL_NAME_OF place` as a backup; but only if either the placetype as a whole is recognized or the placetype
-- begins with a recognized qualifier. This latter check is to avoid categorizing into e.g.
-- [[Category:en:Former names of places]] in an invocation like
-- {{place|en|@former name of:Democratic Republic of the Congo|country|r/Central Africa|;|used from 1971–1997}};
-- the `used from 1971–1997` gets treated as a placetype and we're called on it.
if form_of_directive and not no_fallback and (splits[2] or export.get_placetype_data(placetype, from_category)) then
insert_placetype_and_fallbacks(nil, form_of_directive .. " place")
end
return equivs
end
function export.get_equiv_placetype_prop_from_equivs(equivs, fun, continue_on_nil_only)
for _, equiv in ipairs(equivs) do
local retval = fun(equiv.placetype)
if continue_on_nil_only and retval ~= nil or not continue_on_nil_only and retval then
return retval, equiv
end
end
return nil, nil
end
--[==[
Given a placetype `placetype` and a function `fun` of one argument, iteratively call the function on equivalent
placetypes fetched from `get_placetype_equivs` until the function returns a non-falsy value (i.e. not {nil} or {false});
but if `continue_on_nil_only` is specified, the iterations continue until the function returns non non-{nil} value.
FIXME: We should make `continue_on_nil_only` the default; but this requires changing some callers.) When `fun` returns a
non-falsy or non-{nil} value, `get_equiv_placetype_prop` returns two values: the value returned by `fun` and the
equivalent placetype that triggered the non-falsy (or non-{nil}) return value. If `fun` never returns a non-falsy (or
non-{nil}) value, `get_equiv_placetype_prop` returns {nil} for both return values. If `placetype` is passed in as {nil},
the return value is the result of calling `fun` on {nil} (whatever it is) with {nil} for the second return value.
]==]
function export.get_equiv_placetype_prop(placetype, fun, props)
if not placetype then
return fun(nil), nil
end
return export.get_equiv_placetype_prop_from_equivs(export.get_placetype_equivs(placetype, props), fun,
props and props.continue_on_nil_only)
end
--[==[
Return the article that is used with an entry placetype. We proceed as follows:
# See if there is a recognized qualifier at the beginning that specifies an article (including `false` for no article).
This takes precedence over anything else, so that e.g. `various capitals` gets no article rather than "`the"`.
# Then check the placetype or any equivalent placetype for the `entry_placetype_use_the` property, indicating that
`"the"` should be used.
# Otherwise we look to see if the placetype itself (not any equivalents, even those involving deleting a qualifier from
the beginning) has an entry in `placetype_data` that specifies the indefinite article using `entry_placetype_use_the`
(principally for use with placetypes like `union territory`).
# Otherwise, we use [[Module:en-utilities]] to apply the standard algorithm to generate `"an"` for words beginning with
a vowel and `"a"` otherwise.
If `ucfirst` is true, the first letter of the article is made upper-case.
]==]
function export.get_placetype_article(placetype, ucfirst)
local art
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if type(canon) == "table" then
art = canon.article
end
end
if art == false then
return art
end
if art == nil then
local placetype_use_the = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "entry_placetype_use_the") end)
if placetype_use_the then
art = "the"
else
art = export.get_placetype_prop(placetype, "entry_placetype_indefinite_article")
if not art then
art = require(en_utilities_module).get_indefinite_article(placetype)
end
end
end
if ucfirst then
art = m_strutils.ucfirst(art)
end
return art
end
--[==[
Return the preposition that should be used after `placetype` when occurring as an entry placetype or in categories
(e.g. `city >in< France` but `country >of< South America`). The preposition defaults to `"in"` if not specified.
]==]
function export.get_placetype_entry_preposition(placetype)
local pt_prep = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "preposition") end
)
return pt_prep or "in"
end
--[==[
Given a place desc (see top of file) and a holonym object (see top of file), add a key/value into the place desc's
`holonyms_by_placetype` field corresponding to the placetype and placename of the holonym. For example, corresponding
to the holonym "c/Italy", a key "country" with the list value {"Italy"} will be added to the place desc's
`holonyms_by_placetype` field. If there is already a key with that place type, the new placename will be added to the
end of the value's list.
]==]
function export.key_holonym_into_place_desc(place_desc, holonym)
if not holonym.placetype then
return
end
-- Key in equivalent placetypes, so that e.g. `cities/San Francisco` gets keyed under `city`; but don't do
-- fallbacks, as it doesn't seem correct for the "do other holonyms of the same placetype" algorithm to do holonyms
-- of different types just because they have the same fallback.
local equiv_placetypes = export.get_placetype_equivs(holonym.placetype, {no_fallback = true})
local unlinked_placename = holonym.unlinked_placename
for _, equiv in ipairs(equiv_placetypes) do
local placetype = equiv.placetype
if not place_desc.holonyms_by_placetype then
place_desc.holonyms_by_placetype = {}
end
if not place_desc.holonyms_by_placetype[placetype] then
place_desc.holonyms_by_placetype[placetype] = {unlinked_placename}
else
insert(place_desc.holonyms_by_placetype[placetype], unlinked_placename)
end
end
end
--[=[
Construct a formatted link from the raw link spec `link` given the canonical singular placetype `sg_placetype`. If the
placetype was originally plural, `orig_placetype` should contain this plural value; otherwise it should be nil. This
will construct the appropriate type of link that displays as `orig_placetype` (or otherwise `sg_placetype`) but links to
whatever the `link` spec specifies (which may be `sg_placetype`, a Wikipedia article, etc.). `ptdata` is the placetype
data structure for the placetype, and `from_category` indicates that we are generating the description of a category
(otherwise we are generating the display form of an entry placetype).
]=]
local function make_placetype_link(link, sg_placetype, orig_placetype, ptdata, from_category, noerror)
if not from_category and ptdata.disallow_in_entries then
if noerror then
return "[not meant to be specified directly, with warning: " .. ptdata.disallow_in_entries .. "]"
else
process_error("Placetype %s is not meant to be specified directly: " .. ptdata.disallow_in_entries, sg_placetype)
end
end
if link == nil then
internal_error("Placetype data present for placetype %s but no link= setting given", sg_placetype)
elseif link == true then
if orig_placetype then
return ("[[%s|%s]]"):format(sg_placetype, orig_placetype)
else
return ("[[%s]]"):format(sg_placetype)
end
elseif link == false then
process_error("Placetype %s is not meant to be specified directly, but is only for internal use", sg_placetype)
elseif link == "w" then
return ("[[w:%s|%s]]"):format(sg_placetype, orig_placetype or sg_placetype)
elseif link == "separately" then
if orig_placetype then
local sg_words = split(sg_placetype, " ")
local orig_words = split(orig_placetype, " ")
if #sg_words ~= #orig_words then
internal_error("Can't construct 'separately' link for plural placetype %s as original placetype %s " ..
"has different number of words", orig_placetype, sg_placetype)
else
for i = 1, #sg_words do
if sg_words[i] == orig_words[i] then
sg_words[i] = ("[[%s]]"):format(sg_words[i])
else
sg_words[i] = ("[[%s|%s]]"):format(sg_words[i], orig_words[i])
end
end
return concat(sg_words, " ")
end
else
return (sg_placetype:gsub("([^ ]+)", "[[%1]]"))
end
elseif link:find("^%+") then
link = link:sub(2) -- discard initial +
return ("[[%s|%s]]"):format(link, orig_placetype or sg_placetype)
elseif not orig_placetype then
return link
else
return require(en_utilities_module).pluralize(link)
end
end
--[==[
Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the
plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying
as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description
of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like
[[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or
`"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description
for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with
special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the
"full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is
prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be
disallowed.
]==]
function export.get_placetype_display_form(placetype, category_type, return_full, noerror)
local from_category = not not category_type
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if canon_placetype then
local raw_link
local function is_linked_string(str)
return type(str) == "string" and str:find("%[%[")
end
if category_type then
local fetched_full
local function fetch_maybe_full(prop)
local retval = ptdata["full_" .. prop]
if retval ~= nil then
if return_full then
return retval, true
else
internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval)
end
end
return ptdata[prop], false
end
local function maybe_prefix(str)
if return_full and not fetched_full then
return "names of " .. str
else
return str
end
end
-- Careful with `false` as possible value.
if category_type == "top-level" then
raw_link, fetched_full = fetch_maybe_full("category_link_top_level")
elseif category_type == "noncity" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity")
elseif category_type == "city" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_city")
else
internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"',
category_type)
end
if type(raw_link) == "string" then
return maybe_prefix(raw_link), ptdata
elseif raw_link ~= nil then
return raw_link, ptdata
end
raw_link, fetched_full = fetch_maybe_full("category_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
if ptmatch == "plural" then
raw_link, fetched_full = fetch_maybe_full("plural_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
end
if raw_link == nil then
raw_link, fetched_full = fetch_maybe_full("link")
end
if raw_link == false then
return raw_link, ptdata
end
return maybe_prefix(make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata
else
if ptmatch == "plural" then
raw_link = ptdata.plural_link
if raw_link == false then
process_error("Placetype %s cannot appear plural", placetype)
end
if is_linked_string(raw_link) then
return raw_link, ptdata
end
end
if raw_link == nil then
raw_link = ptdata.link
end
return make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata
end
end
return nil
end
local function resolve_unlinked_placename_display_aliases(placetype, placename)
local equiv_placetypes = export.get_placetype_equivs(placetype)
for i, equiv in ipairs(equiv_placetypes) do
equiv_placetypes[i] = equiv.placetype
end
local all_display_aliases_found = {}
local all_others_found = {}
for group, key, spec in m_locations.iterate_matching_location {
placetypes = equiv_placetypes,
placename = placename,
alias_resolution = "display",
} do
if spec.alias_of and spec.display then
insert(all_display_aliases_found, {group, key, spec, spec.display_as_full})
else
insert(all_others_found, {group, key, spec})
end
end
if not all_display_aliases_found[1] then
return placename
elseif all_display_aliases_found[2] then
internal_error("Found multiple matching display aliases for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
elseif all_others_found[1] then
internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
else
local group, key, spec, as_full = unpack(all_display_aliases_found[1])
local full, elliptical = m_locations.key_to_placename(group, key)
return as_full and full or elliptical
end
end
--[==[
If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged.
Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`,
`country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as
`United States`.
'''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they
should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed.
For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to
`Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political
connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!)
to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two
terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to
`North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly
display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve
alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and
consistency.
]==]
function export.resolve_placename_display_aliases(placetype, placename)
-- If the placename is a link, apply the alias inside the link.
-- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will
-- be empty.
local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$")
if link then
if linktext ~= "" then
local alias = resolve_unlinked_placename_display_aliases(placetype, linktext)
return "[[" .. link .. "|" .. alias .. "]]"
else
local alias = resolve_unlinked_placename_display_aliases(placetype, link)
return "[[" .. alias .. "]]"
end
else
return resolve_unlinked_placename_display_aliases(placetype, placename)
end
end
--[==[
Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key.
]==]
function export.get_prefixed_key(key, spec)
if spec.the then
return "the " .. key
else
return key
end
end
-- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary.
export.iterate_matching_location = m_locations.iterate_matching_location
--[=[
Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the
specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If
`first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is
specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified
by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the
holonym index and holonym structure, similar to `ipairs()`.
]=]
function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms)
local stop_at_also = not not first_holonym_index
return function(place_desc, index)
while true do
index = index + 1
local this_holonym = place_desc.holonyms[index]
-- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also`
-- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym
-- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with
-- `:also`.
if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then
return nil
end
-- If not placetype, we're processing raw text, which we normally want to skip.
if include_raw_text_holonyms or this_holonym.placetype then
return index, this_holonym
end
end
end, place_desc, first_holonym_index and first_holonym_index - 1 or 0
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all
such known locations, returning for each location the corresponding key, spec and group as well as the trail of
ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between
the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data`
are:
* `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with
`iterate_matching_location()`.
* `holonym_placename`: The placename of the holonym.
* `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the
holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms
following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none
exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.)
* `place_desc`: Description of the place; used for the holonyms, to check for container mismatches.
Returns four values: the location group, the canonical key by which the location is known, the spec object describing
the location and the trail of ancestral containers for the location. The first three values are the same as for
`iterate_matching_location`.
]==]
function export.iterate_matching_holonym_location(data)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
local matching_location_iterator = m_locations.iterate_matching_location {
placetypes = holonym_placetype,
placename = holonym_placename,
}
return function()
while true do
local group, key, spec = matching_location_iterator()
if not group then
return nil
end
local container_trail = {}
-- For each level of container, check that there are no mismatches (i.e. other location of the same
-- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container
-- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city
-- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of
-- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark,
-- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New
-- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough,
-- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If
-- there are no mismatches at any level we assume we're dealing with the right known location.
--
-- If at a given level there are multiple containing locations, we count a match if any holonym matches any
-- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any
-- containing location.
local containers_mismatch = false
for containers in m_locations.iterate_containers(group, key, spec) do
insert(container_trail, containers)
local match_at_level = false
local mismatch_at_level = false
for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc,
holonym_index and holonym_index + 1 or nil) do
local other_source_holonym = other_holonym.augmented_from_holonym
if other_source_holonym and other_source_holonym.placetype == holonym_placetype and
other_source_holonym.unlinked_placename ~= holonym_placename then
-- Ignore holonyms added during the augmentation process for other holonyms of the same
-- placetype as the placetype of the holonym we're considering. See comment in
-- augment_holonyms_with_container() for why we do this.
-- continue; grrr, no 'continue' in Lua
else
local holonym_matches_at_level = false
local holonym_exists_with_same_placetype = false
for _, container in ipairs(containers) do
if not container.spec.no_check_holonym_mismatch then
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
local placetypes = container.spec.placetype
if type(placetypes) ~= "table" then
placetypes = {placetypes}
end
local placetype_equivs = {}
for _, pt in ipairs(placetypes) do
m_table.extend(placetype_equivs, export.get_placetype_equivs(pt))
end
local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype and
(other_holonym.unlinked_placename == full_container_placename or
other_holonym.unlinked_placename == elliptical_container_placename)
end
)
if this_holonym_matches then
holonym_matches_at_level = true
break
end
local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype
end
)
if this_holonym_exists_with_same_placetype then
-- We seem to have a mismatch at this level. But before we decide conclusively that this
-- is the case, check to see whether the putative mismatch is an alias and matches when
-- we resolve the alias.
for oh_group, oh_key, oh_spec, oh_container_trail in
export.iterate_matching_holonym_location {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = place_desc,
} do
local oh_full_placename, oh_elliptical_placename =
m_locations.key_to_placename(oh_group, oh_key)
if oh_full_placename == full_container_placename or
oh_elliptical_placename == elliptical_container_placename then
-- Alias matched when resolved.
this_holonym_matches = true
break
end
end
if this_holonym_matches then
-- Alias matched above when resolved.
holonym_matches_at_level = true
break
else
-- Not an alias, or doesn't match when resolved. We have a true mismatch.
holonym_exists_with_same_placetype = true
end
end
end
end
if holonym_matches_at_level then
match_at_level = true
break
end
if holonym_exists_with_same_placetype then
mismatch_at_level = true
end
end
end
if not match_at_level and mismatch_at_level then
containers_mismatch = true
break
end
end
if not containers_mismatch then
return group, key, spec, container_trail
end
end
end
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the
corresponding key, spec and group as well as the trail of ancestral containers. This is like
`iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this
would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To
fix this, specify additional following disambiguating holonyms, e.g.
{{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}.
]==]
function export.find_matching_holonym_location(data)
local all_found = {}
for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do
insert(all_found, {group, key, spec, container_trail})
end
if not all_found[1] then
return nil
elseif all_found[2] then
local holonym_placetype = data.holonym_placetype
if type(holonym_placetype) == "table" then
holonym_placetype = concat(holonym_placetype, ",")
end
local found_keys = {}
for _, found in ipairs(all_found) do
local _, key, _, _ = unpack(found)
insert(found_keys, key)
end
error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " ..
"containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys)))
else
return unpack(all_found[1])
end
end
------------------------------------------------------------------------------------------
-- Placename and placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their
canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which
applies to categorization and other processes but not to display.
The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state",
"province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g.
"census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype.
Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be
interpreted as "department", "district" or "division").
]==]
export.placetype_aliases = {
["acomm"] = "autonomous community",
["adr"] = "administrative region",
["adterr"] = "administrative territory", -- Pakistan
["aobl"] = "autonomous oblast",
["aokr"] = "autonomous okrug",
["ap"] = "autonomous province",
["apref"] = "autonomous prefecture",
["aprov"] = "autonomous province",
["ar"] = "autonomous region",
["arch"] = "archipelago",
["arep"] = "autonomous republic",
["aterr"] = "autonomous territory",
["atu"] = "autonomous territorial unit",
["bor"] = "borough",
["c"] = "country",
["can"] = "canton",
["carea"] = "council area",
["cc"] = "constituent country",
["cdblock"] = "community development block",
["cdep"] = "Crown dependency",
["CDP"] = "census-designated place",
["cdp"] = "census-designated place",
["clcity"] = "county-level city",
["co"] = "county",
["cobor"] = "county borough",
["colcity"] = "county-level city",
["coll"] = "collectivity",
["comm"] = "community",
["cont"] = "continent",
["contr"] = "continental region",
["contregion"] = "continental region",
["cpar"] = "civil parish",
["damun"] = "direct-administered municipality",
["dep"] = "dependency",
["department capital"] = "departmental capital",
["dept"] = "department",
["depterr"] = "dependent territory",
["dist"] = "district",
["distmun"] = "district municipality",
["div"] = "division",
["emp"] = "empire",
["fpref"] = "French prefecture",
["gov"] = "governorate",
["govnat"] = "governorate",
["home-rule city"] = "home rule city",
["home-rule municipality"] = "home rule municipality",
["inner-city area"] = "inner city area",
["ires"] = "Indian reservation",
["isl"] = "island",
["lbor"] = "London borough",
["lga"] = "local government area",
["lgarea"] = "local government area",
["lgd"] = "local government district",
["lgdist"] = "local government district",
["metbor"] = "metropolitan borough",
["metcity"] = "metropolitan city",
["metmun"] = "metropolitan municipality",
["mtn"] = "mountain",
["mun"] = "municipality",
["mundist"] = "municipal district",
["nonmetropolitan county"] = "non-metropolitan county",
["obl"] = "oblast",
["okr"] = "okrug",
["p"] = "province",
["par"] = "parish",
["parmun"] = "parish municipality",
["pen"] = "peninsula",
["plcity"] = "prefecture-level city",
["plcolony"] = "Polish colony",
["pref"] = "prefecture",
["prefcity"] = "prefecture-level city",
["preflcity"] = "prefecture-level city",
["prov"] = "province",
["r"] = "region",
["range"] = "mountain range",
["rcm"] = "regional county municipality",
["rcomun"] = "regional county municipality",
["rdist"] = "regional district",
["rep"] = "republic",
["rhrom"] = "rural hromada",
["riv"] = "river",
["rmun"] = "regional municipality",
["robor"] = "royal borough",
["romp"] = "Roman province",
["runit"] = "regional unit",
["rurmun"] = "rural municipality",
["s"] = "state",
["sar"] = "special administrative region",
["shrom"] = "settlement hromada",
["spref"] = "subprefecture",
["sprefcity"] = "sub-prefectural city",
["sprovcity"] = "subprovincial city",
["submet city"] = "sub-metropolitan city",
["submetropolitan city"] = "sub-metropolitan city",
["sub-prefecture-level city"] = "sub-prefectural city",
["sub-provincial city"] = "subprovincial city",
["sub-provincial district"] = "subprovincial district",
["terr"] = "territory",
["terrauth"] = "territorial authority",
["twp"] = "township",
["twpmun"] = "township municipality",
["uauth"] = "unitary authority",
["ucomm"] = "unincorporated community",
["udist"] = "unitary district",
["uhrom"] = "urban hromada",
["uterr"] = "union territory",
["utwpmun"] = "united township municipality",
["val"] = "valley",
["vdc"] = "village development committee",
["vil"] = "village",
["voi"] = "voivodeship",
["wcomm"] = "Welsh community",
}
local no_link_def_article = {link = false, article = "the"}
local no_link_no_article = {link = false, article = false}
--[==[ var:
These qualifiers can be prepended onto any placetype and will be handled correctly. For example, the placetype
`large city` will be displayed as `large <nowiki>[[city]]</nowiki>` and categorized as if `city` were specified. If the
value in the following table is a string, the qualifier will display according to the string. If the value is `true`,
the qualifier will be linked to its corresponding Wiktionary entry. If the value is `false`, the qualifier will not be
linked but will appear as-is. Note that these qualifiers do not override placetypes with entries elsewhere that contain
those same qualifiers. For example, the entry for `inland sea` in `placetype_data` will apply in preference to treating
`inland sea` as equivalent to `sea`.
]==]
export.placetype_qualifiers = {
-- generic qualifiers
["huge"] = false,
["tiny"] = false,
["large"] = false,
["big"] = false,
["mid-size"] = false,
["mid-sized"] = false,
["small"] = false,
["sizable"] = false,
["important"] = false,
["long"] = false,
["short"] = false,
["major"] = false,
["minor"] = false,
["high"] = false,
["tall"] = false,
["low"] = false,
["left"] = false, -- left tributary
["right"] = false, -- right tributary
["modern"] = false, -- for use in opposition to "ancient" in another definition
-- "former" qualifiers
["abandoned"] = true,
["ancient"] = true,
["deserted"] = true,
["extinct"] = true,
["former"] = false,
["historic"] = "historical",
["historical"] = true,
["medieval"] = true,
["mediaeval"] = true,
["ruined"] = true,
["traditional"] = true,
-- sea qualifiers
["coastal"] = true,
["inland"] = true, -- note, we also have an entry in placetype_data for 'inland sea' to get a link to [[inland sea]]
["maritime"] = true,
["overseas"] = true,
["seaside"] = true,
["beachfront"] = true,
["beachside"] = true,
["riverside"] = true,
-- lake qualifiers
["freshwater"] = true,
["saltwater"] = true,
["endorheic"] = true,
["oxbow"] = true,
["ox-bow"] = "[[oxbow]]", -- [[ox-bow]] is a red link
["tidal"] = true,
-- land qualifiers
["hilltop"] = true,
["hilly"] = true,
["insular"] = true,
["peninsular"] = true,
["chalk"] = true,
["karst"] = true,
["limestone"] = true,
["mountainous"] = true,
["mountaintop"] = true,
["alpine"] = true,
["volcanic"] = true, -- for an island
-- political status qualifiers
["autonomous"] = true,
["incorporated"] = true,
["special"] = true,
["unincorporated"] = true,
["coterminous"] = true,
-- monetary status/etc. qualifiers
["fashionable"] = true,
["wealthy"] = true,
["affluent"] = true,
["declining"] = true,
-- city vs. rural qualifiers
["urban"] = true,
["suburban"] = true,
["exurban"] = true,
["outlying"] = true,
["remote"] = true,
["rural"] = true,
["outback"] = true,
["inner"] = false,
["inner-city"] = true,
["central"] = false,
["outer"] = false,
-- land use qualifiers
["residential"] = true,
["agricultural"] = true,
["business"] = true,
["commercial"] = true,
["industrial"] = true,
-- business use qualifiers
["railroad"] = true,
["railway"] = true,
["farming"] = true,
["fishing"] = true,
["mining"] = true,
["logging"] = true,
["cattle"] = true,
-- tourism use qualifiers
["resort"] = true, -- note, we also have 'resort city' and 'resort town', that take precedecne
["spa"] = true, -- note, we also have 'spa city' and 'spa town', that take precedecne
["ski"] = true, -- note, we also have 'ski resort city' and 'ski resort town', that take precedecne
-- religious qualifiers
["holy"] = true,
["sacred"] = true,
["religious"] = true,
["secular"] = true,
-- qualifiers for nonexistent places
["claimed"] = false,
["fictional"] = true,
["legendary"] = true,
["mythical"] = true,
["mythological"] = true,
-- directional qualifiers
["northern"] = false,
["southern"] = false,
["eastern"] = false,
["western"] = false,
["north"] = false,
["south"] = false,
["east"] = false,
["west"] = false,
["northeastern"] = false,
["southeastern"] = false,
["northwestern"] = false,
["southwestern"] = false,
["northeast"] = false,
["southeast"] = false,
["northwest"] = false,
["southwest"] = false,
-- seasonal qualifiers
["summer"] = true, -- e.g. for 'summer capital'
["winter"] = true,
-- legal status qualifiers
-- FIXME: Two-word qualifiers don't work yet. But you can enter "de-facto" and it's canonicalized to [[de facto]].
["official"] = true,
["unofficial"] = true,
["de facto"] = true, -- 'de facto capital'
["de-facto"] = "[[de facto]]", -- [[de-facto]] is a red link
["de jure"] = true, -- 'de jure capital'
["de-jure"] = "[[de jure]]", -- [[de-jure]] is a red link
-- NOTE: 'unrecognized/unrecognised' are handled as placetypes 'unrecognized country', 'unrecognized state'
-- misc. qualifiers
["planned"] = true,
["chartered"] = true,
["landlocked"] = true,
["uninhabited"] = true,
-- superlative qualifiers
["first"] = no_link_def_article,
["second"] = no_link_def_article, -- for "second largest" etc.
["third"] = no_link_def_article,
["fourth"] = no_link_def_article,
["last"] = no_link_def_article,
["only"] = no_link_def_article,
["sole"] = no_link_def_article,
["main"] = no_link_def_article,
["largest"] = no_link_def_article,
["biggest"] = no_link_def_article,
["smallest"] = no_link_def_article,
["shortest"] = no_link_def_article,
["longest"] = no_link_def_article,
["tallest"] = no_link_def_article,
["highest"] = no_link_def_article,
["lowest"] = no_link_def_article,
["leftmost"] = no_link_def_article,
["rightmost"] = no_link_def_article,
["innermost"] = no_link_def_article,
["outermost"] = no_link_def_article,
["northernmost"] = no_link_def_article,
["southernmost"] = no_link_def_article,
["westernmost"] = no_link_def_article,
["easternmost"] = no_link_def_article,
["northwesternmost"] = no_link_def_article,
["southwesternmost"] = no_link_def_article,
["northeasternmost"] = no_link_def_article,
["southeasternmost"] = no_link_def_article,
-- several/various
["several"] = no_link_no_article,
["various"] = no_link_no_article,
["numerous"] = no_link_no_article,
["multiple"] = no_link_no_article,
["many"] = no_link_no_article,
["other"] = no_link_no_article,
}
--[==[ var:
In this table, the key qualifiers should be treated the same as the value qualifiers for categorization purposes. This
is overridden by `placetype_data` and `qualifier_to_placetype_equivs`.
]==]
export.former_qualifiers = {
["abandoned"] = {"FORMER"},
["ancient"] = {"ANCIENT", "FORMER"},
["former"] = {"FORMER"},
["extinct"] = {"FORMER"},
["historic"] = {"FORMER"},
["historical"] = {"FORMER"},
["medieval"] = {"ANCIENT", "FORMER"},
["mediaeval"] = {"ANCIENT", "FORMER"},
["ruined"] = {"ANCIENT", "FORMER"},
["traditional"] = {"FORMER"},
}
--[==[ var:
In this table, any placetypes containing these qualifiers that do not occur in `placetype_data` should be mapped to the
specified placetypes for categorization purposes. Entries here are overridden by `placetype_data`.
]==]
export.qualifier_to_placetype_equivs = {
["fictional"] = "fictional location",
["legendary"] = "mythological location",
["mythical"] = "mythological location",
["mythological"] = "mythological location",
-- For e.g. Taiwan as a "claimed province" of China; parts of Belize as claimed by Guatemala; various islands
-- claimed by various parties in East Asia. FIXME: We should conditionalize on what is being claimed since there are
-- also claimed capitals, e.g. Israel and Palestine claim Jerusalem as their capital.
["claimed"] = "claimed political division",
}
--[==[ var:
Mapping from placetypes to the corresponding plural category-only placetype for a capital of that placetype. The reverse
mapping also exists.
]==]
export.placetype_to_capital_cat = {
["autonomous community"] = "autonomous community capitals",
["canton"] = "cantonal capitals",
["comarca"] = "comarca capitals",
["country"] = "national capitals",
-- The following are not obviously different from 'county seats' but the latte terminology is used in the US.
["county"] = "county capitals",
["department"] = "departmental capitals",
["district"] = "district capitals",
["division"] = "division capitals",
["emirate"] = "emirate capitals",
["governorate"] = "governorate capitals",
["hromada"] = "hromada capitals",
["krai"] = "krai capitals",
["metropolitan city"] = "metropolitan city capitals",
["municipality"] = "municipal capitals",
["oblast"] = "oblast capitals",
["okrug"] = "okrug capitals",
["prefecture"] = "prefectural capitals",
["province"] = "provincial capitals",
["raion"] = "raion capitals",
["regency"] = "regency capitals",
["region"] = "regional capitals",
["regional unit"] = "regional unit capitals",
["republic"] = "republic capitals",
["state"] = "state capitals",
["territory"] = "territorial capitals",
["voivodeship"] = "voivodeship capitals",
}
--[==[ var:
This contains placenames that should be preceded by an article (almost always "the"). '''NOTE''': There are multiple
ways that placenames can come to be preceded by "the":
# Listed here.
# Given in [[Module:place/locations]] with an initial "the". All such placenames are added to this map by the code
just below the map.
# The placetype of the placename has `holonym_use_the = true` in its placetype_data.
# A regex in placename_the_re matches the placename.
Note that "the" is added only before the first holonym in a place description.
]==]
export.placename_article = {
-- This should only contain info that can't be inferred from [[Module:place/locations]].
["archipelago"] = {
["Cyclades"] = "the",
["Dodecanese"] = "the",
},
["country"] = {
["Holy Roman Empire"] = "the",
},
["empire"] = {
["Holy Roman Empire"] = "the",
},
["island"] = {
["North Island"] = "the",
["South Island"] = "the",
},
["region"] = {
["Balkans"] = "the",
["Russian Far East"] = "the",
["Caribbean"] = "the",
["Caucasus"] = "the",
["Middle East"] = "the",
["New Territories"] = "the",
["North Caucasus"] = "the",
["South Caucasus"] = "the",
["West Bank"] = "the",
["Gaza Strip"] = "the",
},
["valley"] = {
["San Fernando Valley"] = "the",
},
}
--[==[ var:
Regular expressions to apply to determine whether we need to put 'the' before a holonym. The key "*" applies to all
holonyms, otherwise only the regexes for the holonym's placetype apply.
]==]
export.placename_the_re = {
-- We don't need entries for peninsulas, seas, oceans, gulfs or rivers
-- because they have holonym_use_the = true.
["*"] = {"^Isle of ", " Islands$", " Mountains$", " Empire$", " Country$", " Region$", " District$", "^City of "},
["bay"] = {"^Bay of "},
["lake"] = {"^Lake of "},
["country"] = {"^Republic of ", " Republic$"},
["republic"] = {"^Republic of ", " Republic$"},
["region"] = {" [Rr]egion$"},
["river"] = {" River$"},
["local government area"] = {"^Shire of "},
["county"] = {"^Shire of "},
["Indian reservation"] = {" Reservation", " Nation"},
["tribal jurisdictional area"] = {" Reservation", " Nation"},
}
--[==[ var:
If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of
holonyms for categorization (but not display) purposes.
]==]
export.cat_implications = {
["region"] = {
["Eastern Europe"] = {"continent/Europe"},
["Central Europe"] = {"continent/Europe"},
["Western Europe"] = {"continent/Europe"},
["South Europe"] = {"continent/Europe"},
["Southern Europe"] = {"continent/Europe"},
["Northern Europe"] = {"continent/Europe"},
["Northeast Europe"] = {"continent/Europe"},
["Northeastern Europe"] = {"continent/Europe"},
["Southeast Europe"] = {"continent/Europe"},
["Southeastern Europe"] = {"continent/Europe"},
["North Caucasus"] = {"continent/Europe"},
["South Caucasus"] = {"continent/Asia"},
["South Asia"] = {"continent/Asia"},
["Southern Asia"] = {"continent/Asia"},
["East Asia"] = {"continent/Asia"},
["Eastern Asia"] = {"continent/Asia"},
["Central Asia"] = {"continent/Asia"},
["West Asia"] = {"continent/Asia"},
["Western Asia"] = {"continent/Asia"},
["Southeast Asia"] = {"continent/Asia"},
["North Asia"] = {"continent/Asia"},
["Northern Asia"] = {"continent/Asia"},
["Anatolia"] = {"continent/Asia"},
["Asia Minor"] = {"continent/Asia"},
["Mesopotamia"] = {"continent/Asia"},
["North Africa"] = {"continent/Africa"},
["Central Africa"] = {"continent/Africa"},
["West Africa"] = {"continent/Africa"},
["East Africa"] = {"continent/Africa"},
["Southern Africa"] = {"continent/Africa"},
["Central America"] = {"continent/Central America"},
["Caribbean"] = {"continent/North America"},
["Polynesia"] = {"continent/Oceania"},
["Micronesia"] = {"continent/Oceania"},
["Melanesia"] = {"continent/Oceania"},
["Siberia"] = {"country/Russia", "continent/Asia"},
["Russian Far East"] = {"country/Russia", "continent/Asia"},
["South Wales"] = {"constituent country/Wales", "continent/Europe"},
["Balkans"] = {"continent/Europe"},
["West Bank"] = {"country/Palestine", "continent/Asia"},
["Gaza"] = {"country/Palestine", "continent/Asia"},
["Gaza Strip"] = {"country/Palestine", "continent/Asia"},
}
}
------------------------------------------------------------------------------------------
-- Category and display handlers --
------------------------------------------------------------------------------------------
local function city_type_cat_handler(data)
local entry_placetype = data.entry_placetype
local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities")
if not generic_before_non_cities then
internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" ..
" setting", entry_placetype)
end
local plural_entry_placetype = export.pluralize_placetype(entry_placetype)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and not spec.is_city then
-- ZH: "法國的城市" (location_key + 的 + zh_placetype_name)
local zh_name_raw = export.get_zh_placetype_name(entry_placetype)
local zh_entry_name = zh_name_raw and export.format_zh_name(zh_name_raw) or plural_entry_placetype
local de = export.zh_strings.de_particle
local retcats = {export.get_prefixed_key(key, spec) .. de .. zh_entry_name}
if container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_entry_name)
end
end
return retcats
end
end
local function capital_city_cat_handler(data, non_city)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
-- The first time we're called we want to return something; otherwise we will be called for later-mentioned
-- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in
-- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital
-- category/categories we add below.
local retcats
if not non_city and place_desc.holonyms then
for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do
local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename
retcats = city_type_cat_handler {
entry_placetype = "city",
holonym_placetype = h_placetype,
holonym_placename = h_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if retcats then
break
end
end
end
if not retcats then
retcats = {}
end
-- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we
-- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State
-- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory'
-- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's
-- an entry for 'autonomous community').
-- ZH: look up Chinese capital label by holonym placetype ("首都", "省會", "首府", etc.)
local zh_capital_name = export.zh_capital_label_by_holonym_type[holonym_placetype]
if not zh_capital_name then
zh_capital_name = export.zh_capital_label_by_holonym_type[holonym_placetype:gsub("^.* ", "")]
end
local de = export.zh_strings.de_particle
if zh_capital_name then
local inserted_specific_variant_cat = false
if holonym_index then
-- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern
-- where we use :also to specify that a given city is the capital at multiple surrounding levels.
local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index
for h_index = holonym_index, #place_desc.holonyms do
if place_desc.holonyms[h_index].placetype then
matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location {
holonym_placetype = place_desc.holonyms[h_index].placetype,
holonym_placename = place_desc.holonyms[h_index].unlinked_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if matching_group then
matching_holonym_index = h_index
break
end
end
end
if matching_holonym_index == holonym_index then
if matching_container_trail[1] and not matching_spec.no_container_cat then
for _, container in ipairs(matching_container_trail[1]) do
-- ZH: "美國的首都" (location_key + 的 + zh_capital_name)
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_capital_name)
inserted_specific_variant_cat = true
end
end
elseif matching_holonym_index then
-- Check to make sure that the holonym placetype we were called on is listed among the
-- divtypes of the location we found.
local function insert_specific_variant_if_possible(key, spec)
return export.get_equiv_placetype_prop(holonym_placetype, function(pt)
local plural_holonym_placetype = export.pluralize_placetype(pt)
local saw_matching_div
if spec.divs then
local divs = spec.divs
if type(divs) ~= "table" then
divs = {divs}
end
for _, div in ipairs(divs) do
if type(div) ~= "table" then
div = {type = div}
end
if plural_holonym_placetype == div.type then
saw_matching_div = true
break
end
end
end
if saw_matching_div then
insert(retcats, export.get_prefixed_key(key, spec) .. de .. zh_capital_name)
return true
end
return false
end)
end
if insert_specific_variant_if_possible(matching_key, matching_spec) then
inserted_specific_variant_cat = true
elseif not matching_spec.no_container_cat then
for _, containers in ipairs(matching_container_trail) do
local saw_no_container_cat = false
for _, container in ipairs(containers) do
if insert_specific_variant_if_possible(container.key, container.spec) then
inserted_specific_variant_cat = true
break
end
saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat
end
if inserted_specific_variant_cat or saw_no_container_cat then
break
end
end
end
end
else
-- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for
-- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing.
-- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to
-- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab.
-- Possibly we can just skip this case entirely.
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_capital_name)
inserted_specific_variant_cat = true
end
end
end
if not inserted_specific_variant_cat then
insert(retcats, zh_capital_name)
end
else
-- We didn't recognize the holonym placetype; fall back to generic capital label.
insert(retcats, "首都")
end
return retcats
end
--[=[
This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used
in two ways:
# To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and
[[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym.
# To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym
description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this
case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments,
administrative regions, and for the entire country, and for example we only want to categorize a demonym into
[[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym
invocation only adds the most specific holonym category and not the category of any containing polity (hence if we
add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]).
This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston`
as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and
[[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities
having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]],
[[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing
polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`).
Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the
mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions
Ohio and a holonym for a Columbus in a different country is encountered, because of the function
`augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered.
The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding
language code).
]=]
local function generic_place_cat_handler(data)
local from_demonym = data.from_demonym
local retcats = {}
local function insert_retkey(key, spec)
if from_demonym then
insert(retcats, key)
else
-- ZH: "法國的地方" (location_key + 的 + 地方)
insert(retcats, export.get_prefixed_key(key, spec) .. export.zh_strings.de_particle .. "地方")
end
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
if not spec.no_generic_place_cat then
-- This applies to continents and continental regions.
insert_retkey(key, spec)
end
-- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in
-- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when
-- no_container_cat is set (e.g. for 'United Kingdom').
if not spec.no_container_cat then
for _, container_set in ipairs(container_trail) do
local stop_adding_containers = false
for _, container in ipairs(container_set) do
if not container.spec.no_generic_place_cat then
insert_retkey(container.key, container.spec)
end
if container.spec.no_container_cat then
stop_adding_containers = true
end
end
if stop_adding_containers then
break
end
end
end
return retcats
end
end
--[==[
Special category handler run for all placetypes that checks for specified division placetypes of known locations and
categorizes appropriately.
]==]
function export.political_division_cat_handler(data)
if data.from_demonym then
return
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
local divlists = {}
if spec.divs then
insert(divlists, spec.divs)
end
if spec.addl_divs then
insert(divlists, spec.addl_divs)
end
for _, divlist in ipairs(divlists) do
if type(divlist) ~= "table" then
divlist = {divlist}
end
for _, div in ipairs(divlist) do
if type(div) == "string" then
div = {type = div}
end
local sgdiv = export.maybe_singularize_placetype(div.type) or div.type
local prep = div.prep or "of"
local cat_as = div.cat_as or div.type
if type(cat_as) ~= "table" then
cat_as = {cat_as}
end
if not export.placetype_data[sgdiv] then
internal_error("Placetype %s associated with known location key %s and data %s not found in " ..
"`placetype_data`", sgdiv, key, spec)
end
if sgdiv == data.entry_placetype then
local retcats = {}
for _, pt_cat in ipairs(cat_as) do
if type(pt_cat) == "string" then
pt_cat = {type = pt_cat}
end
local pt_prep = pt_cat.prep or prep
insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " ..
export.get_prefixed_key(key, spec))
end
return retcats
end
end
end
end
end
--[==[
This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any
foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value
in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the
modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the
entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the
country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized
into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to
make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is
intended for Newark, New Jersey).
]==]
function export.get_bare_categories(args, overall_place_spec)
local bare_cats = {}
local place_descs = overall_place_spec.descs
local possible_placetypes_by_place_desc = {}
for i, place_desc in ipairs(place_descs) do
possible_placetypes_by_place_desc[i] = {}
for _, placetype in ipairs(place_desc.placetypes) do
if not export.placetype_is_ignorable(placetype) then
local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true})
for _, equiv in ipairs(equivs) do
insert(possible_placetypes_by_place_desc[i], equiv.placetype)
end
end
end
end
local function check_term(term)
-- Treat Wikipedia links like local ones.
term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[")
term = export.remove_links_and_html(term)
term = term:gsub("^the ", "")
for i, place_desc in ipairs(place_descs) do
-- Iterate over all matching locations in case there are multiple, as with Delhi defined as
-- {{place|en|megacity/and/union territory|c/India|containing the national capital [[New Delhi]]}}.
for group, key, spec, container_trail in export.iterate_matching_holonym_location {
holonym_placetype = possible_placetypes_by_place_desc[i],
holonym_placename = term,
place_desc = place_desc,
} do
insert(bare_cats, key)
end
end
end
-- FIXME: Should we only do the following if the language is English (requires that the lang is passed in)?
-- We should always do it if `pagename` is given (as it is with {{tcl}}) but maybe not otherwise unless 1=en. There
-- are cases like [[Ankara]] = English name for capital of Turkey, but also the name in various languages for the
-- capital of Ghana (= English [[Accra]]). But this should get caught by mismatching the containing country. The
-- advantage of checking when the language isn't English is we catch those places that fail to give an English
-- translation but where the translation happens to be the same as the other-language spelling. However, I don't
-- know how often this situation occurs.
check_term(args.pagename or mw.loadData("Module:headword/data").pagename)
for _, t in ipairs(args.t) do
check_term(t)
end
local function check_termobj_list(terms)
for _, term in ipairs(terms) do
if term.eq then
check_term(term.eq)
end
if term.alt or term.term then
check_term(term.alt or term.term)
end
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
local arg = extra_info_terms.arg
if arg == "modern" or arg == "now" or arg == "full" or arg == "short" then
check_termobj_list(extra_info_terms.terms)
end
end
for _, directive in ipairs(overall_place_spec.directives) do
check_termobj_list(directive.terms)
end
return bare_cats
end
--[==[
This is used to augment the holonyms associated with a place description with the containing polities. For example,
given the following:
`# {{tl|place|en|subprefecture|pref/Hokkaido}}.`
We auto-add Japan as another holonym so that the term gets categorized into [[:Category:Subprefectures of Japan]].
To avoid over-categorizing we need to check to make sure no other countries are specified as holonyms.
]==]
function export.augment_holonyms_with_container(place_descs)
for _, place_desc in ipairs(place_descs) do
if place_desc.holonyms then
-- This ends up containing a copy of the original holonyms, with the augmented holonyms inserted in their
-- appropriate position. We don't just put them at the end because some holonyms have use the `:also`
-- modifier, which causes category processing to restart at that point after generating categories for a
-- preceding holonym, and we don't want the preceding holonym's augmented holonyms interfering with
-- categorization of a later holonym. We proceed from right to left, and each time we augment, we copy
-- the holonyms with the augmented holonym(s) inserted appropriately and replace the place description's
-- holonyms with the augmented ones before the next iteration. The reason for this is so that e.g.
-- {{place|neighborhood|city/Birmingham|co/West Midlands|cc/England}} doesn't throw an error during the
-- augmentation process due to 'Birmingham' referring to two known locations (in England and Alabama). If
-- we go left to right, we will throw an ambiguity error on `city/Birmingham` because code to exclude
-- Birmingham, Alabama needs `c/United Kingdom` present (to cause a mismatch with `c/United States`),
-- which isn't yet present as the augmentation code hasn't gotten to `cc/England` yet. For similar
-- reasons, we need to include the augmented holonyms in the holonyms considered in the next iteration
-- rather than modifying the place description once at athe end.
for i = #place_desc.holonyms, 1, -1 do
local holonym = place_desc.holonyms[i]
if holonym.placetype and not export.placetype_is_ignorable(holonym.placetype) then
local group, key, spec, container_trail = export.find_matching_holonym_location {
holonym_placetype = holonym.placetype,
holonym_placename = holonym.unlinked_placename,
holonym_index = i,
place_desc = place_desc,
}
if group and container_trail[1] and not spec.no_auto_augment_container then
local augmented_holonyms = {}
for j = 1, i do
insert(augmented_holonyms, place_desc.holonyms[j])
end
for _, containers in ipairs(container_trail) do
local any_no_auto_augment_container = false
for _, container in ipairs(containers) do
any_no_auto_augment_container = any_no_auto_augment_container or
container.spec.no_auto_augment_container
local containing_type = container.spec.placetype
if type(containing_type) == "table" then
-- If the containing type is a list, use the first element as the canonical variant.
containing_type = containing_type[1]
end
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
-- Don't side-effect holonyms while processing them.
local new_holonym = {
-- By the time we run, the display has already been generated so we don't need to
-- set display_placename.
placetype = containing_type,
-- placename_to_key() for the group should correctly handle both full and elliptical
-- placenames, but the full placename seems less likely to be ambiguous. FIXME: We
-- should just store the key directly and use it when available to avoid having to
-- convert key to placename and back to key.
unlinked_placename = full_container_placename,
-- Indicate that this is an augmented holonym, and was derived from the specified
-- holonym. In iterate_matching_holonym_location(), we ignore augmented holonyms
-- derived from holonyms that are different from the holonym we're searching for but
-- of the same placetype. This is to correctly handle a situation like
-- {{place|river|dept/Ardèche,Gard,Vaucluse,Bouches-du-Rhône|c/France}}. Here,
-- `Ardèche` is in `r/Auvergne-Rhône-Alpes`, while `Gard` is in `r/Occitania` and
-- the other two are in `r/Provence-Alpes-Côte d'Azur`. Augmenting proceeds from
-- right to left, so after it adds `r/Provence-Alpes-Côte d'Azur` to
-- `Bouches-du-Rhône`, Vaucluse gets augmented correctly but `Gard` fails to match
-- in find_matching_holonym_location() because of the mismatch between augmented
-- `r/Provence-Alpes-Côte d'Azur` and actual `r/Occitania`. Similarly, all later
-- calls to find_matching_holonym_location() fail to match `Gard` (and likewise
-- `Ardèche`) against any known location. To deal with this, we mark augmented
-- holoynms as being augmented due to a source holonym, and when processing a given
-- holonym, ignore augmented holonyms from other holonyms of the same placetype.
-- The restriction to the same placetype is so that `Birmingham` still gets
-- correctly disambiguated to Birmingham, England in the example given above near
-- the top of this function, using the augmented holonym `c/United Kingdom` added by
-- the specified `cc/England` (whose placetype `constituent country` differs from
-- the placetype `city` of Birmingham).
augmented_from_holonym = holonym,
}
insert(augmented_holonyms, new_holonym)
-- But it is safe to modify other parts of the place_desc.
export.key_holonym_into_place_desc(place_desc, new_holonym)
end
if any_no_auto_augment_container then
break
end
end
for j = i + 1, #place_desc.holonyms do
insert(augmented_holonyms, place_desc.holonyms[j])
end
place_desc.holonyms = augmented_holonyms
end
end
end
end
end
end
-- Cat handler for district, areas, neighborhoods and suburbs. Districts are tricky because they can either be political
-- divisions or city neighborhoods. Areas similarly can be political divisions (rarely; specifically, in Kuwait), city
-- neighborhoods or larger geographical areas/regions. We handle this as follows:
-- (1) `placetype_data` cat entries for specific countries or country divisions take precedence over cat_handlers, so if
-- the user says {{tl|place|district|s/Maharashtra|c/India}}, we won't even be called because there is an entry that
-- categorizes into [[:Category|Districts of Maharashtra, India]].
-- (2) If we're called, we check the holonym we're called on to see if it is a recognized city, e.g. if we're called
-- using {{tl|place|district|city/Mumbai|s/Maharashtra|c/India}}. If so, we categorize under e.g.
-- [[:Category:Neighbourhoods of Mumbai]]. (Choosing the spelling "neighbourhoods" because we're in India.)
-- (3) If we're called and the holonym is not a recognized city, we check if the placetype has has_neighborhoods set.
-- If so, it's "city-like" and we categorize under the first containing polity that we recognize. For example, if
-- we're called using {{tl|place|district|town/Northampton|co/Hampshire|s/Massachusetts|c/US}}, we should recognize
-- town as "city-like" and categorize under [[:Category:Neighborhoods in Massachusetts]]. (Note "in" not "of", and
-- note the spelling "neighborhoods" because we're in the US.)
-- (4) If the holonym is not city-like, we do nothing. If there's a city or city-like placetype farther up (e.g. we're
-- called as {{tl|place|district|ward/Foo|mun/Bar|...}}), we will handle the city-like entity according to (2) or
-- (3) when called on that holonym. Otherwise either the categorization in (1) takes place or there's no
-- categorization.
local function district_neighborhood_cat_handler(data)
local function get_plural_entry_placetype(location_spec, container_trail)
if data.entry_placetype == "suburb" then
return "Suburbs"
else
-- Check for `british_spelling` setting on the spec itself or any container.
local uses_british_spelling = location_spec.british_spelling
if uses_british_spelling == nil and container_trail then
for _, container_set in ipairs(container_trail) do
local must_outer_break = false
for _, container in ipairs(container_set) do
if container.spec.british_spelling ~= nil then
uses_british_spelling = container.spec.british_spelling
must_outer_break = true
break
end
end
if must_outer_break then
break
end
end
end
return uses_british_spelling and "Neighbourhoods" or "Neighborhoods"
end
end
-- First check the immediate holonym to see if it's a city or a city-like top-level entity (Hong Kong, Bonaire,
-- etc.)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and spec.is_city then
return {get_plural_entry_placetype(spec, container_trail) .. " of " .. export.get_prefixed_key(key, spec)}
end
-- If the entry placetype is neighbo(u)rhood, assume it is a neighborhood even if there isn't a city-like
-- entity father up the chain. (E.g. due to a mistaken use of m/ instead of mun/ for municipality.)
local has_neighborhoods
local entry_placetype = data.entry_placetype
if entry_placetype == "neighborhood" or entry_placetype == "neighbourhood" or entry_placetype == "suburb" then
has_neighborhoods = true
else
-- Otherwise, make sure the current holonym is city-like.
has_neighborhoods = export.get_equiv_placetype_prop(data.holonym_placetype, function(pt)
return export.get_placetype_prop(pt, "has_neighborhoods")
end, {continue_on_nil_only = true})
end
if has_neighborhoods then
-- Loop up the holonyms, looking for city and city-like entities in case of e.g. [[Sepulveda]] written
-- {{place|en|neighborhood|valley/San Fernando Valley|city/Los Angeles|s/California|c/USA}}
-- but also look for a recognizable poldiv, and if so categorize as "Neighborhoods in POLDIV". We need
-- to start with the current holonym, which is especially important for neighborhoods and suburbs that
-- may have the first holonym be a recognizable province, etc. but can't hurt otherwise. (Previously
-- we skipped the first/current holonym.)
for other_holonym_index, other_holonym in export.get_holonyms_to_check(data.place_desc,
data.holonym_index) do
local other_holonym_data = {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = data.place_desc,
}
local group, key, spec, container_trail = export.find_matching_holonym_location(other_holonym_data)
if group and not spec.is_former_place then
return {get_plural_entry_placetype(spec, container_trail) .. (spec.is_city and " of " or " in ") ..
export.get_prefixed_key(key, spec)}
end
end
end
end
function export.check_already_seen_string(holonym_placename, already_seen_strings)
local canon_placename = ulower(m_links.remove_links(holonym_placename))
if type(already_seen_strings) ~= "table" then
already_seen_strings = {already_seen_strings}
end
for _, already_seen_string in ipairs(already_seen_strings) do
if canon_placename:find(already_seen_string) then
return true
end
end
return false
end
-- Prefix display handler that adds a prefix such as "Metropolitan Borough of " to the display
-- form of holonyms. We make sure the holonym doesn't contain the prefix or some variant already.
-- We do this by checking if any of the strings in ALREADY_SEEN_STRINGS, either a single string or
-- a list of strings, or the prefix if ALREADY_SEEN_STRINGS is omitted, are found in the holonym
-- placename, ignoring case and links. If the prefix isn't already present, we create a link that
-- uses the raw form as the link destination but the prefixed form as the display form, unless the
-- holonym already has a link in it, in which case we just add the prefix.
local function prefix_display_handler(prefix, holonym_placename, already_seen_strings)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(prefix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return prefix .. " " .. holonym_placename
end
return prefix .. " [[" .. holonym_placename .. "]]"
end
-- Suffix display handler that adds a suffix such as " parish" to the display form of holonyms.
-- Works identically to prefix_display_handler but for suffixes instead of prefixes.
local function suffix_display_handler(suffix, holonym_placename, already_seen_strings, include_suffix_in_link)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(suffix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return holonym_placename .. " " .. suffix
end
if include_suffix_in_link then
return "[[" .. holonym_placename .. " " .. suffix .. "]]"
else
return "[[" .. holonym_placename .. "]] " .. suffix
end
end
-- Display handler for boroughs. New York City boroughs are display as-is. Others are suffixed
-- with "borough".
local function borough_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.new_york_boroughs[unlinked_placename] then
-- Hack: don't display "borough" after the names of NYC boroughs
return holonym_placename
end
return suffix_display_handler("borough", holonym_placename)
end
local function county_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
-- Display handler for Irish counties. Irish counties are displayed as e.g. "County [[Cork]]".
if m_locations.ireland_counties["County " .. unlinked_placename .. ", Ireland"] or
m_locations.northern_ireland_counties["County " .. unlinked_placename .. ", Northern Ireland"] then
return prefix_display_handler("County", holonym_placename)
end
-- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County".
if m_locations.taiwan_counties[unlinked_placename .. " County, Taiwan"] then
return suffix_display_handler("County", holonym_placename)
end
-- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County".
if m_locations.romania_counties[unlinked_placename .. " County, Romania"] then
return suffix_display_handler("County", holonym_placename)
end
-- FIXME, we need the same for US counties but need to key off the country, not the specific county.
-- Others are displayed as-is.
return holonym_placename
end
-- Display handler for prefectures. Japanese prefectures are displayed as e.g. "[[Fukushima]] Prefecture".
-- Others are displayed as e.g. "[[Fthiotida]] prefecture".
local function prefecture_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
local suffix = m_locations.japan_prefectures[unlinked_placename .. " Prefecture, Japan"] and "Prefecture" or "prefecture"
return suffix_display_handler(suffix, holonym_placename)
end
-- Display handler for provinces of Bulgaria, Iran, Laos, North and South Korea, Thailand, Turkey and Vietnam. Recognized
-- provinces are displayed as e.g. "[[Gyeonggi]] Province" or "[[Antalya]] Province". Others are displayed as-is.
local function province_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if
m_locations.bulgaria_provinces[unlinked_placename .. "Province, Bulgaria"] or
m_locations.iran_provinces[unlinked_placename .. " Province, Iran"] or
m_locations.laos_provinces[unlinked_placename .. " Province, Laos"] or
m_locations.north_korea_provinces[unlinked_placename .. " Province, North Korea"] or
m_locations.south_korea_provinces[unlinked_placename .. " Province, South Korea"] or
m_locations.thailand_provinces[unlinked_placename .. " Province, Thailand"] or
m_locations.turkey_provinces[unlinked_placename .. " Province, Turkey"] or
m_locations.vietnam_provinces[unlinked_placename .. " Province, Vietnam"] then
return suffix_display_handler("Province", holonym_placename)
end
return holonym_placename
end
-- Display handler for Nigerian states. Nigerian states are display as "[[Kano]] State". Others are displayed as-is.
local function state_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.nigeria_states[unlinked_placename .. " State, Nigeria"] then
return suffix_display_handler("State", holonym_placename)
end
return holonym_placename
end
-- Display handler for voivodeships. Display as e.g. [[Subcarpathian Voivodeship]].
local function voivodesip_display_handler(holonym_placetype, holonym_placename)
return suffix_display_handler("Voivodeship", holonym_placename, nil, "include_suffix_in_link")
end
------------------------------------------------------------------------------------------
-- Placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
Main placetype data structure. This specifies, for each canonicalized placetype, various properties. The keys are
placetypes (in the singular, except for category-only placetypes, which are plural and followed by `!`), and the value
is a table of properties. The `"*"` key is special and is used for adding "generic" categories of the form
`Places in ``location`` `; it runs for all entry placetypes. Keys in the form of plural placetypes followed by `!` are
used only in [[Module:category tree/topic cat/data/Places]] for specifying the properties of categories containing the
specified placetype, esp. bare categories like [[:Category:States and territories]] (rather than qualified categories
like [[:Category:States and territories of Australia]]).
Keys under the value table for a given placetype of are two types: ''property keys'' (which specify the value of
specific properties) and ''categorization keys'' (which tell how to categorize certain sorts of holonyms if the
placetype in question occurs as an entry placetype). Categorization keys are either the special value `default` or are
wildcard strings with a slash in them, such as `"country/*"`. Note that only wildcard strings are currently allowed
directly in the placetype data; everything else is handled through category handlers, either per-placetype or special
(such as `political_division_cat_handler`). The algorithm for how category keys and handlers are used to generate
categories is described at the top of [[Module:place]].
There are several recognized property keys, of various types:
1. The following link-related property keys are recognized:
* `link`: '''Required''' except in category-only placetypes ending in `!`. Describes how to link and display the
placetype in the formatted description when occurring as an entry placetype. Also used for formatting pluralized
placetypes (which may occur in entry placetypes, esp. new-format ones, such as `two <<islands>>`) and may occur in
categories). The possible values are:
*# `true`: Link to the same-named Wiktionary entry. This creates a raw link, e.g. `<nowiki>[[city]]</nowiki>`, which is
converted to an English-specific link by JavaScript postprocessing. If the placetype is plural, this creates a
two-part raw link e.g. `<nowiki>[[city|cities]]</nowiki>`.
*# `"w"`: Link to the same-named Wikipedia entry. This creates a two-part link, e.g.
`<nowiki>[[w:census town|census town]]</nowiki>`, or `<nowiki>[[w:census town|census towns]]</nowiki>` if the
placetype is given plural.
*# `"+..."`: Create a two-part link to the entry following the `+` sign. For example, if `cercle` specifies
`"+w:cercles of Mali"`, a two-part link `<nowiki>[[w:cercles of Mali|cercle]]</nowiki>` will be generated, or
`<nowiki>[[w:cercles of Mali|cercles]]</nowiki>` if plural `cercles` is specified.
*# `"separately"`: Link each word separately. For example, if `administrative territory` specifies `"separately"`, it
will be linked as `<nowiki>[[administrative]] [[territory]]</nowiki>`, or as
`<nowiki>[[administrative]] [[territory|territories]]</nowiki>` if plural `administrative territories` is given.
*# another string: Use that string directly. If the placetype is plural, `pluralize()` in [[Module:en-utilities]] is
called on the string, which will correctly pluralize most strings, including those with links in them. (If there
are multiple links, the display form of the last link is pluralized.)
*# `false`: This placetype is not allowed as an entry placetype. An error will be thrown if this placetype is given as
an entry placetype. This is specified for internal-use placetypes, especially placetypes used in conjunction with
the qualifiers `former`, `ancient`, `historical` and such.
* `plural_link`: If specified and the placetype is plural, use the value in place of generating a pluralized version of
the link spec in `link`. Most commonly, this is either a string with links in it (which is used directly) or the
value `false`, indicating that the placetype cannot occur plural. (This is used for example by `caplc`, which displays
as `<nowiki>[[capital]] and [[large]]st [[city]]</nowiki>`, where a plural version doesn't make sense.) Generally if
this is specified, `plural` also needs to be specified to give a special placetype plural; this situation occurs
especially with multiword placetypes where something other than the last word is pluralized. An example is
`town with bystatus`, whose plural is `towns with bystatus`, which needs to be explicitly given. This example uses
`link = <nowiki>"[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>` ({{m|nb|bystatus}}) is a Norwegian
Bokmål word, and template calls aren't currently permitted in link strings), along with
`plural_link = <nowiki>"[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>`.
* `category_link`: Spec indicating how to display the placetype when occurring in category descriptions. Defaults to
the value of `link`, and in turn is overridden by more specific `category_link_*` keys; see below. Category-only
placetypes (which are plural and end in `!`) usually use `category_link` in preference to `link`. The value of
`category_link` can be any of the types of specs given above, but most commonly is a plural string with links in it,
spelling out the description; in this case it is used directly. When both `category_link` and `link` are given, the
value in `category_link` is typically longer and more descriptive. For example, `polity` uses `link = true`, which
just generates a link `<nowiki>[[polity]]</nowiki>` or plural `<nowiki>[[polity|polities]]</nowiki>`, but specifies a
separate `category_link = <nowiki>"[[independent]] or [[semi-]][[independent]] [[polity|polities]]"</nowiki>`, which
clarifies in the category description what a polity is.
* `category_link_top_level`: Spec indicating how to display top-level (bare/unqualified) categories, i.e. categories
where the placetype is not followed by `in ``location`` ` or `of ``location`` `. If given, this overrides
`category_link` for this type of category.
* `category_link_before_noncity`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` does not refer to a city. If given, this overrides
`category_link` for this type of category.
* `category_link_before_city`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` refer to a city. If given, this overrides `category_link` for
this type of category. An example where this is given is `neighborhood`, which uses the following specs:<ol>
<li>`link = true`</li>
<li>`category_link = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]"</nowiki>`</li>
<li>`category_link_before_city = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions"</nowiki>`</li>
</ol> This has the effect of making the entry placetype `neighborhood` display as just
`<nowiki>[[neighborhood]]</nowiki>`, while e.g. a category like `Neighborhoods of Chicago` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[Chicago]], ...</nowiki>` and a category like
`Neighborhoods in Illinois, USA` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]] in [[Illinois]], ...</nowiki>`.
* `disallow_in_entries`: If specified, this placetype cannot occur as an entry placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
* `disallow_in_holonyms`: If specified, this placetype cannot occur as a holonym placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
2. There is currently one fallback-related property key recognized:
* `fallback`: If specified, its value is a placetype which will be used for categorization purposes if no categories
get added using the placetype itself. As an example, `branch` sets a fallback of `river` but also sets
`preposition = "of"`, meaning that {{tl|place|en|branch|riv/Mississippi}} displays as `a branch of the Mississippi`
(whereas `river` itself uses the preposition `in`), but otherwise categorizes the same as `river`. A more complex
example is `area`, which sets a fallback of `geographic and cultural area` and also sets a category handler that
checks for cities or city-like entities (e.g. boroughs) occurring as holonyms and categorizes the toponym under
[[:Category:Neighborhoods of CITY]] (for recognized cities) or otherwise [[:Category:Neighborhoods of POLDIV]] (for
the nearest containing recognized location). In addition, `area` is set as a political division of Kuwait, meaning if
`c/Kuwait` occurs as holonym, the toponym is categorized under [[:Category:Areas of Kuwait]]. If none of these
categories trigger, the fallback of `geographic and cultural area` will take effect, and the toponym will be
categorized as e.g. [[:Category:Geographic and cultural areas of England]].
3. There is currently one property to control irregular plurals of placetypes:
* `plural`: If specified, its value is the plural of the placetype. Otherwise, the default pluralization algorithm in
[[Module:en-utilities]] applies (which correctly pluralizes most words, including those ending in `-y`, `-ch`, `-sh`,
`-x`, etc.). The value of `plural` is also used when converting a pluralized placetype into its singular equivalent;
for example, since the placetype `kibbutz` has `plural = "kibbutzim"`, the placetype `kibbutzim` will be recognized
as a plural and singularized to `kibbutz`. For this reason, it's occasionally necessary to specify a `plural` value
even when the default pluralization algorithm works correctly, if the default singularization algorithm won't
correctly reverse the pluralization (as with `pass` and other terms ending in `-ss`).
4. The following property keys relate to generating categories for entry placetypes and specifying the parents of those
categories:
* `class`: The general class of placetype. This is used for various purposes: (a) to categorize placetypes preceded by
a qualifier such as `former`, `ancient`, `medieval` or `historical` (note that these placetypes are not all treated
alike); (b) to determine the parent category of bare placetype categories (e.g. [[:Category:Villages]] for placetype
`village`); (c) to determine whether to add a parent category `political divisions of specific countries` to
qualified placetype categories (e.g. [[:Category:Villages in Mali]]). The possible values are:
*# `polity`: a more-or-less sovereign/independent polity, such as a country, kingdom or empire.
*# `subpolity`: a non-sovereign division of a polity, above the level of an individual settlement.
*# `settlement`: a city or smaller equivalent, such as a village. This also includes administrative divisions of a
settlement, such as wards and barangays.
*# `non-admin settlement`: similar to a settlement but without administrative or political significance, such as an
unincorporated community, farm or neighborhood.
*# `capital`: a settlement that is a capital. A former capital is generally still in existence, just not the capital
any more.
*# `natural feature`: any non-man-made feature, such as a lake, mountain, island, ocean, etc.
*# `man-made structure`: a man-made feature below the level of a neighborhood, such as a house, airport, university,
metro station, park or the like.
*# `geographic region`: a geographic or cultural region or area that has no administrative significance. These may vary
greatly in size but typically have some sort of cultural significance (possibly historical). The `former`, `ancient`,
etc. qualifier has no effect on the category of these placetypes.
*# `generic place`: a place that isn't further qualified into any specific subtype.
* `former_type`: The class of placetype used for categorizing placetypes preceded by a qualifier such as `former`,
`ancient`, `medieval` or `historical`. The possible values are the same as for `class` but with the addition of
`dependent territory` (for colonies, protectorates and the like) and `!` (ignore the historical/former/ancient/etc.
qualifier; used e.g. with `fictional location` and `mythological location`). If not specified, the value of `class`
is used. When a qualifier such as `former`, `ancient`, `medieval` or `historical` is encountered (specifically, those
in `former_qualifiers`), it is mapped using `former_qualifiers` to the appropriate internal qualifier or qualifiers
(one or both of `ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
qualifiers), which is prepended to the value of `former_type` or `class` to form a placetype whose properties are
looked up to determine how to categorize the toponym in question. For example, if `medieval village` is given, we map
`medieval` to `ANCIENT` and `FORMER`, and `village` to its `class` of `settlement`, and enter the placetypes
`ANCIENT settlement` and `FORMER settlement` (in that order) into the list of equivalent placetypes returned by
`get_placetype_equivs`. In this case, there is an entry in `placetype_data` for `ANCIENT settlement`, so its default
category spec `Ancient settlements` is used as the category. If on the other hand `medieval kingdom` is given, where
`kingdom` has a `class` value `polity`, we first look up `ANCIENT polity`, see there is no entry in `placetype_data`
for it, and then look up `FORMER polity`, which exists and has a default category spec `Former polities`, which is
used as the category. Note that if the placetype following the "former" qualifier is recognized in `placetype_data`
but has no `former_type` or `class` and no fallback with a `former_type` or `class` specified, it is an internal
error; but if the placetype isn't recognized (e.g. something like `former greenhouse` is specified and we don't have
an entry for `greenhouse`), we just track the occurrence and end up not categorizing.
* `bare_category_parent`: This specifies the first parent category of a bare placetype category named according to the
placetype in question (e.g. [[:Category:Atolls]] for placetype `atoll`, or [[:Category:Named buildings]] for
placetype `named buildings!`). If not specified, the first parent category is determined by the value of `class`,
using the mapping `class_to_bare_category_parent` in [[Module:category tree/topic cat/data/Places]].
* `addl_bare_category_parents`: Extra parent categories to add a bare placetype category to (see `bare_category_parent`
just above).
* `bare_category_breadcrumb`: Breadcrumb for bare placetype categories. Also used as the sort key of
`bare_category_parent` if it is a string.
* `inherently_former`: If specified and the given placetype is used as an entry placetype, act as if `former` or
`ancient` (depending on the value of `inherently_former`) were prefixed to the placetype. This is for placetypes that
always refer to no-longer-existing entities, such as `satrapy` and `treaty port`. The value of `inherently_former` is
a list of internal qualifiers (one or more of `ANCIENT` and/or `FORMER`), just as for `former_qualifiers`, and the
implementation is the same.
* `cat_handler`: Handler used to generate the categories to add a given toponym to, if its entry placetype is the
placetype in question. Generally the `cat_handler` function checks the holonyms specified in order to determine which
category or categories to generate. For example, `district_neighborhood_cat_handler` handles placetypes `district`,
`neighborhood`, `subdivision`, `suburb` and the like, and either adds the toponym to a category like
`Neighborhoods of ``city`` ` (if a recognized city is given as a holonym), or otherwise a category like
`Neighborhoods in ``location`` ` (for the first recognized non-city location given as a holonym, if an unrecognized
city or city-like entity is given before the recognized non-city). The algorithm that runs the category handlers
iterates over holonyms from left to right, running the `cat_handler` function on each holonym in turn until one or
more categories are returned; see below for more specifics. (Note that countries for which e.g. a `district` is a
political division do not get the corresponding category added by the `district_neighborhood_cat_handler` function but
by `political_division_cat_handler`.) `cat_handler` functions are called with one argument, `data`, describing the
resolved entry placetype (i.e. after resolving placetype aliases and fallbacks) and the holonym being processed. The
return value should be a list of category specs (categories minus the langcode prefix, with `+++` standing for the
holonym key, or the value `true`, which stands for ` ``Placetypes`` in/of ``Holonym`` `, i.e. the pluralized placetype
with the appropriate preposition as specified in `placetype_data`). `data` contains the following fields:
** `entry_placetype`: the resolved entry placetype for the entry placetype being processed (i.e. it will always have an
entry in `placetype_data` but may not be the original placetype given by the user);
** `holonym_placetype` and `holonym_placename`: the holonym placetype and placename being processed;
** `holonym_index`: the index of the holonym being processed, or {nil} if we're handling an overriding holonym (FIXME:
we will change the overriding holonym algorithm so there will be an index even when processing overriding holonyms);
** `place_desc`: a full description of the {{tl|place}} call, as specified at the top of [[Module:place]];
** `from_demonym`: If set, we are called from [[Module:demonym]], triggered by {{tl|demonym-adj}} or
{{tl|demonym-noun}}, instead of being triggered by {{tl|place}}.
* `has_neighborhoods`: If `true`, the specified placetype is city-like. This is used in the
`district_neighborhood_cat_handler` to determine whether to add a category such as `Neighborhoods in ``location`` `;
see the section just above on `cat_handler`.
5. The following preposition-related property keys are recognized:
* `preposition`: The preposition used after this placetype when it occurs as an entry placetype. Defaults to `"in"`.
* `generic_before_non_cities`: If specified, the appropriate category description handler in
[[Module:category tree/topic cat/data/Places]] will recognize categories of the form
` ``Placetype`` in/of ``location`` ` for the specified placetype and preposition, if ``location`` is a non-city. This
is used to generate descriptions for categories added by category handlers and by explicit category specs in the
placetype data. All placetypes that specify `generic_before_non_cities` or `generic_before_cities` *MUST* also specify
a value for `class` so that the category tree code can determine whether it's a political or non-political division.
* `generic_before_cities`: Like `generic_before_non_cities` but for locations referring to cities.
6. The following property keys control the auto-addition of affixes when formatting holonyms of a particular placetype:
* `affix_type`: If specified, add the placetype as an affix before or after holonyms of this placetype. Possible values
are:
*# `"pref"` (the holonym will display as `(the) placetype of Holonym`, where `the` appears when the holonym directly
follows an entry placetype);
*# `"Pref"` (same as `"pref"` but the placetype is capitalized; each word is capitalized if there are multiple);
*# `"suf"` (the holonym will display as `Holonym placetype`);
*# `"Suf"` (the holonym will display as `Holonym Placetype`, i.e. same as `"suf"` but the placetype is capitalized).
* `suffix`: String to use in place of the placetype itself when the placetype is displayed as a suffix after a holonym.
Note that `suffix` can be used independently of `affix_type` because the user can also request a suffix explicitly
using a syntax like `adr:suf/Occitania`, which will display as `Occitania region` because the placetype
`administrative region` specifies `suffix = "region"`.
* `prefix`: Like `suffix` but for use when the placetype is displayed as a prefix before the holonym.
* `affix`: Like `suffix` and `prefix` but for use when the placetype is displayed as an affix either before or after the
holonym. If both `suffix` or `prefix` and `affix` are given for a single placetype, `suffix` or `prefix` take
precedence.
* `no_affix_strings`: String or list of strings that, if they occur in the holonym, suppress the addition of any affix
requested using `affix_type`. Defaults to the placetype itself. For example, `autonomous okrug` specifies
`affix_type = "Suf"` so that `aokr/Nenets` displays as `Nenets Autonomous Okrug`, but also specifies
`no_affix_strings = "okrug"` so that `aokr/Nenets Okrug` or `aokr/Nenets Autonomous Okrug` displays as specified,
without a redundant `Autonomous Okrug` added. Matching is case-insensitive but whole-word.
* `display_handler`: A function of two arguments, `holonym_placetype` and `holonym_placename` (specifying a holonym).
Its return value is a string specifying the display form of the holonym.
7. The following property keys control the indefinite and definite articles used before entry placetypes and/or holonyms
of the specified placetype.
* `entry_placetype_use_the`: Use `"the"` before this placetype when it occurs as an entry placetype.
* `entry_placetype_indefinite_article`: Indefinite article used before this placetype when it occurs as an entry
placetype (usually `"a"`, specifically for placetypes beginning with u- that don't take the indefinite article
`"an"`). Defaults to the appropriate indefinite article (`"a"` or `"an"` depending on whether the placetype begins
with a vowel). Overridden by `entry_placetype_use_the`, and unlike for most properties, does not apply to equivalent
placetypes (i.e. fallbacks or those formed by removing a qualifier from the beginning); only to the exact placetype
specified.
* `holonym_use_the`: Use `"the"` before holonyms of this placetype.
'''NOTE:'''
# The `link` property must be specified on all placetypes, except those ending in `!` (category-only placetypes), which
must have either `link` or `category_link` specified.
# Either the `class` or `former_type` property must be specified on all placetypes not ending in `!` that do not have a
fallback (if a placetype has a fallback and omits the `class` and `former_type` properties, they are taken from the
fallback). An internal error will result if a placetype has no `class` or `former_type` property derivable either
directly or through a fallback, if an attempt is made to categorize a former/ancient/historical/etc. entity of this
placetype.
# It is possible to have multiple levels of fallback (e.g. `frazione` falls back to `hamlet`, which falls back
to `village`). Fallback loops will cause an internal error. All placetypes specified as fallbacks must exist in
`placetype_data` or an internal error occurs.
]==]
export.placetype_data = {
--[=[
If you need to sort the following, do this (using Vim):
1. Make sure all full-line comments are within the { ... } table, or are moved after and on the same line as single-line
entries.
2. Make sure the table uses tabs everywhere for indent, and not spaces.
3. Mark the top of the table with `ma`, go to the bottom and execute the following two lines in sequence:
:'a,.s/\n/\\n/g
:s/\\n\(\t\[\)/\r\1/g
The first command converts every newline to a literal `\n` sequence, so the whole thing becomes a single line, while
the second command restores the newlines before the beginning of each entry. The effect is to convert all entries to
a single line while not losing any information. (Potentially a negative lookahead could be used to do it all in one
command.)
4. Execute the following to sort:
:'a,.!perl -pe 's/^(\t\[")(.*?)(".*)$/$2 @@@ $1$2$3/' | sort -f | perl -pe 's/.*? @@@ //'
Note that a simple `sort -f` (where `-f` means case-insensitive) would almost work, but it would sort "hill station"
before "hill" and "county borough" before "county" because the space after e.g. "hill station" sorts before the
quotation mark after e.g. "hill". The above command deals with this by extracting the key, prepending it followed by
` @@@ `, sorting, and then removing key (the classic decorate-sort-undecorate pattern).
5. Put the table back to multi-line format by marking the top of the table with `ma`, going to the bottom and executing
:'a,.s/\\n/\r/g
Note that for some reason, in order to get a match a newline in the left side of a replacement, you must use \n, but
to insert a newline in the right sode of a replacement you must use \r.
]=]
["*"] = {
link = false,
cat_handler = generic_place_cat_handler,
},
["administrative atoll"] = {
-- Maldives
link = "+w:administrative divisions of the Maldives",
preposition = "of",
class = "subpolity",
},
["administrative capital"] = {
link = "w",
fallback = "capital city",
},
["administrative center"] = {
link = "w",
fallback = "non-city capital",
},
["administrative centre"] = {
link = "w",
fallback = "administrative center",
},
["administrative county"] = {
link = "w",
fallback = "county",
},
["administrative district"] = {
link = "w",
fallback = "district",
},
["administrative headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["administrative region"] = {
link = true,
preposition = "of",
suffix = "region", -- but prefix is still "administrative region (of)"
fallback = "region",
class = "subpolity",
},
["administrative seat"] = {
link = "w",
fallback = "administrative centre",
},
["administrative territory"] = {
link = "separately",
preposition = "of",
suffix = "territory", -- but prefix is still "administrative territory (of)"
fallback = "territory",
class = "subpolity",
},
["administrative unit"] = {
-- Grrr, it's difficult to generalize about "administrative units". In Albania, "administrative unit" is an
-- official term for a city-level division of municipalities; Wikipedia renders it using the more practical term
-- "commune". In Pakistan, "administrative unit" is a collective term used to refer to all the different types
-- of first-level divisions (four provinces, one federal territory, and two "disputed territories", i.e. Azad
-- Kashmir and Gilgit-Balistan, that are variously described). For this reason, we set no fallback, but we need
-- to include this so that it can be used as a placetype for Albania, categorizing as communes.
link = "w",
class = "subpolity",
},
["administrative village"] = {
link = "w",
preposition = "of",
has_neighborhoods = true,
class = "settlement",
},
["aimag"] = {
-- used in Mongolia, Russia and China (Inner Mongolia); in Mongolia, equivalent to a province;
-- in China, equivalent to a prefecture (below a province); in Russia, equivalent to a municipal district.
link = "w",
fallback = "prefecture",
},
["airport"] = {
link = true,
class = "man-made structure",
default = {true},
},
["alliance"] = {
link = true,
fallback = "confederation",
},
["archipelago"] = {
link = true,
fallback = "island",
},
["area"] = {
link = true,
preposition = "of",
fallback = "geographic and cultural area",
-- Areas can either be administrative divisions (specifically of Kuwait) or geographic areas. Assume the former
-- when categorizing 'Areas' but the latter when handling e.g. 'historical area'.
class = "subpolity",
former_type = "geographic region",
cat_handler = district_neighborhood_cat_handler,
},
["arm"] = {
link = true,
preposition = "of",
class = "natural feature",
default = {"Seas"},
},
["arrondissement"] = {
link = true,
preposition = "of",
-- FIXME!!! Grrrrr!!! In some countries, arrondissements are divisions of cities; in others, they are divisions
-- of departments or provinces. Need to conditionalize on the country for both of the following.
class = "subpolity",
has_neighborhoods = true,
},
["associated province"] = {
link = "separately",
fallback = "province",
},
["atoll"] = {
-- FIXME! Atolls are administrative divisions of the Maldives but natural features elsewhere. Need to
-- conditionalize `class` on the country. See also `administrative atoll`.
link = true,
class = "natural feature",
bare_category_parent = "islands",
default = {true},
},
["autonomous city"] = {
link = "w",
preposition = "of",
fallback = "city",
has_neighborhoods = true,
},
["autonomous community"] = {
-- Spain; refers to regional entities, not village-like entities, as might be expected from "community"
link = true,
preposition = "of",
class = "subpolity",
},
["autonomous island"] = {
-- Comoros; seems like an administrative atoll of the Maldives.
link = "+w:autonomous islands of Comoros",
preposition = "of",
class = "subpolity",
},
["autonomous oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "oblast",
class = "subpolity",
},
["autonomous okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "okrug",
class = "subpolity",
},
["autonomous prefecture"] = {
link = true,
fallback = "prefecture",
},
["autonomous province"] = {
link = "w",
fallback = "province",
},
["autonomous region"] = {
link = "w",
preposition = "of",
fallback = "administrative region",
-- "administrative region" sets an affix of "region" but we want to display as "Tibet Autonomous Region"
-- if the user writes 'ar:Suf/Tibet'.
affix = "autonomous region",
},
["autonomous republic"] = {
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territorial unit"] = {
-- Moldova; only two of them, one for Gagauzia and one for Transnistria.
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territory"] = {
link = "w",
fallback = "dependent territory",
},
["bailiwick"] = {
-- Jersey, etc.
link = true,
fallback = "polity",
},
["barangay"] = {
-- Philippines
link = true,
class = "settlement",
-- Barangays are formal administrative divisions of a city rather than informal neighborhoods, but can use
-- some of the properties of a neighborhood.
fallback = "neighborhood",
},
["barrio"] = {
-- Spanish-speaking countries; Philippines
link = true,
-- FIXME: Not completely correct, in some countries barrios are formal administrative divisions of a city.
-- `class` will need to conditionalize on the country to be completely correct.
fallback = "neighborhood",
},
["basin"] = {
link = true,
fallback = "lake",
},
["bay"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["beach"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"water"},
default = {true},
},
["beach resort"] = {
link = "w",
fallback = "resort town",
},
["bishopric"] = {
link = true,
fallback = "polity",
},
["bodies of water!"] = {
-- FIXME: This is (maybe?) a type category not a name category. There should be an option for this. We need to
-- straighten out the type vs. name vs. related-to issue.
category_link = "[[body of water|bodies of water]]",
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems", "water"},
},
["borough"] = {
link = true,
preposition = "of",
display_handler = borough_display_handler,
has_neighborhoods = true,
-- "former borough" could be a former settlement or a former part of a city but seems more likely to
-- be a former subpolity, particularly in England. FIXME, we really need a handler to take care of this
-- properly.
class = "subpolity",
-- Grr, some boroughs are city-like but some (e.g. in Britain) may be larger.
},
["borough seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["branch"] = {
link = true,
preposition = "of",
fallback = "river",
},
["bridge"] = {
link = true,
class = "man-made structure",
default = {"Named bridges"},
},
["building"] = {
link = true,
class = "man-made structure",
default = {"Named buildings"},
},
["built-up area"] = {
link = "w",
fallback = "area",
},
["burgh"] = {
link = true,
fallback = "borough",
},
["business park"] = {
link = true,
fallback = "park",
},
["caliphate"] = {
link = true,
fallback = "polity",
},
["canton"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["cape"] = {
link = true,
fallback = "headland",
},
["capital"] = {
link = true,
fallback = "capital city",
},
["capital city"] = {
link = true,
category_link = "[[capital city|capital cities]]: the [[seat of government|seats of government]] for a country or [[political]] [[division]] of a country",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
bare_category_parent = "cities",
cat_handler = capital_city_cat_handler,
default = {true},
-- The following is necessary so that e.g. [[Melbourne]] defined as {{place|en|capital city|s/Victoria|c/Australia}}
-- gets categorized in the bare category [[Category:en:Melbourne]]; otherwise placetype 'capital city' wouldn't
-- match against the placetype 'city' of Melbourne.
fallback = "city",
},
["caplc"] = {
link = "[[capital]] and [[large]]st [[city]]",
plural_link = false,
fallback = "capital city",
},
["captaincy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["caravan city"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"ANCIENT", "FORMER"},
},
["castle"] = {
link = true,
fallback = "building",
},
["cathedral city"] = {
link = true,
fallback = "city",
},
["cattle station"] = {
-- Australia
link = true,
fallback = "farm",
},
["census area"] = {
link = true,
affix_type = "Suf",
has_neighborhoods = true,
class = "non-admin settlement",
},
["census-designated place"] = {
-- United States
link = true,
class = "non-admin settlement",
},
["census division"] = {
-- Canada
link = "w",
preposition = "of",
class = "subpolity",
},
["census town"] = {
link = "w",
fallback = "town",
},
["central business district"] = {
link = true,
fallback = "neighborhood",
},
["cercle"] = {
-- Mali
link = "+w:cercles of Mali",
preposition = "of",
class = "subpolity",
},
["ceremonial county"] = {
link = true,
fallback = "county",
},
["chain of islands"] = {
link = "[[chain]] of [[island]]s",
plural = "chains of islands",
plural_link = "[[chain]]s of [[island]]s",
fallback = "island",
},
["channel"] = {
link = true,
fallback = "strait",
},
["charter community"] = {
-- Northwest Territories, Canada
link = "w",
fallback = "village",
},
["city"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["city-state"] = {
link = true,
category_link = "[[sovereign]] [[microstate]]s consisting of a single [[city]] and [[w:dependent territory|dependent territories]]",
has_neighborhoods = true,
class = "settlement",
["continent/*"] = {"City-states", "Cities in +++", "Countries in +++", "National capitals"},
default = {"City-states", "Cities", "Countries", "National capitals"},
},
["civil parish"] = {
-- Mostly England; similar to municipalities
link = true,
preposition = "of",
affix_type = "suf",
has_neighborhoods = true,
class = "subpolity",
},
["claimed political division"] = {
link = "[[claim]]ed [[political]] [[division]]",
class = "subpolity",
default = {true},
},
["co-capital"] = {
link = "[[co-]][[capital]]",
fallback = "capital city",
},
["coal city"] = {
link = "+w:coal town",
fallback = "city",
},
["coal town"] = {
link = "w",
fallback = "town",
},
["collectivity"] = {
link = "w",
preposition = "of",
-- No default; these are weird one-off governmental divisions in France (esp. for overseas collectivities)
class = "subpolity",
},
["colony"] = {
link = true,
fallback = "dependent territory",
},
["comarca"] = {
-- per Wikipedia: traditional region or local administrative division found in Portugal, Spain, and some of
-- their former colonies, like Brazil, Nicaragua, and Panama. In the Valencian Community, for example, it
-- sits between municipalities and provinces, something like a county or district.
link = true,
preposition = "of",
class = "subpolity",
},
["commandery"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["commonwealth"] = {
link = true,
preposition = "of",
-- No default; applies specifically to Puerto Rico
class = "subpolity",
},
["commune"] = {
link = true,
fallback = "municipality",
},
["community"] = {
link = true,
category_link = "[[community|communities]] of all sizes",
fallback = "village",
},
["community development block"] = {
-- in India; appears to be similar to a rural municipality; groups several villages, unclear if there will be
-- neighborhoods so I'm not setting `has_neighborhoods` for now
link = "w",
affix_type = "suf",
no_affix_strings = "block",
class = "subpolity",
},
["comune"] = {
-- Italy, Switzerland
link = true,
fallback = "municipality",
},
["condominium"] = {
link = true,
fallback = "polity",
},
["confederacy"] = {
link = true,
fallback = "confederation",
},
["confederation"] = {
link = true,
fallback = "polity",
},
["constituency"] = {
-- currently we have them as political divisions of Namibia but many countries have them
link = true,
preposition = "of",
class = "subpolity",
},
["constituent country"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["constituent part"] = {
link = "separately",
preposition = "of",
class = "subpolity",
},
["constituent republic"] = {
-- Of Russia, Yugoslavia, etc.
link = "separately",
preposition = "of",
class = "subpolity",
},
["counties and county-level cities!"] = {
-- This is used when grouping counties and county-level cities under prefecture-level cities in China.
category_link = "[[county|counties]] and [[county-level city|county-level cities]]",
class = "subpolity",
},
["continent"] = {
link = true,
category_link = false, -- can't occur as a bare category
class = "natural feature",
default = {"Continents and continental regions"},
},
["continental region"] = {
link = "separately",
category_link = false, -- can't occur as a bare category
class = "geographic region",
fallback = "continent",
},
["continents and continental regions!"] = {
category_link = "[[continent]]s and [[continent]]-[[level]] [[region]]s (e.g. [[Polynesia]])",
class = "geographic region",
},
["council area"] = {
link = true,
-- in Scotland; similar to a county
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["country"] = {
link = true,
class = "polity",
["continent/*"] = {true, "Countries"},
default = {true},
},
["country-like entities!"] = {
category_link = "[[polity|polities]] not normally considered [[country|countries]] but treated similarly for categorization purposes; typically, [[unrecognized]] [[de-facto]] countries or [[w:dependent territory|dependent territories]]",
class = "polity",
},
["county"] = {
link = true,
preposition = "of",
display_handler = county_display_handler,
class = "subpolity",
},
["county borough"] = {
link = true,
-- in Wales; similar to a county
preposition = "of",
affix_type = "suf",
fallback = "borough",
class = "subpolity",
},
["county seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["county town"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
fallback = "town",
has_neighborhoods = true,
class = "capital",
},
["county-administered city"] = {
-- In Taiwan, per Wikipedia similar to a Taiwanese township or district, which is a small city.
-- NOT anything like a "county-level city" in PR China, which is a county masquerading as a city.
link = "w",
fallback = "city",
has_neighborhoods = true,
class = "settlement",
},
["county-controlled city"] = {
-- Taiwan
link = "w",
fallback = "county-administered city",
},
["county-level city"] = {
-- PR China
link = "w",
fallback = "prefecture-level city",
},
["crater lake"] = {
link = true,
fallback = "lake",
},
["creek"] = {
link = true,
fallback = "stream",
},
["Crown colony"] = {
link = "+crown colony",
fallback = "crown colony",
},
["crown colony"] = {
link = true,
fallback = "colony",
},
["Crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["cultural area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["cultural region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["delegation"] = {
-- Tunisia
link = "+w:delegations of Tunisia",
preposition = "of",
class = "subpolity",
},
["department"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["departmental capital"] = {
link = "separately",
fallback = "capital city",
},
["dependency"] = {
link = true,
fallback = "dependent territory",
},
["dependent territory"] = {
link = "w",
preposition = "of",
class = "subpolity",
former_type = "dependent territory",
bare_category_parent = "political divisions",
["country/*"] = {true},
default = {true},
},
["desert"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems"},
default = {true},
},
["deserted mediaeval village"] = {
link = "w",
fallback = "deserted medieval village",
},
["deserted medieval village"] = {
link = "w",
fallback = "ANCIENT settlement",
},
["direct-administered municipality"] = {
-- China
link = "+w:direct-administered municipalities of China",
fallback = "municipality",
},
["direct-controlled municipality"] = {
-- several countries
link = "w",
fallback = "municipality",
},
["distributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["district"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- Grrr! FIXME! Here is where we need handlers for `class`. Using similar logic to
-- district_neighborhood_cat_handler, we need to check if we're below or above a city to determine if the class
-- is "settlement" or "subpolity".
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
-- No default. Countries for which districts are political divisions will get entries.
},
["districts and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Portugal.
category_link = "[[district]]s and [[autonomous region]]s",
class = "subpolity",
},
["districts and autonomous territorial units!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Moldova.
category_link = "[[district]]s and [[w:autonomous territorial unit|autonomous territorial unit]]s",
class = "subpolity",
},
["district capital"] = {
link = "separately",
fallback = "capital city",
},
["district headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["district municipality"] = {
-- In Canada, a district municipality is equivalent to a rural municipality and won't have neighborhoods; in
-- South Africa, district municipalities group local municipalities and hence won't have neighborhoods.
link = "w",
preposition = "of",
affix_type = "suf",
no_affix_strings = {"district", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["division"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["division capital"] = {
link = "separately",
fallback = "capital city",
},
["dome"] = {
link = true,
fallback = "mountain",
},
["dormant volcano"] = {
link = true,
fallback = "volcano",
},
["duchy"] = {
link = true,
fallback = "polity",
},
["emirate"] = {
link = true,
preposition = "of",
-- FIXME: Can be subpolities (of the United Arab Emirates).
fallback = "polity",
},
["empire"] = {
link = true,
fallback = "polity",
},
["enclave"] = {
link = true,
preposition = "of",
-- Enclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["entity"] = {
-- Bosnia and Herzegovina
link = "+w:entities of Bosnia and Herzegovina",
preposition = "of",
class = "subpolity",
},
["escarpment"] = {
link = true,
fallback = "mountain",
},
["ethnographic region"] = {
-- used in Lithuania
link = "+w:ethnographic regions of Lithuania",
fallback = "geographic and cultural area",
},
["exclave"] = {
link = true,
preposition = "of",
-- exclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["external territory"] = {
link = "separately",
fallback = "dependent territory",
},
["farm"] = {
link = true,
class = "non-admin settlement",
default = {"Farms and ranches"},
},
["farms and ranches!"] = {
category_link = "[[farm]]s and [[ranch]]es",
class = "non-admin settlement",
},
["federal city"] = {
link = "w",
preposition = "of",
fallback = "city",
},
["federal district"] = {
link = true,
preposition = "of",
-- Might have neighborhoods as federal districts are often cities (e.g. Mexico City)
has_neighborhoods = true,
class = "settlement",
},
["federal subject"] = {
-- In Russia; a generic term for first-level administrative divisions (republics, oblasts, okrugs, krais,
-- autonomous okrugs and autonomous oblasts).
link = "w",
preposition = "of",
class = "subpolity",
},
["federal territory"] = {
link = "w",
fallback = "territory",
},
["fictional location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["First Nations reserve"] = {
-- Canada
link = "[[First Nations]] [[w:Indian reserve|reserve]]",
-- Wikipedia uses "Indian reserve"; presumably that is the legal term
fallback = "Indian reserve",
class = "subpolity",
},
["fjord"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["footpath"] = {
link = true,
fallback = "road",
},
["forest"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems", "forestry"},
default = {true},
},
["fort"] = {
link = true,
fallback = "building",
},
["fortress"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- fortresses -> fortresse, so put an entry here to ensure we singularize correctly.
plural = "fortresses",
fallback = "building",
},
["frazione"] = {
link = "w",
fallback = "hamlet",
},
["freeway"] = {
link = true,
fallback = "road",
},
["French prefecture"] = {
link = "[[w:prefectures in France|prefecture]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["geographic and cultural area"] = {
link = "+w:cultural area",
-- `generic_before_non_cities` is used when generating the category description of categories of the format
-- `Geographic and cultural areas of PLACE`. `preposition` is used when generating {{place}} description and
-- categories for any placetype that falls back to `geographic and cultural area`.
generic_before_non_cities = "of",
preposition = "of",
class = "geographic region",
bare_category_parent = "places",
["country/*"] = {true},
["constituent country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["geographic area"] = {
link = "+w:geographic region",
fallback = "geographic and cultural area",
},
["geographic region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geopolitical zone"] = {
-- Nigeria
link = true,
preposition = "of",
class = "subpolity",
},
["gewog"] = {
-- Bhutan
link = true,
preposition = "of",
class = "subpolity",
},
["ghost town"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
bare_category_parent = "former settlements",
cat_handler = city_type_cat_handler,
default = {true},
},
["glen"] = {
link = true,
fallback = "valley",
},
["governorate"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["greater administrative region"] = {
-- China (former division)
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["gromada"] = {
-- Poland (former division)
link = "w",
preposition = "of",
affix_type = "Pref",
class = "subpolity",
inherently_former = {"FORMER"},
},
["group of islands"] = {
link = "[[group]] of [[island]]s",
plural = "groups of islands",
plural_link = "[[group]]s of [[island]]s",
fallback = "island group",
},
["gulf"] = {
link = true,
preposition = "of",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["hamlet"] = {
link = true,
fallback = "village",
},
["harbor city"] = {
link = "separately",
fallback = "city",
},
["harbor town"] = {
link = "separately",
fallback = "town",
},
["harbour city"] = {
link = "separately",
fallback = "city",
},
["harbour town"] = {
link = "separately",
fallback = "town",
},
["headland"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["headquarters"] = {
link = "w",
fallback = "administrative centre",
},
["heath"] = {
link = true,
fallback = "moor",
},
["hemisphere"] = {
link = true,
entry_placetype_use_the = true,
fallback = "continental region",
},
["highway"] = {
link = true,
fallback = "road",
},
["hill"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["hill station"] = {
link = "w",
fallback = "town",
},
["hill town"] = {
link = "w",
fallback = "town",
},
["historic region"] = {
-- provided only for the link
link = "+w:historical region",
fallback = "FORMER geographic region",
},
["historical county"] = {
-- needed for historical counties of England/etc.
link = "+w:historic county",
fallback = "FORMER subpolity",
},
["historical region"] = {
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["home rule city"] = {
link = "w",
fallback = "city",
},
["home rule municipality"] = {
link = "w",
fallback = "municipality",
},
["hot spring"] = {
link = true,
fallback = "spring",
},
["house"] = {
link = true,
fallback = "building",
},
["housing estate"] = {
-- not the same as a housing project (i.e. public housing)
link = true,
-- not exactly the case but approximately
fallback = "neighborhood",
},
["hromada"] = {
-- Ukraine
link = "w",
disallow_in_entries = "Use placetype 'urban hromada', 'rural hromada' or 'settlement hromada' in place of bare 'hromada'",
disallow_in_holonyms = "Use placetype 'urban hromada'/'uhrom', 'rural hromada'/'rhrom' or 'settlement hromada'/'shrom' in place of bare 'hromada'",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["inactive volcano"] = {
link = "w",
fallback = "dormant volcano",
},
["independent city"] = {
link = true,
fallback = "city",
},
["independent town"] = {
link = "+independent city",
fallback = "town",
},
["Indian reservation"] = {
link = "w",
-- In the US. Also known as "Native American reservation" or "domestic dependent nation", and the reservations
-- themselves often use the term "nation" in their official name (e.g. the "Navajo Nation"). But Wikipedia puts
-- the article at [[w:Indian reservation]] and uses that term when describing e.g. what the Navajo Nation is,
-- so this must still be the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["Indian reserve"] = {
link = "w",
-- In Canada. "First Nations reserve" sounds more modern/PC but Wikipedia uses "Indian reserve"; presumably that
-- is still the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["inland sea"] = {
-- note, we also have 'inland' as a qualifier
link = true,
fallback = "sea",
},
["inner city area"] = {
link = "[[inner city]] [[area]]",
fallback = "neighborhood",
},
["island"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["island country"] = {
-- FIXME: The following should map to both 'island' and 'country'.
link = "w",
fallback = "country",
},
["island group"] = {
link = "separately",
fallback = "island",
},
["island municipality"] = {
link = "w",
fallback = "municipality",
},
["islet"] = {
link = "w",
fallback = "island",
},
["Israeli settlement"] = {
link = "w",
class = "settlement",
default = {true},
},
["judicial capital"] = {
link = "w",
fallback = "capital city",
},
["khanate"] = {
link = true,
fallback = "polity",
},
["kibbutz"] = {
link = true,
plural = "kibbutzim",
class = "non-admin settlement",
default = {true},
},
["kingdom"] = {
link = true,
fallback = "monarchy",
},
["krai"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["lake"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["landforms!"] = {
category_link = "[[landform]]s",
bare_category_parent = "places",
addl_bare_category_parents = {"Earth"},
},
["largest city"] = {
link = "[[large]]st [[city]]",
entry_placetype_use_the = true,
fallback = "city",
has_neighborhoods = true,
},
["league"] = {
link = true,
fallback = "confederation",
},
["legislative capital"] = {
link = "separately",
fallback = "capital city",
},
["library"] = {
link = true,
fallback = "building",
},
["lieutenancy area"] = {
-- used in the United Kingdom; per Wikipedia:
-- In England, lieutenancy areas are colloquially known as the ceremonial counties, although this phrase does
-- not appear in any legislation referring to them. The lieutenancy areas of Scotland are subdivisions of
-- Scotland that are more or less based on the counties of Scotland, making use of the major cities as separate
-- entities.[2] In Wales, the lieutenancy areas are known as the preserved counties of Wales and are based on
-- those used for lieutenancy and local government between 1974 and 1996. The lieutenancy areas of Northern
-- Ireland correspond to the six counties and two former county boroughs.[3]
link = "w",
fallback = "ceremonial county",
},
["local authority district"] = {
link = "w",
fallback = "local government district",
},
["local government area"] = {
-- Australia
link = "w",
preposition = "of",
class = "subpolity",
},
["local council"] = {
-- Malta; similar to municipalities
link = "+w:local councils of Malta",
preposition = "of",
fallback = "municipality",
},
["local government district"] = {
link = "w",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local government district with borough status"] = {
link = "[[w:local government district|local government district]] with [[w:borough status|borough status]]",
plural = "local government districts with borough status",
plural_link = "[[w:local government district|local government districts]] with [[w:borough status|borough status]]",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local urban district"] = {
link = "w",
fallback = "unincorporated community",
},
["locality"] = {
link = "+w:locality (settlement)",
-- not necessarily true, but usually is the case
fallback = "village",
},
["London borough"] = {
link = "w",
preposition = "of",
affix_type = "pref",
affix = "borough",
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["macroregion"] = {
link = true,
fallback = "region",
},
["man-made structures!"] = {
category_link = "[[w:geographical feature#Engineered constructs|man-made structures]] such as [[airport]]s, [[university|universities]] and [[metro station]]s",
bare_category_parent = "places",
},
["manor"] = {
-- FIXME: or is this more like a farm?
link = true,
fallback = "building",
},
["marginal sea"] = {
link = true,
preposition = "of",
fallback = "sea",
},
["market city"] = {
link = "+market town",
fallback = "city",
},
["market town"] = {
link = true,
fallback = "town",
},
["massif"] = {
link = true,
fallback = "mountain",
},
["megacity"] = {
link = true,
fallback = "city",
},
["metro station"] = {
link = true,
class = "man-made structure",
},
["metropolitan borough"] = {
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"borough", "city"},
fallback = "local government district",
has_neighborhoods = true,
},
["metropolitan city"] = {
-- These exist e.g. in Italy and are more like municipalities or even provinces than cities.
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"metropolitan", "city"},
class = "subpolity",
},
["metropolitan county"] = {
link = true,
fallback = "county",
},
["metropolitan municipality"] = {
-- In South Africa, metropolitan municipalities group local municipalities and are like districts, between
-- provinces and municipalities.
-- In Turkey, metropolitan municipalities are provinces-level.
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"metropolitan", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["microdistrict"] = {
-- residential complex in post-Soviet states
link = true,
fallback = "neighborhood",
},
["micronations!"] = {
-- FIXME, merge with microstate
category_link = "[[micronation]]s",
bare_category_parent = "countries",
},
["microstate"] = {
link = true,
fallback = "country",
},
["military base"] = {
link = "w",
class = "settlement", -- or "man-made structure"?
default = {true},
},
["minster town"] = {
-- England
link = "separately",
fallback = "town",
},
["monarchy"] = {
link = true,
fallback = "polity",
},
["moor"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems"},
default = {true},
},
["moorland"] = {
link = true,
fallback = "moor",
},
["motorway"] = {
link = true,
fallback = "road",
},
["mountain"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["mountain indigenous district"] = {
-- Taiwan
link = "+w:district (Taiwan)",
fallback = "district",
},
["mountain indigenous township"] = {
-- Taiwan
link = "+w:township (Taiwan)",
fallback = "township",
},
["mountain pass"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "mountain passes",
class = "natural feature",
addl_bare_category_parents = {"mountains"},
default = {true},
},
["mountain range"] = {
link = true,
fallback = "mountain",
},
["mountainous region"] = {
link = "separately",
fallback = "region",
},
["mukim"] = {
-- Malaysia, Brunei, Indonesia, Singapore
link = true,
preposition = "of",
class = "subpolity",
},
["municipal district"] = {
link = "w",
-- meaning varies depending on the country; for now, assume no neighborhoods.
-- FIXME: has_neighborhoods might have to be a function that looks at the containing holonyms.
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "municipality",
},
["municipality"] = {
link = true,
preposition = "of",
has_neighborhoods = true,
class = "subpolity",
},
["municipality with city status"] = {
link = "[[municipality]] with [[w:city status|city status]]",
plural = "municipalities with city status",
plural_link = "[[municipality|municipalities]] with [[w:city status|city status]]",
fallback = "municipality",
},
["museum"] = {
link = true,
fallback = "building",
},
["mythological location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["named bridges!"] = {
category_link = "notable [[bridge]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"bridges"},
},
["named buildings!"] = {
category_link = "notable [[house]]s, [[library|libraries]] and other [[building]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"buildings"},
},
["named roads!"] = {
category_link = "notable [[road]]s, [[highway]]s, [[trail]]s and similar linear structures",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"roads"},
},
["national capital"] = {
link = "w",
fallback = "capital city",
},
["national park"] = {
link = true,
fallback = "park",
},
["natural features!"] = {
category_link = "[[w:geographical feature#Natural features|natural features]] such as [[lake]]s, [[mountain]]s, [[island]]s and [[ocean]]s",
bare_category_parent = "places",
},
["neighborhood"] = {
-- The majority of the properties here apply to both `neighborhoods` and `neighbourhoods`; the choice of which
-- one to use is made by district_neighborhood_cat_handler() based on the value of `british_spelling` for the
-- location (city, political division, etc.) of the holonym that follows the word "neighbo(u)hoods" in the
-- category name. It does *NOT* depend on whether the {{place}} call uses "neighborhoods" or "neighbourhoods".
-- (In general it can't, because other things like "urban areas", "districts", "subdivisions" and the like also
-- categorize as neighbo(u)rhoods.)
link = true,
-- See below. These are used by category handlers in [[Module:category tree/topic cat/data/Places]].
generic_before_non_cities = "in",
generic_before_cities = "of",
-- The following text is suitable for the top-level description of a neighborhood as well as categories of the
-- form `Neighborhoods in POLDIV` e.g. `Neighborhoods in Illinois, USA` but not for categories of the form
-- `Neighborhoods of Chicago`, where we'd get "... and other subportions of [[city|cities]] of [[Chicago]]".
category_link = "[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighborhood]]s, [[district]]s and other subportions",
-- NOTE: This setting is needed for administrative divisions like barangays that fall back to `neighborhood`,
-- when set in [[Module:place/locations]] for a specific country (e.g. the Philippines). The above settings
-- for `generic_before_non_cities` and `generic_before_cities` are used by category handlers in
-- [[Module:category tree/topic cat/data/Places]] for `Neighborhoods in POLDIV` and `Neighborhoods of CITY`
-- categories. In fact, district_neighborhood_cat_handler() does not currently pay attention to them, but
-- generates "of" before cities and "in" before non-cities regardless. (FIXME: We should change that.)
preposition = "of",
class = "non-admin settlement",
cat_handler = district_neighborhood_cat_handler,
},
["neighbourhood"] = {
link = true,
category_link = "[[neighbourhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighbourhood]]s, [[district]]s and other subportions",
fallback = "neighborhood",
},
["new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
preposition = "in",
class = "subpolity", --?
},
["new town"] = {
link = true,
fallback = "town",
},
["non-city capital"] = {
link = "[[capital]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
cat_handler = function(data)
return capital_city_cat_handler(data, "non-city")
end,
-- FIXME, do we need the following?
default = {true},
},
["non-metropolitan county"] = {
link = "w",
fallback = "county",
},
["non-metropolitan district"] = {
link = "w",
fallback = "local government district",
},
["non-sovereign kingdom"] = {
-- especially in Africa and Asia
link = "+w:non-sovereign monarchy",
generic_before_non_cities = "in",
class = "subpolity",
["country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["non-sovereign monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["oblasts and autonomous republics!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Ukraine.
category_link = "[[oblast]]s and [[w:autonomous republic|autonomous republic]]s",
class = "subpolity",
},
["ocean"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"seas", "bodies of water"},
default = {true},
},
["okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["overseas collectivity"] = {
link = "w",
fallback = "collectivity",
},
["overseas department"] = {
link = "w",
fallback = "department",
},
["overseas territory"] = {
link = "w",
fallback = "dependent territory",
},
["parish"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["parish municipality"] = {
-- in Quebec, often similar to a rural village; the famous [[Saint-Louis-du-Ha! Ha!]] is one of them.
link = "+w:parish municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true,
},
["parish seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
class = "capital",
has_neighborhoods = true,
},
["park"] = {
link = true,
class = "man-made structure",
default = {true},
},
["pass"] = {
link = "+mountain pass",
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "passes",
fallback = "mountain pass",
},
["path"] = {
link = true,
fallback = "road",
},
["peak"] = {
link = true,
fallback = "mountain",
},
["peninsula"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["periphery"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["places!"] = {
generic_before_non_cities = "in",
generic_before_cities = "in",
class = "generic place",
category_link = "[[place]]s of all sorts",
-- `category_link_top_level` control the description used in the top-level [[Category:Places]] and
-- language-specific variants such as [[Category:en:Places]]. The actual text for a language-spefic variant is
-- "{{{langname}}} names of [[geographical]] [[place]]s of all sorts; [[toponym]]s." where the "names of"
-- portion is automatically generated by the appropriate handler in
-- [[Module:category tree/topic cat/data/Places]].
category_link_top_level = "[[geographical]] [[place]]s of all sorts; [[toponym]]s",
bare_category_parent = "names",
},
["planned community"] = {
-- Include this so we don't categorize 'planned community' into villages, as 'community' does.
link = true,
class = "settlement",
has_neighborhoods = true,
},
["plateau"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
-- FIXME: Should generate both "Plateaus" and the appropriate 'geographic and cultural area' category
},
["Polish colony"] = {
link = "[[w:colony (Poland)|colony]]",
affix_type = "suf",
affix = "colony",
fallback = "village",
has_neighborhoods = true,
},
["political divisions!"] = {
category_link = "[[political]] [[division]]s and [[subdivision]]s, such as [[state]]s, [[province]]s, [[county|counties]] or [[district]]s",
bare_category_parent = "places",
},
["polity"] = {
link = true,
category_link = "[[independent]] or [[semi-]][[independent]] [[polity|polities]]",
class = "polity",
bare_category_parent = "places",
default = {true},
},
["populated place"] = {
link = "+w:populated place",
-- not necessarily true, but usually is the case
fallback = "village",
},
["port"] = {
link = true,
class = "man-made structure",
default = {true},
},
["port city"] = {
-- FIXME: should categorize into "Ports" as well as "Cities"
link = true,
fallback = "city",
},
["port town"] = {
-- FIXME: should categorize into "Ports" as well as "Towns"
link = "w",
fallback = "town",
},
["prefecture"] = {
-- FIXME! `prefecture` is like a county in Japan and elsewhere but a department capital city in France.
-- May need `has_neighborhoods` to be a function.
link = true,
preposition = "of",
display_handler = prefecture_display_handler,
class = "subpolity",
},
["prefecture-level city"] = {
-- China; they are huge entities with a central city; not cities themselves.
link = "w",
preposition = "of",
class = "subpolity",
},
["preserved county"] = {
-- In Wales; they are former counties enshrined in law; there are 8 of them and each consists of one or more
-- "principal areas" (styled as "counties" or "county boroughs"), of which there are 22.
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["primary area"] = {
-- a grouping of "districts" (neighborhoods) in Gothenburg, Sweden
link = "+w:sv:primärområde",
fallback = "neighborhood",
},
["principality"] = {
link = true,
fallback = "monarchy",
},
["promontory"] = {
link = true,
fallback = "headland",
},
["protectorate"] = {
link = true,
fallback = "dependent territory",
},
["province"] = {
link = true,
preposition = "of",
display_handler = province_display_handler,
class = "subpolity",
},
["provinces and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case China.
category_link = "[[province]]s and [[autonomous region]]s",
class = "subpolity",
},
["provinces and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Canada and Pakistan.
category_link = "[[province]]s and [[territory|territories]]",
class = "subpolity",
},
["provincial capital"] = {
link = "separately",
fallback = "capital city",
},
["raion"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["ranch"] = {
link = true,
fallback = "farm",
},
["range"] = {
-- FIXME: Where is this used? Is it a mountain range?
link = true,
holonym_use_the = true,
class = "natural feature",
},
["regency"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["region"] = {
link = true,
preposition = "of",
-- If 'region' isn't a specific administrative division, fall back to 'geographic and cultural area'
fallback = "geographic and cultural area",
-- "former region" is a subpolity but traditional/historic(al)/ancient/medieval/etc. is a geographic region
class = "geographic region",
},
["regional capital"] = {
link = "separately",
fallback = "capital city",
},
["regional county municipality"] = {
-- Quebec
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"municipality", "county"},
fallback = "municipality",
},
["regional district"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "district",
},
["regional municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
},
["regional unit"] = {
link = "w",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["registration county"] = {
-- Used in Scotland for land registration purposes; formerly used in England, Wales and Ireland for statistical
-- purposes (registration of births, deaths and marriages, and for the output of census information).
link = "w",
fallback = "county",
},
["republic"] = {
-- Of Russia, Yugoslavia, etc. "Republics" in general are sovereign but we use "country" in that case.
link = true,
fallback = "constituent republic",
},
["research base"] = {
link = "+w:research station",
fallback = "research station",
},
["research station"] = {
link = "w",
class = "non-admin settlement", -- or "man-made structure"?
default = {true},
},
["reservoir"] = {
link = true,
fallback = "lake",
},
["residential area"] = {
link = "separately",
fallback = "neighborhood",
},
["resort city"] = {
link = "w",
fallback = "city",
},
["resort town"] = {
link = "w",
fallback = "town",
},
["river"] = {
link = true,
generic_before_non_cities = "in",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
cat_handler = city_type_cat_handler,
["continent/*"] = {true},
default = {true},
},
["river island"] = {
link = "w",
fallback = "island",
},
["road"] = {
link = true,
class = "man-made structure",
default = {"Named roads"},
},
["Roman province"] = {
-- FIXME! Eliminate this in favor of 'former province|emp/Roman Empire'
link = "w",
default = {"Provinces of the Roman Empire"},
class = "subpolity",
},
["royal borough"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"royal", "borough"},
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["royal burgh"] = {
link = true,
fallback = "borough",
},
["royal capital"] = {
link = "w",
fallback = "capital city",
},
["rural committee"] = {
-- Hong Kong; a group of villages
link = "w",
affix_type = "Suf",
has_neighborhoods = true,
class = "settlement",
},
["rural community"] = {
-- New Brunswick
link = "+w:list of municipalities in New_Brunswick#Rural communities",
fallback = "municipality",
},
["rural hromada"] = {
link = "[[rural]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["rural municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
has_neighborhoods = true, --?
},
["rural township"] = {
-- Taiwan
link = "+w:rural township (Taiwan)",
fallback = "township",
},
["sanctuary"] = {
link = true,
fallback = "temple",
},
["satrapy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["sea"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["seaport"] = {
link = true,
fallback = "port",
},
["seat"] = {
link = true,
fallback = "administrative centre",
},
["self-administered area"] = {
-- Myanmar (groups self-administered divisions and zones)
link = "+w:self-administered zone",
preposition = "of",
class = "subpolity",
},
["self-administered division"] = {
-- Myanmar (only one of them: Wa Self-Administered Division)
link = "w",
fallback = "self-administered area",
},
["self-administered zone"] = {
-- Myanmar (five of them)
link = "w",
fallback = "self-administered area",
},
["separatist state"] = {
link = "separately",
fallback = "unrecognized country",
},
["settlement"] = {
link = true,
category_link = "[[settlement]]s such as [[city|cities]], [[village]]s and [[farm]]s",
bare_category_parent = "places",
-- not necessarily true, but usually is the case
fallback = "village",
},
["settlement hromada"] = {
link = "[[w:Populated places in Ukraine#Rural settlements|settlement]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["sheading"] = {
-- Isle of Man
link = true,
fallback = "district",
},
["sheep station"] = {
-- Australia
link = true,
fallback = "farm",
},
["shire"] = {
link = true,
fallback = "county",
},
["shire county"] = {
link = "w",
fallback = "county",
},
["shire town"] = {
link = true,
fallback = "county seat",
},
["ski resort city"] = {
link = "[[ski resort]] [[city]]",
fallback = "city",
},
["ski resort town"] = {
link = "[[ski resort]] [[town]]",
fallback = "town",
},
["spa city"] = {
link = "+w:spa town",
fallback = "city",
},
["spa town"] = {
link = "w",
fallback = "town",
},
["space station"] = {
link = true,
fallback = "research station",
},
["special administrative region"] = {
-- in China; in practice they are city-like (Hong Kong, Macau); also [[Oecusse]] in East Timor is formally a
-- "special administrative region"; North Korea had one such region planned (Sinuiju) but abandoned; Indonesia
-- has similar "special regions" of Jakarta, Yogyakarta and Aceh; and South Sudan has three "special
-- administrative areas"
link = "+w:special administrative regions of China",
preposition = "of",
class = "subpolity",
has_neighborhoods = true, --?
-- no suffix since places in Hong Kong or Macau are listed without China, except Hong Kong and Macau themselves
-- they also contain regions (or areas), e.g. [[Kowloon]], so it would be confusing
suffix = "",
},
["special collectivity"] = {
link = "w",
fallback = "collectivity",
},
["special municipality"] = {
-- formerly linked to the Taiwan article but there are also special municipalities of the Netherlands
link = "w",
fallback = "municipality",
},
["special ward"] = {
-- Tokyo
link = true,
fallback = "municipality",
},
["spit"] = {
link = true,
fallback = "peninsula",
},
["spring"] = {
link = true,
class = "natural feature",
default = {true},
},
["star"] = {
link = true,
class = "natural feature",
default = {true},
},
["state"] = {
link = true,
preposition = "of",
class = "subpolity",
-- 'former/historical state' could refer either to a state of a country (a division) or a state = sovereign
-- entity. The latter appears more common (e.g. in various "ancient states" of East Asia).
former_type = "polity",
},
["states and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Australia.
category_link = "[[state]]s and [[territory|territories]]",
class = "subpolity",
},
["states and union territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case India.
category_link = "[[state]]s and [[union territory|union territories]]",
class = "subpolity",
},
["state capital"] = {
link = true,
fallback = "capital city",
},
["state park"] = {
link = true,
fallback = "park",
},
["state-level new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
fallback = "new area",
},
["statistical region"] = {
-- Slovenia
link = true,
fallback = "administrative region",
},
["statutory city"] = {
link = "w",
fallback = "city",
},
["statutory town"] = {
link = "w",
fallback = "town",
},
["strait"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["stream"] = {
link = true,
fallback = "river",
},
["street"] = {
link = true,
fallback = "road",
},
["strip"] = {
link = true,
fallback = "geographic region",
},
["strip of land"] = {
link = "[[strip]] of [[land]]",
plural = "strips of land",
plural_link = "[[strip]]s of [[land]]",
fallback = "geographic region",
},
["sub-metropolitan city"] = {
link = "+w:List of cities in Nepal#Sub-metropolitan cities",
fallback = "city",
},
["sub-prefectural city"] = {
link = "w",
fallback = "subprovincial city",
},
["subdistrict"] = {
link = true,
preposition = "of",
has_neighborhoods = true, --?
-- FIXME: subdistricts can be neighborhood-like (of Jakarta) or larger (in China); need a handler
class = "subpolity",
default = {true},
},
["subdivision"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- FIXME: subdivisions can be neighborhood-like or larger; need a handler
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
},
["submerged ghost town"] = {
-- FIXME: Consider just having "submerged" as a qualifier.
link = "[[submerged]] [[ghost town]]",
fallback = "ghost town",
},
["subnational kingdom"] = {
link = "+w:subnational monarchy",
fallback = "non-sovereign kingdom",
},
["subnational monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["subprefecture"] = {
link = true,
affix_type = "suf",
preposition = "of",
class = "subpolity",
},
["subprovince"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["subprovincial city"] = {
link = "w",
-- China; special status given to certain prefecture-level cities
fallback = "prefecture-level city",
},
["subprovincial district"] = {
link = "w",
-- China; special status given to Binhai New Area and Pudong New Area, which are county-level districts
preposition = "of",
class = "subpolity",
},
["subregion"] = {
link = true,
fallback = "geographic region",
},
["suburb"] = {
link = true,
-- The following text is suitable for the top-level description of a suburb as well as categories of the form
-- 'Suburbs in POLDIV' e.g. 'Suburbs in Illinois, USA' but not for categories of the form 'Suburbs of Chicago',
-- where we'd get "[[suburb]]s of [[city|cities]] of [[Chicago]]".
category_link = "[[suburb]]s of [[city|cities]]",
category_link_before_city = "[[suburb]]s",
-- See comments under "neighborhood" for the following three settings. They are used by
-- [[Module:category tree/topic cat/data/Places]] for generating the text of 'Suburbs in/of PLACE' categories
-- but currently ignored by district_neighborhood_cat_handler (which actually generates the categories for a
-- given page), which hardcodes "in" for non-cities and "of" for cities. (FIXME: Change this.)
generic_before_non_cities = "in",
generic_before_cities = "of",
preposition = "of",
has_neighborhoods = true, --?
class = "non-admin settlement", --?
cat_handler = district_neighborhood_cat_handler,
},
["suburban area"] = {
link = "w",
fallback = "suburb",
},
["subway station"] = {
link = "w",
fallback = "metro station",
},
["sum"] = {
-- In China, Mongolia, Russia; something like a county in Mongolia but a township in China (Inner Mongolia),
-- and equivalent to a [[selsoviet]] in the parts of Russia where it's in use (a rural council, below a raion).
link = "+w:sum (administrative division)",
-- This fallback is somewha arbitrary. We could use "county" but that has a display handler
-- which we don't want to be active (FIXME: If the display handler would be active, that's a bug).
fallback = "division",
},
["supercontinent"] = {
link = true,
fallback = "continent",
},
["tehsil"] = {
link = true,
affix_type = "suf",
no_affix_strings = {"tehsil", "tahsil"},
class = "subpolity",
},
["temple"] = {
link = true,
fallback = "building",
},
["territorial authority"] = {
link = "w",
fallback = "district",
},
["territory"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["theme"] = {
link = "+w:theme (Byzantine district)",
preposition = "of",
class = "subpolity",
},
["town"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["town with bystatus"] = {
-- can't use templates in links currently
link = "[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]",
plural = "towns with bystatus",
plural_link = "[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]",
fallback = "town",
},
["township"] = {
link = true,
has_neighborhoods = true,
class = "settlement", --?
default = {true},
},
["township municipality"] = {
-- Quebec
link = "+w:township municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["traditional county"] = {
link = true,
fallback = "county",
},
["traditional region"] = {
-- FIXME: Verify this works. Same for 'historic(al) region'.
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["trail"] = {
link = true,
fallback = "road",
},
["treaty port"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"FORMER"},
},
["tributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["underground station"] = {
link = "w",
fallback = "metro station",
},
["unincorporated area"] = {
link = "w",
-- I don't know if this fallback makes sense everywhere.
fallback = "unincorporated community",
},
["unincorporated community"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
},
["unincorporated territory"] = {
link = "w",
fallback = "territory",
},
["union territory"] = {
-- India
link = true,
preposition = "of",
entry_placetype_indefinite_article = "a",
class = "subpolity",
},
["unitary authority"] = {
-- UK, New Zealand
link = true,
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["unitary district"] = {
link = "w",
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["united township municipality"] = {
-- Quebec
link = "+w:united township municipality (Quebec)",
entry_placetype_indefinite_article = "a",
fallback = "township municipality",
has_neighborhoods = true, --?
},
["university"] = {
link = true,
entry_placetype_indefinite_article = "a",
class = "man-made structure",
default = {true},
},
["unrecognised country"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized and nearly unrecognized countries!"] = {
category_link = "[[de facto]] [[independent]] [[state]]s with little or no {{w|international recognition}}",
bare_category_parent = "country-like entities",
},
["unrecognized country"] = {
link = "w",
class = "polity",
default = {"Unrecognized and nearly unrecognized countries"},
},
["unrecognised state"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized state"] = {
link = "w",
fallback = "unrecognized country",
},
["urban area"] = {
link = "separately",
fallback = "neighborhood",
},
["urban hromada"] = {
link = "[[urban]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["urban service area"] = {
-- A strange beast existing in Alberta; technically a type of hamlet but in practice used for much larger
-- cities and treated equivalent to a city. (There are only two of them, [[Fort McMurray]] and [[Sherwood Park]]).
link = "w",
fallback = "city",
},
["urban township"] = {
link = "w",
fallback = "township",
},
["urban-type settlement"] = {
-- appears to be a particular type of small urban settlement in post-Soviet states,
-- had an administrative function.
link = "w",
fallback = "town",
},
["valley"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "water"},
default = {true},
},
["viceroyalty"] = {
-- in essence, a type of colony
link = true,
fallback = "dependent territory",
},
["village"] = {
link = true,
generic_before_non_cities = "in",
category_link = "[[village]]s, [[hamlet]]s, and other small [[community|communities]] and [[settlement]]s",
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["village development committee"] = {
-- former administrative structure in Nepal; also exists in India but not as a formal unit
link = "+w:village development committee (Nepal)",
inherently_former = {"FORMER"},
fallback = "village",
},
["village municipality"] = {
-- Quebec
link = "+w:village municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["voivodeship"] = {
-- Poland
link = true,
display_handler = voivodeship_display_handler,
preposition = "of",
class = "subpolity",
},
["volcano"] = {
link = true,
plural = "volcanoes",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true, "Mountains"},
},
["ward"] = {
link = true,
class = "settlement",
-- Wards are formal administrative divisions of a city but have some properties of neighborhoods.
fallback = "neighborhood",
},
["watercourse"] = {
link = true,
fallback = "channel",
},
["Welsh community"] = {
-- Wales
link = "[[w:community (Wales)|community]]",
preposition = "of",
affix_type = "suf",
affix = "community",
has_neighborhoods = true,
class = "settlement",
},
["zone"] = {
-- administrative division of Ethiopia, Qatar, Nepal, India
link = "+w:zone#Place names",
preposition = "of",
class = "subpolity",
},
----------------------------------------------------------------------------------------------
-- Categories for former places --
----------------------------------------------------------------------------------------------
["ANCIENT capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
-- FIXME: Consider removing 'ancient settlements' here. Ancient capitals, like former capitals, often still
-- exist but just aren't the capital any more. Maybe we should have an 'Ancient capitals' category.
default = {"Ancient settlements", "Former capitals"},
},
["ANCIENT non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "ANCIENT settlement",
},
["ANCIENT settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Ancient settlements"},
},
["ancient settlements!"] = {
category_link = "former [[city|cities]], [[town]]s and [[village]]s that existed in [[antiquity]]",
bare_category_parent = "former settlements",
},
["FORMER capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
default = {"Former capitals"},
},
["former capitals!"] = {
category_link = "former [[capital]] [[city|cities]] and [[town]]s",
bare_category_parent = "settlements",
},
["former counties and county-level cities!"] = {
-- For categorizing former counties and county-level cities of China
category_link = "no-longer existing [[county|counties]] and [[county-level city|county-level cities]]",
bare_category_breadcrumb = "counties and county-level cities",
bare_category_parent = "former political divisions",
},
["FORMER county"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER county-level city"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["former countries and country-like entities!"] = {
category_link = "[[country|countries]] and similar [[polity|polities]] that no longer exist",
bare_category_breadcrumb = "countries and country-like entities",
bare_category_parent = "former polities",
},
["FORMER country"] = {
link = false,
class = "polity",
default = {"Former countries and country-like entities"},
},
["former dependent territories!"] = {
category_link = "[[w:dependent territory|dependent territories]] (colonies, dependencies, protectorates, etc.) that no longer exist",
bare_category_breadcrumb = "dependent territories",
bare_category_parent = "former political divisions",
},
["FORMER dependent territory"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former dependent territories"},
},
["former districts!"] = {
-- For categorizing former districts of China
category_link = "no-longer-existing [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "former political divisions",
},
["FORMER district"] = {
-- For categorizing former districts of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER geographic region"] = {
link = false,
fallback = "geographic and cultural area",
},
["FORMER man-made structure"] = {
link = false,
class = "man-made structure",
default = {"Former man-made structures"},
},
["former man-made structures!"] = {
category_link = "man-made structures such as [[airport]]s and [[park]]s that no longer exist",
bare_category_breadcrumb = "man-made structures",
bare_category_parent = "former places",
},
["former municipalities!"] = {
-- For categorizing former municipalities of the Netherlands
category_link = "no-longer-existing [[municipality|municipalities]]",
bare_category_breadcrumb = "municipalities",
bare_category_parent = "former political divisions",
},
["FORMER municipality"] = {
-- For categorizing former municipalities of the Netherlands
link = false,
fallback = "FORMER subpolity",
},
["FORMER natural feature"] = {
link = false,
class = "natural feature",
default = {"Former natural features"},
},
["former natural features!"] = {
category_link = "natural features such as [[lake]]s, [[river]]s and [[island]]s that no longer exist",
bare_category_breadcrumb = "natural features",
bare_category_parent = "former places",
},
["FORMER non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "FORMER settlement",
},
["former places!"] = {
category_link = "[[place]]s of all sorts that no longer exist",
bare_category_breadcrumb = "former",
bare_category_parent = "places",
},
["former political divisions!"] = {
category_link = "[[political]] [[division]]s (states, provinces, counties, etc.) that no longer exist",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former places",
},
["former polities!"] = {
category_link = "[[polity|polities]] (countries, kingdoms, empires, etc.) that no longer exist",
bare_category_breadcrumb = "polities",
bare_category_parent = "former places",
},
["FORMER polity"] = {
link = false,
class = "polity",
default = {"Former polities"},
},
["former prefectures!"] = {
-- For categorizing former prefectures of China
category_link = "no-longer-existing [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "former political divisions",
},
["FORMER prefecture"] = {
-- For categorizing former prefectures of China
link = false,
fallback = "FORMER subpolity",
},
["former provinces!"] = {
-- For categorizing former provinces of China, etc.
category_link = "no-longer-existing [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "former political divisions",
},
["FORMER province"] = {
-- For categorizing ancient/historical/former provinces of the Roman Empire
link = false,
fallback = "FORMER subpolity",
},
["former region"] = {
-- A former region is considered a former political division, but not a 'historical/traditional/etc.' region.
link = "separately",
preposition = "of",
inherently_former = {"FORMER"},
class = "subpolity",
},
["FORMER settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Former settlements"},
},
["former settlements!"] = {
category_link = "[[city|cities]], [[town]]s and [[village]]s that no longer exist or have been merged or reclassified",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former political divisions",
},
["FORMER subpolity"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former political divisions"},
},
----------------------------------------------------------------------------------------------
-- form-of categories --
----------------------------------------------------------------------------------------------
---------- Abbreviations ----------
["abbreviations of counties!"] = {
-- For categorizing abbreviations of counties of e.g. England
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[county|counties]]",
bare_category_breadcrumb = "counties",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of places",
},
["abbreviations of departments!"] = {
-- For categorizing abbreviations of departments of e.g. France
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[department]]s",
bare_category_breadcrumb = "departments",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of districts!"] = {
-- For categorizing abbreviations of districts of e.g. ???
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of divisions!"] = {
-- For categorizing abbreviations of divisions of e.g. Bangladesh
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[division]]s",
bare_category_breadcrumb = "divisions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of former countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of former places",
},
["abbreviations of former places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "abbreviations of places", sort = "former"}},
},
["abbreviations of places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "places",
},
["abbreviations of political divisions!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[political]] [[division]]s",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "abbreviations of places",
},
["abbreviations of prefectures!"] = {
-- For categorizing abbreviations of prefectures of e.g. Japan
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces!"] = {
-- For categorizing abbreviations of provinces of e.g. Canada
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s and [[territory|territories]]",
bare_category_breadcrumb = "provinces and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of regions!"] = {
-- For categorizing abbreviations of regions of e.g. Italy
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[administrative region]]s",
bare_category_breadcrumb = "regions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states!"] = {
-- For categorizing abbreviations of states of e.g. the United States
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[territory|territories]]",
bare_category_breadcrumb = "states and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and union territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[union territory|union territories]]",
bare_category_breadcrumb = "states and union territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[territory|territories]]",
bare_category_breadcrumb = "territories",
bare_category_parent = "abbreviations of political divisions",
},
["ABBREVIATION_OF country"] = {
link = false,
default = {"Abbreviations of countries"},
},
["ABBREVIATION_OF county"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF department"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF district"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF division"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF FORMER country"] = {
link = false,
default = {"Abbreviations of former countries"},
},
["ABBREVIATION_OF FORMER place"] = {
link = false,
default = {"Abbreviations of former places"},
},
["ABBREVIATION_OF place"] = {
link = false,
default = {"Abbreviations of places"},
},
["ABBREVIATION_OF prefecture"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF province"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF region"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF state"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF subpolity"] = {
link = false,
default = {"Abbreviations of political divisions"},
},
["ABBREVIATION_OF territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF union territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
---------- Archaic forms ----------
["archaic forms of places!"] = {
full_category_link = "{{glossary|archaic}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "archaic forms",
bare_category_parent = "places",
},
["ARCHAIC_FORM_OF place"] = {
link = false,
default = {"Archaic forms of places"},
},
---------- Clippings ----------
["clippings of places!"] = {
full_category_link = "{{glossary|clipping}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "clippings",
bare_category_parent = "places",
},
["CLIPPING_OF place"] = {
link = false,
default = {"Clippings of places"},
},
---------- Dated forms ----------
["dated forms of places!"] = {
full_category_link = "{{glossary|dated}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "dated forms",
bare_category_parent = "places",
},
["DATED_FORM_OF place"] = {
link = false,
default = {"Dated forms of places"},
},
---------- Derogatory names ----------
["derogatory names for cities!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[city|cities]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["derogatory names for continents!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for continents"},
},
["derogatory names for countries!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for countries"},
},
["derogatory names for places!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[place]]s",
bare_category_breadcrumb = "derogatory names",
bare_category_parent = "nicknames for places",
},
["derogatory names for states!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for states"},
},
["DEROGATORY_NAME_FOR capital"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR city"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR continent"] = {
link = false,
default = {"Derogatory names for continents"},
},
["DEROGATORY_NAME_FOR country"] = {
link = false,
default = {"Derogatory names for countries"},
},
["DEROGATORY_NAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR place"] = {
link = false,
default = {"Derogatory names for places"},
},
["DEROGATORY_NAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR state"] = {
link = false,
default = {"Derogatory names for states"},
},
["DEROGATORY_NAME_FOR town"] = {
link = false,
default = {"Derogatory names for cities"},
},
---------- Ellipses ----------
["ellipses of places!"] = {
full_category_link = "{{glossary|ellipsis|ellipses}} of [[name]]s of [[place]]s",
bare_category_breadcrumb = "ellipses",
bare_category_parent = "places",
},
["ELLIPSIS_OF place"] = {
link = false,
default = {"Ellipses of places"},
},
---------- Former long-form names ----------
["former long-form names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former long-form names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "long-form"}},
},
["former long-form names of places!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form",
bare_category_parent = "former names of places",
},
["FORMER_LONG_FORM_OF country"] = {
link = false,
default = {"Former long-form names of countries"},
},
["FORMER_LONG_FORM_OF place"] = {
link = false,
default = {"Former long-form names of places"},
},
---------- Former names ----------
["former names of capitals!"] = {
full_category_link = "[[former]] [[name]]s of [[capital city|capital cities]] that generally still exist but under a different name",
bare_category_breadcrumb = "capitals",
bare_category_parent = "former names of settlements",
},
["former names of countries!"] = {
full_category_link = "[[former]] [[name]]s of [[country|countries]] that generally still exist but under a different name",
bare_category_breadcrumb = "countries",
bare_category_parent = "former names of places",
},
["former names of places!"] = {
full_category_link = "[[former]] [[name]]s of [[place]]s that generally still exist but under a different name",
bare_category_breadcrumb = "former names",
bare_category_parent = "places",
},
["former names of political divisions!"] = {
full_category_link = "[[former]] [[name]]s of [[political]] [[division]]s (states, provinces, counties, etc.) that generally still exist but under a different name",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former names of places",
},
["former names of polities!"] = {
full_category_link = "[[former]] [[name]]s of [[polity|polities]] (e.g. [[country|countries]]) that generally still exist but under a different name",
bare_category_breadcrumb = "polities",
bare_category_parent = "former names of places",
},
["former names of settlements!"] = {
full_category_link = "[[former]] [[name]]s of [[city|cities]], [[town]]s, [[village]]s, etc. that generally still exist but under a different name",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former names of political divisions",
},
["FORMER_NAME_OF capital"] = {
link = false,
default = {"Former names of capitals"},
},
["FORMER_NAME_OF country"] = {
link = false,
default = {"Former names of countries"},
},
["FORMER_NAME_OF place"] = {
link = false,
default = {"Former names of places"},
},
["FORMER_NAME_OF polity"] = {
link = false,
default = {"Former names of polities"},
},
["FORMER_NAME_OF region"] = {
link = false,
fallback = "FORMER_NAME_OF subpolity",
},
["FORMER_NAME_OF settlement"] = {
link = false,
default = {"Former names of settlements"},
},
["FORMER_NAME_OF subpolity"] = {
link = false,
default = {"Former names of political divisions"},
},
---------- Former nicknames ----------
["former nicknames for cities!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[city|cities]], e.g. the [[Eternal City]] for [[Kyoto]] during the {{w|Heian period}} ({{circa2|800–1100|short=yes}} {{AD}})",
bare_category_breadcrumb = "cities",
bare_category_parent = "former nicknames for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["former nicknames for places!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "former",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {{name = "former names of places", sort = "nicknames"}},
},
["FORMER_NICKNAME_FOR capital"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR city"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR place"] = {
link = false,
default = {"Former nicknames for places"},
},
["FORMER_NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR town"] = {
link = false,
default = {"Former nicknames for cities"},
},
---------- Former official names ----------
["former official names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former official names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "official"}},
},
["former official names of places!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "former names of places",
},
["FORMER_OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Former official names of countries"},
},
["FORMER_OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Former official names of places"},
},
---------- Long-form names ----------
["long-form names of countries!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "long-form names of places",
},
["long-form names of places!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form names",
bare_category_parent = "places",
},
["LONG_FORM_OF country"] = {
link = false,
default = {"Long-form names of countries"},
},
["LONG_FORM_OF place"] = {
link = false,
default = {"Long-form names of places"},
},
---------- Nicknames ----------
["nicknames for cities!"] = {
full_category_link = "[[nickname]]s for [[city|cities]], e.g. the [[Big Apple]] for [[New York City]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"cities"},
},
["nicknames for continents!"] = {
full_category_link = "[[nickname]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"continents"},
},
["nicknames for countries!"] = {
full_category_link = "[[nickname]]s for [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"countries"},
},
["nicknames for places!"] = {
full_category_link = "[[nickname]]s for [[place]]s",
bare_category_breadcrumb = "places",
bare_category_parent = "nicknames",
addl_bare_category_parents = {"places"},
},
["nicknames for states!"] = {
-- For categorizing nicknames for states of e.g. the United States
full_category_link = "[[nicknames]] for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"states"},
},
["NICKNAME_FOR capital"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR city"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR continent"] = {
link = false,
default = {"Nicknames for continents"},
},
["NICKNAME_FOR country"] = {
link = false,
default = {"Nicknames for countries"},
},
["NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR place"] = {
link = false,
default = {"Nicknames for places"},
},
["NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR state"] = {
link = false,
default = {"Nicknames for states"},
},
["NICKNAME_FOR town"] = {
link = false,
default = {"Nicknames for cities"},
},
---------- Obsolete forms ----------
["obsolete forms of places!"] = {
full_category_link = "{{glossary|obsolete}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "obsolete forms",
bare_category_parent = "places",
},
["OBSOLETE_FORM_OF place"] = {
link = false,
default = {"Obsolete forms of places"},
},
---------- Official names ----------
["official names of countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of places",
},
["official names of former countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of former places",
},
["official names of former places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "official names",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "official names of places", sort = "former"}},
},
["official names of places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official names",
bare_category_parent = "places",
},
["OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Official names of countries"},
},
["OFFICIAL_NAME_OF FORMER country"] = {
link = false,
default = {"Official names of former countries"},
},
["OFFICIAL_NAME_OF FORMER place"] = {
link = false,
default = {"Official names of former places"},
},
["OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Official names of places"},
},
---------- Official nicknames ----------
["official nicknames for places!"] = {
full_category_link = "[[official]] [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for places",
},
["official nicknames for states!"] = {
-- For categorizing official nicknames for states of e.g. the United States
full_category_link = "[[official]] [[nicknames]] for [[state]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for states",
addl_bare_category_parents = {"states"},
},
["OFFICIAL_NICKNAME_FOR place"] = {
link = false,
default = {"Official nicknames for places"},
},
["OFFICIAL_NICKNAME_FOR state"] = {
link = false,
default = {"Official nicknames for states"},
},
}
export.plural_placetype_to_singular = {}
for sg_placetype, spec in pairs(export.placetype_data) do
if spec.plural then
export.plural_placetype_to_singular[spec.plural] = sg_placetype
end
end
------------------------------------------------------------------------------------------
-- ZH: Chinese localization functions --
------------------------------------------------------------------------------------------
--[==[
Get the Chinese display name for a placetype, resolving through the enwikt fallback chain.
`holonym_placetype` (optional string) provides context for placetypes like `capital city`
whose Chinese term depends on the containing administrative level (country → 首都,
province → 省會, state → 首府, etc.).
Returns two values: zh_name (string or array of regional variants), zh_suffix (string,
array, or nil). Returns nil, nil if no Chinese data is available for the placetype or
any of its fallbacks.
]==]
function export.get_zh_placetype_name(placetype, holonym_placetype)
placetype = export.resolve_placetype_aliases(placetype)
local zh_name, zh_suffix, zh_by_holonym = m_zh_data.get_zh_placetype_props(placetype, export)
if zh_name then
local resolved = m_zh_data.resolve_zh_name(zh_name, zh_by_holonym, holonym_placetype)
return resolved, zh_suffix
end
return nil, nil
end
--[==[
Get only the Chinese suffix for a placetype.
Used when rendering holonym `:pref`/`:suf` modifiers in Chinese: the suffix is appended
directly to the holonym name (e.g. `s:suf/New York` → 紐約州; `c:pref/Georgia` → 格魯吉亞國).
Returns a string, an array of regional variants, or nil if no suffix is defined.
]==]
function export.get_zh_placetype_suffix(placetype)
placetype = export.resolve_placetype_aliases(placetype)
local _, zh_suffix = m_zh_data.get_zh_placetype_props(placetype, export)
return zh_suffix
end
--[==[
Chinese placetype "pluralization" — a no-op, since Chinese has no grammatical plural.
Accepts and returns a string or an array (for multi-variant names) unchanged.
Provided so that call sites shared with the English path can call a uniform function.
]==]
function export.pluralize_zh_placetype(zh_name)
return zh_name
end
--[==[
Get the entry preposition for Chinese display: "in" or "of".
Identical to `get_placetype_entry_preposition` in semantics; the Chinese rendering
maps these to different constructions:
"in" → 位於 [holonyms] 的 [placetype]
"of" → [holonyms] 的 [placetype] (no 位於 prefix)
]==]
export.get_zh_entry_preposition = export.get_placetype_entry_preposition
-- Re-export Chinese data tables so that [[Module:place]] only needs to require
-- this module rather than both this module and [[Module:place/zh-data]] separately.
export.zh_strings = m_zh_data.zh_strings
export.zh_qualifiers = m_zh_data.zh_qualifiers
export.zh_extra_info_labels = m_zh_data.zh_extra_info_labels
export.zh_capital_label_by_holonym_type = m_zh_data.zh_capital_label_by_holonym_type
export.format_zh_name = m_zh_data.format_zh_name
return export
scc45n99sfvnksj29itd5yehmii3vd3
9758134
9758132
2026-05-13T00:21:58Z
TongcyDai
53191
9758134
Scribunto
text/plain
local export = {}
export.force_cat = false -- set to true for testing
local m_locations = require("Module:place/locations")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_strutils = require("Module:string utilities")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
-- Chinese localization data (zh_name, zh_suffix, qualifiers, extra-info labels, etc.)
local m_zh_data = require("Module:place/data/sandbox")
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local internal_error = m_locations.internal_error
export.internal_error = internal_error
local process_error = m_locations.process_error
export.process_error = process_error
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local ucfirst = m_strutils.ucfirst
local ulower = m_strutils.lower
local rmatch = m_strutils.match
local split = m_strutils.split
--[==[ intro:
This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code
to work with both placetypes and locations, as well as some placename-related info (FIXME: Consider moving it to
[[Module:place/locations]]). See also [[Module:place/locations]], which has definitions of all known locations. You must
currently load this module using {{cd|require()}}, not using {{cd|mw.loadData()}}.
In particular, it contains two fundamental and tricky functions:
# `get_placetype_equivs`, which finds the equivalent placetypes to look under in order to find a given property, and in
the process correctly handles placetypes with qualifiers (including qualifiers that act similar to "type-raising"
operators in that they do something non-trivial to the placetype to their right) as well as form-of directives and
fallbacks.
# `find_matching_holonym_location`, which looks up a holonym to find a matching known location, but in the process
checks holonyms to the right to make sure there isn't a clash between the user-specified containing holonyms and the
containers of the known location being considered. This is done to prevent overcategorizing when either there are two
known locations with the same name (e.g. Birmingham in England and Birmingham, Alabama in the US), or more generally
two locations with the same name, one of which is a known location but where the other is not (e.g. we're processing
non-known-location Mérida, Spain and don't want it categorized like known location Mérida, Yucatán, Mexico).
Both of these functions are invoked repeatedly, and probably are invoked several times on the same inputs and as a
result are candidates for memoization to speed up the operation of {{tl|place}}.
]==]
------------------------------------------------------------------------------------------
-- Basic utilities --
------------------------------------------------------------------------------------------
--[==[
Return true if `force_cat` is set either in this module or in [[Module:place/locations]].
]==]
function export.get_force_cat()
return export.force_cat or m_locations.force_cat
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
function export.remove_links_and_html(text)
text = m_links.remove_links(text)
return text:gsub("<.->", "")
end
--[==[
Return the singular version of a maybe-plural placetype, or nil if not plural. This correctly handles placetypes with
irregular plurals such as `kibbutzim` plural of `kibbutz` by looking up in a table constructed from the `plural` values
specified in `placetype_data`. If a special plural value is not found, the regular singularization algorithm in
[[Module:en-utilities]] is invoked, which reverses the y -> ies change after vowels and the 'es' addition after sh/ch/x,
and otherwise just subtracts a final 's' (which will incorrectly generate 'passe' for plural 'passes'; FIXME: consider
changing this for words ending in '-sses'). If the generated singular is the same as the passed-in value, nil is
returned.
]==]
function export.maybe_singularize_placetype(placetype)
if not placetype then
return nil
end
if export.plural_placetype_to_singular[placetype] then
return export.plural_placetype_to_singular[placetype]
end
local retval = require(en_utilities_module).singularize(placetype)
if retval == placetype then
return nil
end
return retval
end
-- Return the correct plural of a placetype, and (if `do_ucfirst` is given) make the first letter uppercase. We first
-- look up the plural in `placetype_data`, falling back to pluralize() in [[Module:en-utilities]], which is almost
-- always correct.
function export.pluralize_placetype(placetype, do_ucfirst)
local ptdata = export.placetype_data[placetype]
if ptdata and ptdata.plural then
placetype = ptdata.plural
else
placetype = require(en_utilities_module).pluralize(placetype)
end
if do_ucfirst then
return ucfirst(placetype)
else
return placetype
end
end
--[==[
Get the data associated with a placetype, which may be in its singular or plural form. If `from_category` is specified,
we also look for category-only placetypes (generally plural) followed by `!`. Return three values: (a) the placetype
under which the data can be looked up (i.e. in its singular form if the passed-in `placetype` is plural and did not
match a category-only placetype followed by `!`); (b) the placetype data structure; (c) the type of `placetype` match
that occurred, one of `"direct"` if the canonical placetype is the same as the passed-in `placetype` and also the same
as the key under which `ptdata` was looked up, or `"direct-category"` if the `ptdata` was looked up under a key formed
from the passed-in `placetype` by adding `!`, or `"plural"` if the `ptdata` was looked up under the singularized version
of the plural passed-in `placetype`.
]==]
function export.get_placetype_data(placetype, from_category)
local ptdata = export.placetype_data[placetype]
if ptdata then
return placetype, ptdata, "direct"
end
if from_category then
ptdata = export.placetype_data[placetype .. "!"]
if ptdata then
return placetype .. "!", ptdata, "direct-category"
end
end
local sg_placetype = export.maybe_singularize_placetype(placetype)
if sg_placetype then
ptdata = export.placetype_data[sg_placetype]
if ptdata then
return sg_placetype, ptdata, "plural"
end
end
return nil
end
--[==[
Check for special pseudo-placetypes that should be ignored for categorization purposes.
]==]
function export.placetype_is_ignorable(placetype)
return placetype == "and" or placetype == "or" or placetype:find("^%(")
end
function export.resolve_placetype_aliases(placetype)
return export.placetype_aliases[placetype] or placetype
end
--[==[
Return a property from `placetype_data` for a given placetype. If the placetype isn't found in `placetype_data`, or the
key isn't found in the placetype's entry in `placetype_data`, return nil.
]==]
function export.get_placetype_prop(placetype, key)
-- Usually we are called on equivalent placetypes returned from `get_placetype_equivs`, in which case placetype
-- aliases have been resolved, but sometimes not, e.g. when fetching the indefinite article in
-- get_placetype_article(). `resolve_placetype_aliases` is just a simple lookup and it doesn't hurt to do it twice.
placetype = export.resolve_placetype_aliases(placetype)
if export.placetype_data[placetype] then
return export.placetype_data[placetype][key]
else
return nil
end
end
--[==[
Given a placetype, split the placetype into one or more potential ''splits'', each consisting of a three-element list
{ {``prev_qualifiers``, ``this_qualifier``, ``reduced_placetype``}}, i.e.
# the concatenation of zero or more previously-recognized qualifiers on the left, normally canonicalized (if there are
zero such qualifiers, the value will be nil);
# a single recognized qualifier, normally canonicalized (if there is no qualifier, the value will be nil);
# the "reduced placetype" on the right.
Splitting between the qualifier in (2) and the reduced placetype in (3) happens at each space character, proceeding from
left to right, and stops if a qualifier isn't recognized. All placetypes are canonicalized by checking for aliases
in `placetype_aliases`, but no other checks are made as to whether the reduced placetype is recognized. Canonicalization
of qualifiers does not happen if `no_canon_qualifiers` is specified.
For example, given the placetype `"small beachside unincorporated community"`, the return value will be
{ {
{nil, nil, "small beachside unincorporated community"},
{nil, "small", "beachside unincorporated community"},
{"small", "[[beachfront]]", "unincorporated community"},
{"small [[beachfront]]", "[[unincorporated]]", "community"},
}}
Here, `"beachside"` is canonicalized to `"[[beachfront]]"` and `"unincorporated"` is canonicalized to
`"[[unincorporated]]"`, in both cases according to the entry in `placetype_qualifiers`.
On the other hand, if given `"small former haunted community"`, the return value will be
{ {
{nil, nil, "small former haunted community"},
{nil, "small", "former haunted community"},
{"small", "former", "haunted community"},
}}
because `"small"` and `"former"` but not `"haunted"` are recognized as qualifiers.
Finally, if given `"former adr"`, the return value will be
{ {
{nil, nil, "former adr"},
{nil, "former", "administrative region"},
}}
because `"adr"` is a recognized placetype alias for `"administrative region"`.
]==]
function export.split_qualifiers_from_placetype(placetype, no_canon_qualifiers)
local splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
local prev_qualifier = nil
while true do
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if canon == nil then
break
end
local new_qualifier = qualifier
if type(canon) == "table" then
canon = canon.link
end
if not no_canon_qualifiers and canon ~= false then
if canon == true then
new_qualifier = "[[" .. qualifier .. "]]"
else
new_qualifier = canon
end
end
insert(splits, {prev_qualifier, new_qualifier, export.resolve_placetype_aliases(reduced_placetype)})
prev_qualifier = prev_qualifier and prev_qualifier .. " " .. new_qualifier or new_qualifier
placetype = reduced_placetype
else
break
end
end
return splits
end
--[==[
Given a `placetype` (which may be pluralized), return an ordered list of equivalent placetypes to look under to find the
placetype's properties (such as the category or categories to be inserted). The return value is actually an ordered list
of objects of the form `{qualifier=``qualifier``, placetype=``equiv_placetype``}` where ``equiv_placetype`` is a
placetype whose properties to look up, derived from the passed-in placetype or from a contiguous subsequence of the
words in the passed-in placetype (always including the rightmost word in the placetype, i.e. we successively chop off
qualifier words from the left and use the remainder to find equivalent placetypes). ``qualifier`` is the remaining words
not part of the subsequence used to find ``equiv_placetype``; or nil if all words in the passed-in placetype were used
to find ``equiv_placetype``. (FIXME: This qualifier is not currently used anywhere.) Only placetypes for which there is
an entry in `placetype_data` are included. The placetype passed in is always checked first, and will form the first
entry if it exists in `placetype_data`.
'''NOTE:''' This is a tricky function as it implements handling of (a) qualifiers, (b) fallback logic, (c)
"type-raising" qualifiers such as `former`/`ancient`/etc. as well as `fictional` and `mythological`, and (d) form-of
directives, which act somewhat similarly to `former`, and allows interaction between more than one of these
simultaneously (e.g. official names of former places, which have their own categorization).
If {{tl|place}} gets too slow, one potential speedup is to memoize the results of this function, as it appears to be
getting called more than once on the same inputs. Another similar potential speedup is to memoize the results of
`iterate_matching_holonym_location()`.
For example, given the placetype `left tributary`, the following placetype/qualifier combinations are checked in turn:
```
{qualifier = nil, placetype="left tributary"}
{qualifier = "left", placetype="tributary"}
{qualifier = "left", placetype="river"}
```
and the return value will be
{ {
{qualifier = "left", placetype="tributary"},
{qualifier = "left", placetype="river"},
}}
The algorithm first enters the placetype itself into the list, then checks for `left tributary` as a recognized
placetype in `placetype_data` and doesn't find it, so it doesn't enter it into the returned list (if it found it, it
would add it as well as any fallbacks directly after it). It then splits off the recognized qualifier `left` to form the
''reduced placetype'' `tributary`, which is entered into the list because it is found in `placetype_data`. Then, because
it has a fallback `river`, which exists in `placetype_data`, the fallback is entered next.
Another example is `small rural fraziones` (where a ''frazione'' is type of subdivision of a ''comune'' or municipality,
often specifically an outlying hamlet). the placetype/qualifier combinations checked are:
```
{qualifier = nil, placetype="small rural fraziones"}
{qualifier = nil, placetype="small rural frazione"}
{qualifier = "small", placetype="rural fraziones"}
{qualifier = "small", placetype="rural frazione"}
{qualifier = "small [[rural]]", placetype="fraziones"}
{qualifier = "small [[rural]]", placetype="frazione"}
{qualifier = "small [[rural]]", placetype="hamlet"}
{qualifier = "small [[rural]]", placetype="village"}
```
The return value ends up as
{qualifier = "small [[rural]]", placetype="frazione"},
{qualifier = "small [[rural]]", placetype="hamlet"},
{qualifier = "small [[rural]]", placetype="village"},
}}
Here, because the result of singularizing `fraziones` returns a different value from the placetype itself, that
singularized value is checked after the original plural value. Also, in the process of splitting off qualifiers,
they are canonicalized if the entry in `placetype_qualifiers` says to do so; in this case, links are placed around
`rural`. Finally, `frazione` has `hamlet` as its fallback, which in turn has `village` as its fallback, so both
fallbacks end up being returned.
`no_fallback`, if set, disables returning equivalent placetypes based on the `fallback` setting for a placetype. This is
used in the first of two loops in find_placetype_cat_specs() in [[Module:place]] to prefer exact matches for placetypes
such as barangays with later holonyms to matches based on a fallback such as `neighborhood` with an earlier holonym.
See the comment in that function in [[Module:place]] for a more detailed explanation of why this is needed. Only the
placetype itself, and any reduced placetypes created by chopping off recognized qualifiers at the beginning, are
returned; but we do not return reduced placetypes if a containing placetype exists in `placetype_data`. (For example,
`"overseas territory"` has a fallback `"dependent territory"`, and `"overseas"` is also a recognized qualifier. When
`no_fallback` is in place, without the above proviso, we would return `"overseas territory"` followed by `"territory"`
with the incorrect effect of classifying an `"overseas territory"` of the United Kingdom such as `"Gibraltar"` under
[[:Category:Territories of the United Kingdom]] instead of [[:Category:Dependent territories of the United Kingdom]].)
As an exception, if `historical`, `ancient`, `former` or the like are found, they proceed ignoring `no_fallback`,
because it seems tricky to handle them correctly in the presence of `no_fallback`, and historical/former placetypes
rarely occur with exact match category specs anyway.
`no_split_qualifiers` prevents splitting off recognized qualifiers and returning the remainder of the placetype as an
equivalent placetype. Only the passed-in placetype, and any fallbacks, will be returned. This is used in
[[Module:category tree/topic cat/data/Places]] when looking up placetypes found in categories. Such placetypes won't
have qualifiers and so it doesn't make sense to try and look for them.
`from_category`, if set, causes category-only placetypes (those ending in `!`) to also be checked.
`form_of_directive`, if set, causes the specified form-of directive (e.g. `FORMER_NAME_OF`) to be prepended to checked
placetypes, their directive-specific type (e.g. `FORMER_NAME_OF_type`), and their classes (`class`) to get the
appropriate placetypes to check for form-of-directive categories. It falls back to the prepended generic `place` as a
placetype, e.g. `FORMER_NAME_OF place`, if nothing else matches.
`no_check_for_inherently_former` is used internally to prevent an infinite loop when checking for `inherently_former`.
`register_former_as_non_former` is a major hack used in `get_bare_categories` to deal with the mismatch between e.g.
known location `Yugoslavia` declaring itself a `country` but definitions of it declaring it a `former country`. It
causes the non-former version of the specified placetype to be included in the returned equivalents along with the
former placetypes. [FIXME: This should apply only to the entries in `former_countries` but it's tricky to do that now;
fix this in the known-location refactor. -- The known-location refactor is already done but we haven't yet fixed this.]
]==]
function export.get_placetype_equivs(placetype, props)
local no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former
local form_of_directive
if props then
no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former =
props.no_fallback, props.no_split_qualifiers, props.no_check_for_inherently_former, props.from_category,
props.register_former_as_non_former
form_of_directive = props.form_of_directive
end
local equivs = {}
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. `qualifier` is
-- the preceding qualifier to insert into `equivs` along with the placetype (see comment at top of function). If
-- `from_category` is given, we also check for a category-specific entry consisting of the placetype followed by
-- `!`, and in all cases we also check to see if `placetype` is plural, and if so, insert the singularized version
-- along with its fallbacks (if any) in `placetype_data`. `form_of_prefix` is a form-of prefix such as
-- `OFFICIAL_NAME_OF`. If specified, we check the fallbacks of `placetype` without the prefix but then insert into
-- `equivs` the prefixed placetype. This way, if the user says e.g. {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}},
-- we will correctly categorize into [[:Category:Official names of countries]], rather than only trying to look up
-- `OFFICIAL_NAME_OF island country` and failing, falling back ultimately to [[:Category:Official names of places]].
local function insert_placetype_and_fallbacks(qualifier, placetype, form_of_prefix)
local function insert_equiv(pt)
if form_of_prefix then
-- Let's say the user says {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}} and we have
-- no entry for `OFFICIAL_NAME_OF island country` but we do for `OFFICIAL_NAME_OF country` (which we end
-- up processing because `island country` falls back to `country`), and that entry in turn is defined
-- using a fallback. We have to insert that fallback-of-fallback, and the easiest/cleanest way of
-- handling this is by calling ourselves recursively.
insert_placetype_and_fallbacks(qualifier, form_of_prefix .. " " .. pt)
else
insert(equivs, {qualifier=qualifier, placetype=pt})
end
end
-- Insert the placetype, along with any fallbacks.
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if ptdata then
insert_equiv(canon_placetype)
if no_fallback then
return
end
local first_placetype = #equivs + 1
local prev_placetype = nil
while true do
local pt_value = export.placetype_data[canon_placetype]
if not pt_value then
internal_error("Fallback value %s specified for placetype %s but is not in `placetype_data`",
canon_placetype, prev_placetype)
end
if pt_value.fallback then
insert_equiv(pt_value.fallback)
local last_placetype = #equivs
if last_placetype - first_placetype >= 10 then
local fallback_loop = {}
for i = first_placetype, last_placetype do
insert(fallback_loop, equivs[i].placetype)
end
internal_error("Apparent loop in fallback chain: %s", table.concat(fallback_loop, " -> "))
end
prev_placetype = canon_placetype
canon_placetype = pt_value.fallback
else
break
end
end
end
end
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. This is a
-- wrapper around the more basic `insert_placetype_and_fallbacks()` which handles form-of directives. If there is no
-- form-of directive, this function directly calls `insert_placetype_and_fallbacks()`. We do things this way so that
-- form-of directives correctly combine with `former`-type qualifiers. Note that we also have special backups for
-- form-of directives that check `DIRECTIVE place` (and before that, `DIRECTIVE FORMER/ANCIENT place` is there's a
-- `former`-type directive); these backups live outside this function because we want them done once, late, rather
-- than in each invocation of `process_and_insert_placetype()`.
local function process_and_insert_placetype(qualifier, reduced_placetype)
if form_of_directive then
-- First check for e.g. `OFFICIAL_NAME_OF island country` and its fallbacks; then we look for fallbacks of
-- `island country` and check e.g. `OFFICIAL_NAME_OF country` and its fallbacks. All of this is handled by
-- `insert_placetype_and_fallbacks()` with appropriate parameters. After that, check the general class of
-- the directive, e.g. `subpolity` if something like `district` is given. (Eventually, we check for
-- `OFFICIAL_NAME_OF place` as a backup, but this happens at the end outside the loop over qualifiers.)
insert_placetype_and_fallbacks(qualifier, reduced_placetype, form_of_directive)
if not no_fallback then
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype)
local directive_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, form_of_directive .. "_type") or
export.get_placetype_prop(pt, "class") end
)
if not directive_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s in conjunction with form-of directive %s, placetype data " ..
'located but directive-specific type property %s missing, and so is "class"; ' ..
"placetypes searched are %s", reduced_placetype, form_of_directive,
form_of_directive .. "_type", reduced_placetype_equivs)
else
-- This should be allowed, as we allow unrecognized placetypes in general.
end
elseif directive_type ~= "!" then
insert_placetype_and_fallbacks(qualifier, directive_type, form_of_directive)
end
end
else
insert_placetype_and_fallbacks(qualifier, reduced_placetype)
end
end
-- Successively split off recognized qualifiers and loop over successively greater sets of qualifiers from the left
-- (unless `no_split_qualifiers` is specified, in which case we don't check for qualifiers).
local splits
if no_split_qualifiers then
splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
else
splits = export.split_qualifiers_from_placetype(placetype)
end
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, reduced_placetype = unpack(split, 1, 3)
-- If a special "former" qualifier like `former` or `historical` isn't present, and
-- `no_check_for_inherently_former` is not given (this flag is used to avoid infinite loops), check for
-- "inherently former" placetypes like `satrapy` and `treaty port` that always refer to no-longer-existing
-- placetypes, and handle accordingly.
local unlinked_this_qualifier
if this_qualifier and this_qualifier:find("%[") then
unlinked_this_qualifier = export.remove_links_and_html(this_qualifier)
else
unlinked_this_qualifier = this_qualifier
end
local former_qualifiers = this_qualifier and export.former_qualifiers[unlinked_this_qualifier] or nil
if not former_qualifiers and not no_check_for_inherently_former then
former_qualifiers = export.get_equiv_placetype_prop(reduced_placetype,
function(pt) return export.get_placetype_prop(pt, "inherently_former") end,
{no_check_for_inherently_former = true})
end
-- If a special "former" qualifier like `former` or `historical` is present, map it to the appropriate internal
-- qualifiers (`ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
-- qualifiers), fetch the `former_type` property, and treat the placetype as if a concatenation of the mapped
-- qualifier(s) and the value of `former_type`. For example, if `medieval village` is given, we map `medieval`
-- to `ANCIENT` and `FORMER`, and `village` to its `former_type` of `settlement`, and enter the placetypes
-- `ANCIENT settlement` and `FORMER settlement` (in that order) into `equivs`. If the placetype following the
-- "former" qualifier is recognized in `placetype_data` but has no `former_type` and no fallback with a
-- `former_type` specified, it is an internal error; but if the placetype isn't recognized (e.g. something like
-- `former greenhouse` is specified and we don't have an entry for `greenhouse`), just track the occurrence and
-- don't enter anything into `equivs`.
if former_qualifiers then
-- FIXME: Should we respect `no_fallback` here? My instinct says no.
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype, {
no_check_for_inherently_former = true
})
local former_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, "former_type") or
export.get_placetype_prop(pt, "class") end
)
if not former_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s, placetype data located but `former_type` missing; " ..
"placetypes searched are %s", reduced_placetype, reduced_placetype_equivs)
else
-- Enable error when we've verified there aren't any examples.
track("bad-former-placetype")
track("bad-former-placetype/" .. reduced_placetype)
--process_error("For placetype '%s', unrecognized placetype following 'former'-type " ..
-- "qualifier; searched placetype(s) %s", reduced_placetype, dump(reduced_placetype_equivs))
end
elseif former_type ~= "!" then
-- First check directly for `ANCIENT/FORMER` + the original following placetype. This makes it possible
-- for (e.g.) former provinces of the Roman empire to be categorized specially.
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. reduced_placetype)
end
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. former_type)
end
-- HACK! See explanation above for `register_former_as_non_former`.
if register_former_as_non_former then
process_and_insert_placetype(prev_qualifier, reduced_placetype)
end
-- If we're processing a form-of directive, after doing everything else we do
-- `DIRECTIVE ANCIENT/FORMER place` e.g. `OFFICIAL_NAME_OF FORMER place` as a backup.
if form_of_directive and not no_fallback then
for _, former_qualifier in ipairs(former_qualifiers) do
insert_placetype_and_fallbacks(prev_qualifier, form_of_directive .. " " .. former_qualifier ..
" place")
end
end
-- Don't continue processing equivs. The reason is probably the same as the `break` below for
-- qualifier_to_placetype_equivs[]; categories for `former BLAH` are set using `default`, and
-- non-former equivs will otherwise take precedence.
break
end
end
-- Then see if the rightmost split-off qualifier is in qualifier_to_placetype_equivs
-- (e.g. 'fictional *' -> 'fictional location'). If so, add the mapping.
if this_qualifier and export.qualifier_to_placetype_equivs[unlinked_this_qualifier] then
insert(equivs, {
qualifier=prev_qualifier,
placetype=export.qualifier_to_placetype_equivs[unlinked_this_qualifier]
})
-- Don't continue processing equivs; otherwise, if we specify 'mythological city', even though the
-- equivalent entry for 'mythological location' gets inserted ahead of the entry for 'city', the
-- latter ends up generating the category because the category for 'mythological location' is set as
-- the default value, which is used only when no non-default category can be found.
break
end
-- Finally, join the rightmost split-off qualifier to the previously split-off qualifiers to form a combined
-- qualifier, and add it along with reduced_placetype and any mapping in placetype_data for reduced_placetype.
-- NOTE: The first time through this loop, both `prev_qualifier` and `this_qualifier` are nil, and this inserts
-- the full placetype into `equivs`.
local qualifier = prev_qualifier and prev_qualifier .. " " .. this_qualifier or this_qualifier
process_and_insert_placetype(qualifier, reduced_placetype)
-- If `no_fallback` and there's an entry in `placetype_data` for this placetype, don't include any reduced
-- placetypes to avoid the "overseas territory treated as a territory" issue describe above.
if no_fallback then
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(reduced_placetype, from_category)
if canon_placetype then
break
end
end
end
-- If we're processing a form-of directive, after doing everything else we do `DIRECTIVE place` e.g.
-- `OFFICIAL_NAME_OF place` as a backup; but only if either the placetype as a whole is recognized or the placetype
-- begins with a recognized qualifier. This latter check is to avoid categorizing into e.g.
-- [[Category:en:Former names of places]] in an invocation like
-- {{place|en|@former name of:Democratic Republic of the Congo|country|r/Central Africa|;|used from 1971–1997}};
-- the `used from 1971–1997` gets treated as a placetype and we're called on it.
if form_of_directive and not no_fallback and (splits[2] or export.get_placetype_data(placetype, from_category)) then
insert_placetype_and_fallbacks(nil, form_of_directive .. " place")
end
return equivs
end
function export.get_equiv_placetype_prop_from_equivs(equivs, fun, continue_on_nil_only)
for _, equiv in ipairs(equivs) do
local retval = fun(equiv.placetype)
if continue_on_nil_only and retval ~= nil or not continue_on_nil_only and retval then
return retval, equiv
end
end
return nil, nil
end
--[==[
Given a placetype `placetype` and a function `fun` of one argument, iteratively call the function on equivalent
placetypes fetched from `get_placetype_equivs` until the function returns a non-falsy value (i.e. not {nil} or {false});
but if `continue_on_nil_only` is specified, the iterations continue until the function returns non non-{nil} value.
FIXME: We should make `continue_on_nil_only` the default; but this requires changing some callers.) When `fun` returns a
non-falsy or non-{nil} value, `get_equiv_placetype_prop` returns two values: the value returned by `fun` and the
equivalent placetype that triggered the non-falsy (or non-{nil}) return value. If `fun` never returns a non-falsy (or
non-{nil}) value, `get_equiv_placetype_prop` returns {nil} for both return values. If `placetype` is passed in as {nil},
the return value is the result of calling `fun` on {nil} (whatever it is) with {nil} for the second return value.
]==]
function export.get_equiv_placetype_prop(placetype, fun, props)
if not placetype then
return fun(nil), nil
end
return export.get_equiv_placetype_prop_from_equivs(export.get_placetype_equivs(placetype, props), fun,
props and props.continue_on_nil_only)
end
--[==[
Return the article that is used with an entry placetype. We proceed as follows:
# See if there is a recognized qualifier at the beginning that specifies an article (including `false` for no article).
This takes precedence over anything else, so that e.g. `various capitals` gets no article rather than "`the"`.
# Then check the placetype or any equivalent placetype for the `entry_placetype_use_the` property, indicating that
`"the"` should be used.
# Otherwise we look to see if the placetype itself (not any equivalents, even those involving deleting a qualifier from
the beginning) has an entry in `placetype_data` that specifies the indefinite article using `entry_placetype_use_the`
(principally for use with placetypes like `union territory`).
# Otherwise, we use [[Module:en-utilities]] to apply the standard algorithm to generate `"an"` for words beginning with
a vowel and `"a"` otherwise.
If `ucfirst` is true, the first letter of the article is made upper-case.
]==]
function export.get_placetype_article(placetype, ucfirst)
local art
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if type(canon) == "table" then
art = canon.article
end
end
if art == false then
return art
end
if art == nil then
local placetype_use_the = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "entry_placetype_use_the") end)
if placetype_use_the then
art = "the"
else
art = export.get_placetype_prop(placetype, "entry_placetype_indefinite_article")
if not art then
art = require(en_utilities_module).get_indefinite_article(placetype)
end
end
end
if ucfirst then
art = m_strutils.ucfirst(art)
end
return art
end
--[==[
Return the preposition that should be used after `placetype` when occurring as an entry placetype or in categories
(e.g. `city >in< France` but `country >of< South America`). The preposition defaults to `"in"` if not specified.
]==]
function export.get_placetype_entry_preposition(placetype)
local pt_prep = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "preposition") end
)
return pt_prep or "in"
end
--[==[
Given a place desc (see top of file) and a holonym object (see top of file), add a key/value into the place desc's
`holonyms_by_placetype` field corresponding to the placetype and placename of the holonym. For example, corresponding
to the holonym "c/Italy", a key "country" with the list value {"Italy"} will be added to the place desc's
`holonyms_by_placetype` field. If there is already a key with that place type, the new placename will be added to the
end of the value's list.
]==]
function export.key_holonym_into_place_desc(place_desc, holonym)
if not holonym.placetype then
return
end
-- Key in equivalent placetypes, so that e.g. `cities/San Francisco` gets keyed under `city`; but don't do
-- fallbacks, as it doesn't seem correct for the "do other holonyms of the same placetype" algorithm to do holonyms
-- of different types just because they have the same fallback.
local equiv_placetypes = export.get_placetype_equivs(holonym.placetype, {no_fallback = true})
local unlinked_placename = holonym.unlinked_placename
for _, equiv in ipairs(equiv_placetypes) do
local placetype = equiv.placetype
if not place_desc.holonyms_by_placetype then
place_desc.holonyms_by_placetype = {}
end
if not place_desc.holonyms_by_placetype[placetype] then
place_desc.holonyms_by_placetype[placetype] = {unlinked_placename}
else
insert(place_desc.holonyms_by_placetype[placetype], unlinked_placename)
end
end
end
--[=[
Construct a formatted link from the raw link spec `link` given the canonical singular placetype `sg_placetype`. If the
placetype was originally plural, `orig_placetype` should contain this plural value; otherwise it should be nil. This
will construct the appropriate type of link that displays as `orig_placetype` (or otherwise `sg_placetype`) but links to
whatever the `link` spec specifies (which may be `sg_placetype`, a Wikipedia article, etc.). `ptdata` is the placetype
data structure for the placetype, and `from_category` indicates that we are generating the description of a category
(otherwise we are generating the display form of an entry placetype).
]=]
local function make_placetype_link(link, sg_placetype, orig_placetype, ptdata, from_category, noerror)
if not from_category and ptdata.disallow_in_entries then
if noerror then
return "[not meant to be specified directly, with warning: " .. ptdata.disallow_in_entries .. "]"
else
process_error("Placetype %s is not meant to be specified directly: " .. ptdata.disallow_in_entries, sg_placetype)
end
end
if link == nil then
internal_error("Placetype data present for placetype %s but no link= setting given", sg_placetype)
elseif link == true then
if orig_placetype then
return ("[[%s|%s]]"):format(sg_placetype, orig_placetype)
else
return ("[[%s]]"):format(sg_placetype)
end
elseif link == false then
process_error("Placetype %s is not meant to be specified directly, but is only for internal use", sg_placetype)
elseif link == "w" then
return ("[[w:%s|%s]]"):format(sg_placetype, orig_placetype or sg_placetype)
elseif link == "separately" then
if orig_placetype then
local sg_words = split(sg_placetype, " ")
local orig_words = split(orig_placetype, " ")
if #sg_words ~= #orig_words then
internal_error("Can't construct 'separately' link for plural placetype %s as original placetype %s " ..
"has different number of words", orig_placetype, sg_placetype)
else
for i = 1, #sg_words do
if sg_words[i] == orig_words[i] then
sg_words[i] = ("[[%s]]"):format(sg_words[i])
else
sg_words[i] = ("[[%s|%s]]"):format(sg_words[i], orig_words[i])
end
end
return concat(sg_words, " ")
end
else
return (sg_placetype:gsub("([^ ]+)", "[[%1]]"))
end
elseif link:find("^%+") then
link = link:sub(2) -- discard initial +
return ("[[%s|%s]]"):format(link, orig_placetype or sg_placetype)
elseif not orig_placetype then
return link
else
return require(en_utilities_module).pluralize(link)
end
end
--[==[
Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the
plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying
as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description
of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like
[[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or
`"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description
for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with
special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the
"full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is
prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be
disallowed.
]==]
function export.get_placetype_display_form(placetype, category_type, return_full, noerror)
local from_category = not not category_type
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if canon_placetype then
local raw_link
local function is_linked_string(str)
return type(str) == "string" and str:find("%[%[")
end
if category_type then
local fetched_full
local function fetch_maybe_full(prop)
local retval = ptdata["full_" .. prop]
if retval ~= nil then
if return_full then
return retval, true
else
internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval)
end
end
return ptdata[prop], false
end
local function maybe_prefix(str)
if return_full and not fetched_full then
return "names of " .. str
else
return str
end
end
-- Careful with `false` as possible value.
if category_type == "top-level" then
raw_link, fetched_full = fetch_maybe_full("category_link_top_level")
elseif category_type == "noncity" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity")
elseif category_type == "city" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_city")
else
internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"',
category_type)
end
if type(raw_link) == "string" then
return maybe_prefix(raw_link), ptdata
elseif raw_link ~= nil then
return raw_link, ptdata
end
raw_link, fetched_full = fetch_maybe_full("category_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
if ptmatch == "plural" then
raw_link, fetched_full = fetch_maybe_full("plural_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
end
if raw_link == nil then
raw_link, fetched_full = fetch_maybe_full("link")
end
if raw_link == false then
return raw_link, ptdata
end
return maybe_prefix(make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata
else
if ptmatch == "plural" then
raw_link = ptdata.plural_link
if raw_link == false then
process_error("Placetype %s cannot appear plural", placetype)
end
if is_linked_string(raw_link) then
return raw_link, ptdata
end
end
if raw_link == nil then
raw_link = ptdata.link
end
return make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata
end
end
return nil
end
local function resolve_unlinked_placename_display_aliases(placetype, placename)
local equiv_placetypes = export.get_placetype_equivs(placetype)
for i, equiv in ipairs(equiv_placetypes) do
equiv_placetypes[i] = equiv.placetype
end
local all_display_aliases_found = {}
local all_others_found = {}
for group, key, spec in m_locations.iterate_matching_location {
placetypes = equiv_placetypes,
placename = placename,
alias_resolution = "display",
} do
if spec.alias_of and spec.display then
insert(all_display_aliases_found, {group, key, spec, spec.display_as_full})
else
insert(all_others_found, {group, key, spec})
end
end
if not all_display_aliases_found[1] then
return placename
elseif all_display_aliases_found[2] then
internal_error("Found multiple matching display aliases for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
elseif all_others_found[1] then
internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
else
local group, key, spec, as_full = unpack(all_display_aliases_found[1])
local full, elliptical = m_locations.key_to_placename(group, key)
return as_full and full or elliptical
end
end
--[==[
If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged.
Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`,
`country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as
`United States`.
'''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they
should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed.
For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to
`Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political
connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!)
to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two
terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to
`North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly
display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve
alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and
consistency.
]==]
function export.resolve_placename_display_aliases(placetype, placename)
-- If the placename is a link, apply the alias inside the link.
-- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will
-- be empty.
local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$")
if link then
if linktext ~= "" then
local alias = resolve_unlinked_placename_display_aliases(placetype, linktext)
return "[[" .. link .. "|" .. alias .. "]]"
else
local alias = resolve_unlinked_placename_display_aliases(placetype, link)
return "[[" .. alias .. "]]"
end
else
return resolve_unlinked_placename_display_aliases(placetype, placename)
end
end
--[==[
Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key.
]==]
function export.get_prefixed_key(key, spec)
if spec.the then
return "the " .. key
else
return key
end
end
-- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary.
export.iterate_matching_location = m_locations.iterate_matching_location
--[=[
Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the
specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If
`first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is
specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified
by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the
holonym index and holonym structure, similar to `ipairs()`.
]=]
function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms)
local stop_at_also = not not first_holonym_index
return function(place_desc, index)
while true do
index = index + 1
local this_holonym = place_desc.holonyms[index]
-- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also`
-- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym
-- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with
-- `:also`.
if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then
return nil
end
-- If not placetype, we're processing raw text, which we normally want to skip.
if include_raw_text_holonyms or this_holonym.placetype then
return index, this_holonym
end
end
end, place_desc, first_holonym_index and first_holonym_index - 1 or 0
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all
such known locations, returning for each location the corresponding key, spec and group as well as the trail of
ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between
the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data`
are:
* `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with
`iterate_matching_location()`.
* `holonym_placename`: The placename of the holonym.
* `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the
holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms
following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none
exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.)
* `place_desc`: Description of the place; used for the holonyms, to check for container mismatches.
Returns four values: the location group, the canonical key by which the location is known, the spec object describing
the location and the trail of ancestral containers for the location. The first three values are the same as for
`iterate_matching_location`.
]==]
function export.iterate_matching_holonym_location(data)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
local matching_location_iterator = m_locations.iterate_matching_location {
placetypes = holonym_placetype,
placename = holonym_placename,
}
return function()
while true do
local group, key, spec = matching_location_iterator()
if not group then
return nil
end
local container_trail = {}
-- For each level of container, check that there are no mismatches (i.e. other location of the same
-- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container
-- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city
-- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of
-- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark,
-- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New
-- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough,
-- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If
-- there are no mismatches at any level we assume we're dealing with the right known location.
--
-- If at a given level there are multiple containing locations, we count a match if any holonym matches any
-- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any
-- containing location.
local containers_mismatch = false
for containers in m_locations.iterate_containers(group, key, spec) do
insert(container_trail, containers)
local match_at_level = false
local mismatch_at_level = false
for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc,
holonym_index and holonym_index + 1 or nil) do
local other_source_holonym = other_holonym.augmented_from_holonym
if other_source_holonym and other_source_holonym.placetype == holonym_placetype and
other_source_holonym.unlinked_placename ~= holonym_placename then
-- Ignore holonyms added during the augmentation process for other holonyms of the same
-- placetype as the placetype of the holonym we're considering. See comment in
-- augment_holonyms_with_container() for why we do this.
-- continue; grrr, no 'continue' in Lua
else
local holonym_matches_at_level = false
local holonym_exists_with_same_placetype = false
for _, container in ipairs(containers) do
if not container.spec.no_check_holonym_mismatch then
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
local placetypes = container.spec.placetype
if type(placetypes) ~= "table" then
placetypes = {placetypes}
end
local placetype_equivs = {}
for _, pt in ipairs(placetypes) do
m_table.extend(placetype_equivs, export.get_placetype_equivs(pt))
end
local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype and
(other_holonym.unlinked_placename == full_container_placename or
other_holonym.unlinked_placename == elliptical_container_placename)
end
)
if this_holonym_matches then
holonym_matches_at_level = true
break
end
local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype
end
)
if this_holonym_exists_with_same_placetype then
-- We seem to have a mismatch at this level. But before we decide conclusively that this
-- is the case, check to see whether the putative mismatch is an alias and matches when
-- we resolve the alias.
for oh_group, oh_key, oh_spec, oh_container_trail in
export.iterate_matching_holonym_location {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = place_desc,
} do
local oh_full_placename, oh_elliptical_placename =
m_locations.key_to_placename(oh_group, oh_key)
if oh_full_placename == full_container_placename or
oh_elliptical_placename == elliptical_container_placename then
-- Alias matched when resolved.
this_holonym_matches = true
break
end
end
if this_holonym_matches then
-- Alias matched above when resolved.
holonym_matches_at_level = true
break
else
-- Not an alias, or doesn't match when resolved. We have a true mismatch.
holonym_exists_with_same_placetype = true
end
end
end
end
if holonym_matches_at_level then
match_at_level = true
break
end
if holonym_exists_with_same_placetype then
mismatch_at_level = true
end
end
end
if not match_at_level and mismatch_at_level then
containers_mismatch = true
break
end
end
if not containers_mismatch then
return group, key, spec, container_trail
end
end
end
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the
corresponding key, spec and group as well as the trail of ancestral containers. This is like
`iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this
would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To
fix this, specify additional following disambiguating holonyms, e.g.
{{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}.
]==]
function export.find_matching_holonym_location(data)
local all_found = {}
for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do
insert(all_found, {group, key, spec, container_trail})
end
if not all_found[1] then
return nil
elseif all_found[2] then
local holonym_placetype = data.holonym_placetype
if type(holonym_placetype) == "table" then
holonym_placetype = concat(holonym_placetype, ",")
end
local found_keys = {}
for _, found in ipairs(all_found) do
local _, key, _, _ = unpack(found)
insert(found_keys, key)
end
error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " ..
"containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys)))
else
return unpack(all_found[1])
end
end
------------------------------------------------------------------------------------------
-- Placename and placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their
canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which
applies to categorization and other processes but not to display.
The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state",
"province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g.
"census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype.
Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be
interpreted as "department", "district" or "division").
]==]
export.placetype_aliases = {
["acomm"] = "autonomous community",
["adr"] = "administrative region",
["adterr"] = "administrative territory", -- Pakistan
["aobl"] = "autonomous oblast",
["aokr"] = "autonomous okrug",
["ap"] = "autonomous province",
["apref"] = "autonomous prefecture",
["aprov"] = "autonomous province",
["ar"] = "autonomous region",
["arch"] = "archipelago",
["arep"] = "autonomous republic",
["aterr"] = "autonomous territory",
["atu"] = "autonomous territorial unit",
["bor"] = "borough",
["c"] = "country",
["can"] = "canton",
["carea"] = "council area",
["cc"] = "constituent country",
["cdblock"] = "community development block",
["cdep"] = "Crown dependency",
["CDP"] = "census-designated place",
["cdp"] = "census-designated place",
["clcity"] = "county-level city",
["co"] = "county",
["cobor"] = "county borough",
["colcity"] = "county-level city",
["coll"] = "collectivity",
["comm"] = "community",
["cont"] = "continent",
["contr"] = "continental region",
["contregion"] = "continental region",
["cpar"] = "civil parish",
["damun"] = "direct-administered municipality",
["dep"] = "dependency",
["department capital"] = "departmental capital",
["dept"] = "department",
["depterr"] = "dependent territory",
["dist"] = "district",
["distmun"] = "district municipality",
["div"] = "division",
["emp"] = "empire",
["fpref"] = "French prefecture",
["gov"] = "governorate",
["govnat"] = "governorate",
["home-rule city"] = "home rule city",
["home-rule municipality"] = "home rule municipality",
["inner-city area"] = "inner city area",
["ires"] = "Indian reservation",
["isl"] = "island",
["lbor"] = "London borough",
["lga"] = "local government area",
["lgarea"] = "local government area",
["lgd"] = "local government district",
["lgdist"] = "local government district",
["metbor"] = "metropolitan borough",
["metcity"] = "metropolitan city",
["metmun"] = "metropolitan municipality",
["mtn"] = "mountain",
["mun"] = "municipality",
["mundist"] = "municipal district",
["nonmetropolitan county"] = "non-metropolitan county",
["obl"] = "oblast",
["okr"] = "okrug",
["p"] = "province",
["par"] = "parish",
["parmun"] = "parish municipality",
["pen"] = "peninsula",
["plcity"] = "prefecture-level city",
["plcolony"] = "Polish colony",
["pref"] = "prefecture",
["prefcity"] = "prefecture-level city",
["preflcity"] = "prefecture-level city",
["prov"] = "province",
["r"] = "region",
["range"] = "mountain range",
["rcm"] = "regional county municipality",
["rcomun"] = "regional county municipality",
["rdist"] = "regional district",
["rep"] = "republic",
["rhrom"] = "rural hromada",
["riv"] = "river",
["rmun"] = "regional municipality",
["robor"] = "royal borough",
["romp"] = "Roman province",
["runit"] = "regional unit",
["rurmun"] = "rural municipality",
["s"] = "state",
["sar"] = "special administrative region",
["shrom"] = "settlement hromada",
["spref"] = "subprefecture",
["sprefcity"] = "sub-prefectural city",
["sprovcity"] = "subprovincial city",
["submet city"] = "sub-metropolitan city",
["submetropolitan city"] = "sub-metropolitan city",
["sub-prefecture-level city"] = "sub-prefectural city",
["sub-provincial city"] = "subprovincial city",
["sub-provincial district"] = "subprovincial district",
["terr"] = "territory",
["terrauth"] = "territorial authority",
["twp"] = "township",
["twpmun"] = "township municipality",
["uauth"] = "unitary authority",
["ucomm"] = "unincorporated community",
["udist"] = "unitary district",
["uhrom"] = "urban hromada",
["uterr"] = "union territory",
["utwpmun"] = "united township municipality",
["val"] = "valley",
["vdc"] = "village development committee",
["vil"] = "village",
["voi"] = "voivodeship",
["wcomm"] = "Welsh community",
}
local no_link_def_article = {link = false, article = "the"}
local no_link_no_article = {link = false, article = false}
--[==[ var:
These qualifiers can be prepended onto any placetype and will be handled correctly. For example, the placetype
`large city` will be displayed as `large <nowiki>[[city]]</nowiki>` and categorized as if `city` were specified. If the
value in the following table is a string, the qualifier will display according to the string. If the value is `true`,
the qualifier will be linked to its corresponding Wiktionary entry. If the value is `false`, the qualifier will not be
linked but will appear as-is. Note that these qualifiers do not override placetypes with entries elsewhere that contain
those same qualifiers. For example, the entry for `inland sea` in `placetype_data` will apply in preference to treating
`inland sea` as equivalent to `sea`.
]==]
export.placetype_qualifiers = {
-- generic qualifiers
["huge"] = false,
["tiny"] = false,
["large"] = false,
["big"] = false,
["mid-size"] = false,
["mid-sized"] = false,
["small"] = false,
["sizable"] = false,
["important"] = false,
["long"] = false,
["short"] = false,
["major"] = false,
["minor"] = false,
["high"] = false,
["tall"] = false,
["low"] = false,
["left"] = false, -- left tributary
["right"] = false, -- right tributary
["modern"] = false, -- for use in opposition to "ancient" in another definition
-- "former" qualifiers
["abandoned"] = true,
["ancient"] = true,
["deserted"] = true,
["extinct"] = true,
["former"] = false,
["historic"] = "historical",
["historical"] = true,
["medieval"] = true,
["mediaeval"] = true,
["ruined"] = true,
["traditional"] = true,
-- sea qualifiers
["coastal"] = true,
["inland"] = true, -- note, we also have an entry in placetype_data for 'inland sea' to get a link to [[inland sea]]
["maritime"] = true,
["overseas"] = true,
["seaside"] = true,
["beachfront"] = true,
["beachside"] = true,
["riverside"] = true,
-- lake qualifiers
["freshwater"] = true,
["saltwater"] = true,
["endorheic"] = true,
["oxbow"] = true,
["ox-bow"] = "[[oxbow]]", -- [[ox-bow]] is a red link
["tidal"] = true,
-- land qualifiers
["hilltop"] = true,
["hilly"] = true,
["insular"] = true,
["peninsular"] = true,
["chalk"] = true,
["karst"] = true,
["limestone"] = true,
["mountainous"] = true,
["mountaintop"] = true,
["alpine"] = true,
["volcanic"] = true, -- for an island
-- political status qualifiers
["autonomous"] = true,
["incorporated"] = true,
["special"] = true,
["unincorporated"] = true,
["coterminous"] = true,
-- monetary status/etc. qualifiers
["fashionable"] = true,
["wealthy"] = true,
["affluent"] = true,
["declining"] = true,
-- city vs. rural qualifiers
["urban"] = true,
["suburban"] = true,
["exurban"] = true,
["outlying"] = true,
["remote"] = true,
["rural"] = true,
["outback"] = true,
["inner"] = false,
["inner-city"] = true,
["central"] = false,
["outer"] = false,
-- land use qualifiers
["residential"] = true,
["agricultural"] = true,
["business"] = true,
["commercial"] = true,
["industrial"] = true,
-- business use qualifiers
["railroad"] = true,
["railway"] = true,
["farming"] = true,
["fishing"] = true,
["mining"] = true,
["logging"] = true,
["cattle"] = true,
-- tourism use qualifiers
["resort"] = true, -- note, we also have 'resort city' and 'resort town', that take precedecne
["spa"] = true, -- note, we also have 'spa city' and 'spa town', that take precedecne
["ski"] = true, -- note, we also have 'ski resort city' and 'ski resort town', that take precedecne
-- religious qualifiers
["holy"] = true,
["sacred"] = true,
["religious"] = true,
["secular"] = true,
-- qualifiers for nonexistent places
["claimed"] = false,
["fictional"] = true,
["legendary"] = true,
["mythical"] = true,
["mythological"] = true,
-- directional qualifiers
["northern"] = false,
["southern"] = false,
["eastern"] = false,
["western"] = false,
["north"] = false,
["south"] = false,
["east"] = false,
["west"] = false,
["northeastern"] = false,
["southeastern"] = false,
["northwestern"] = false,
["southwestern"] = false,
["northeast"] = false,
["southeast"] = false,
["northwest"] = false,
["southwest"] = false,
-- seasonal qualifiers
["summer"] = true, -- e.g. for 'summer capital'
["winter"] = true,
-- legal status qualifiers
-- FIXME: Two-word qualifiers don't work yet. But you can enter "de-facto" and it's canonicalized to [[de facto]].
["official"] = true,
["unofficial"] = true,
["de facto"] = true, -- 'de facto capital'
["de-facto"] = "[[de facto]]", -- [[de-facto]] is a red link
["de jure"] = true, -- 'de jure capital'
["de-jure"] = "[[de jure]]", -- [[de-jure]] is a red link
-- NOTE: 'unrecognized/unrecognised' are handled as placetypes 'unrecognized country', 'unrecognized state'
-- misc. qualifiers
["planned"] = true,
["chartered"] = true,
["landlocked"] = true,
["uninhabited"] = true,
-- superlative qualifiers
["first"] = no_link_def_article,
["second"] = no_link_def_article, -- for "second largest" etc.
["third"] = no_link_def_article,
["fourth"] = no_link_def_article,
["last"] = no_link_def_article,
["only"] = no_link_def_article,
["sole"] = no_link_def_article,
["main"] = no_link_def_article,
["largest"] = no_link_def_article,
["biggest"] = no_link_def_article,
["smallest"] = no_link_def_article,
["shortest"] = no_link_def_article,
["longest"] = no_link_def_article,
["tallest"] = no_link_def_article,
["highest"] = no_link_def_article,
["lowest"] = no_link_def_article,
["leftmost"] = no_link_def_article,
["rightmost"] = no_link_def_article,
["innermost"] = no_link_def_article,
["outermost"] = no_link_def_article,
["northernmost"] = no_link_def_article,
["southernmost"] = no_link_def_article,
["westernmost"] = no_link_def_article,
["easternmost"] = no_link_def_article,
["northwesternmost"] = no_link_def_article,
["southwesternmost"] = no_link_def_article,
["northeasternmost"] = no_link_def_article,
["southeasternmost"] = no_link_def_article,
-- several/various
["several"] = no_link_no_article,
["various"] = no_link_no_article,
["numerous"] = no_link_no_article,
["multiple"] = no_link_no_article,
["many"] = no_link_no_article,
["other"] = no_link_no_article,
}
--[==[ var:
In this table, the key qualifiers should be treated the same as the value qualifiers for categorization purposes. This
is overridden by `placetype_data` and `qualifier_to_placetype_equivs`.
]==]
export.former_qualifiers = {
["abandoned"] = {"FORMER"},
["ancient"] = {"ANCIENT", "FORMER"},
["former"] = {"FORMER"},
["extinct"] = {"FORMER"},
["historic"] = {"FORMER"},
["historical"] = {"FORMER"},
["medieval"] = {"ANCIENT", "FORMER"},
["mediaeval"] = {"ANCIENT", "FORMER"},
["ruined"] = {"ANCIENT", "FORMER"},
["traditional"] = {"FORMER"},
}
--[==[ var:
In this table, any placetypes containing these qualifiers that do not occur in `placetype_data` should be mapped to the
specified placetypes for categorization purposes. Entries here are overridden by `placetype_data`.
]==]
export.qualifier_to_placetype_equivs = {
["fictional"] = "fictional location",
["legendary"] = "mythological location",
["mythical"] = "mythological location",
["mythological"] = "mythological location",
-- For e.g. Taiwan as a "claimed province" of China; parts of Belize as claimed by Guatemala; various islands
-- claimed by various parties in East Asia. FIXME: We should conditionalize on what is being claimed since there are
-- also claimed capitals, e.g. Israel and Palestine claim Jerusalem as their capital.
["claimed"] = "claimed political division",
}
--[==[ var:
Mapping from placetypes to the corresponding plural category-only placetype for a capital of that placetype. The reverse
mapping also exists.
]==]
export.placetype_to_capital_cat = {
["autonomous community"] = "autonomous community capitals",
["canton"] = "cantonal capitals",
["comarca"] = "comarca capitals",
["country"] = "national capitals",
-- The following are not obviously different from 'county seats' but the latte terminology is used in the US.
["county"] = "county capitals",
["department"] = "departmental capitals",
["district"] = "district capitals",
["division"] = "division capitals",
["emirate"] = "emirate capitals",
["governorate"] = "governorate capitals",
["hromada"] = "hromada capitals",
["krai"] = "krai capitals",
["metropolitan city"] = "metropolitan city capitals",
["municipality"] = "municipal capitals",
["oblast"] = "oblast capitals",
["okrug"] = "okrug capitals",
["prefecture"] = "prefectural capitals",
["province"] = "provincial capitals",
["raion"] = "raion capitals",
["regency"] = "regency capitals",
["region"] = "regional capitals",
["regional unit"] = "regional unit capitals",
["republic"] = "republic capitals",
["state"] = "state capitals",
["territory"] = "territorial capitals",
["voivodeship"] = "voivodeship capitals",
}
--[==[ var:
This contains placenames that should be preceded by an article (almost always "the"). '''NOTE''': There are multiple
ways that placenames can come to be preceded by "the":
# Listed here.
# Given in [[Module:place/locations]] with an initial "the". All such placenames are added to this map by the code
just below the map.
# The placetype of the placename has `holonym_use_the = true` in its placetype_data.
# A regex in placename_the_re matches the placename.
Note that "the" is added only before the first holonym in a place description.
]==]
export.placename_article = {
-- This should only contain info that can't be inferred from [[Module:place/locations]].
["archipelago"] = {
["Cyclades"] = "the",
["Dodecanese"] = "the",
},
["country"] = {
["Holy Roman Empire"] = "the",
},
["empire"] = {
["Holy Roman Empire"] = "the",
},
["island"] = {
["North Island"] = "the",
["South Island"] = "the",
},
["region"] = {
["Balkans"] = "the",
["Russian Far East"] = "the",
["Caribbean"] = "the",
["Caucasus"] = "the",
["Middle East"] = "the",
["New Territories"] = "the",
["North Caucasus"] = "the",
["South Caucasus"] = "the",
["West Bank"] = "the",
["Gaza Strip"] = "the",
},
["valley"] = {
["San Fernando Valley"] = "the",
},
}
--[==[ var:
Regular expressions to apply to determine whether we need to put 'the' before a holonym. The key "*" applies to all
holonyms, otherwise only the regexes for the holonym's placetype apply.
]==]
export.placename_the_re = {
-- We don't need entries for peninsulas, seas, oceans, gulfs or rivers
-- because they have holonym_use_the = true.
["*"] = {"^Isle of ", " Islands$", " Mountains$", " Empire$", " Country$", " Region$", " District$", "^City of "},
["bay"] = {"^Bay of "},
["lake"] = {"^Lake of "},
["country"] = {"^Republic of ", " Republic$"},
["republic"] = {"^Republic of ", " Republic$"},
["region"] = {" [Rr]egion$"},
["river"] = {" River$"},
["local government area"] = {"^Shire of "},
["county"] = {"^Shire of "},
["Indian reservation"] = {" Reservation", " Nation"},
["tribal jurisdictional area"] = {" Reservation", " Nation"},
}
--[==[ var:
If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of
holonyms for categorization (but not display) purposes.
]==]
export.cat_implications = {
["region"] = {
["Eastern Europe"] = {"continent/Europe"},
["Central Europe"] = {"continent/Europe"},
["Western Europe"] = {"continent/Europe"},
["South Europe"] = {"continent/Europe"},
["Southern Europe"] = {"continent/Europe"},
["Northern Europe"] = {"continent/Europe"},
["Northeast Europe"] = {"continent/Europe"},
["Northeastern Europe"] = {"continent/Europe"},
["Southeast Europe"] = {"continent/Europe"},
["Southeastern Europe"] = {"continent/Europe"},
["North Caucasus"] = {"continent/Europe"},
["South Caucasus"] = {"continent/Asia"},
["South Asia"] = {"continent/Asia"},
["Southern Asia"] = {"continent/Asia"},
["East Asia"] = {"continent/Asia"},
["Eastern Asia"] = {"continent/Asia"},
["Central Asia"] = {"continent/Asia"},
["West Asia"] = {"continent/Asia"},
["Western Asia"] = {"continent/Asia"},
["Southeast Asia"] = {"continent/Asia"},
["North Asia"] = {"continent/Asia"},
["Northern Asia"] = {"continent/Asia"},
["Anatolia"] = {"continent/Asia"},
["Asia Minor"] = {"continent/Asia"},
["Mesopotamia"] = {"continent/Asia"},
["North Africa"] = {"continent/Africa"},
["Central Africa"] = {"continent/Africa"},
["West Africa"] = {"continent/Africa"},
["East Africa"] = {"continent/Africa"},
["Southern Africa"] = {"continent/Africa"},
["Central America"] = {"continent/Central America"},
["Caribbean"] = {"continent/North America"},
["Polynesia"] = {"continent/Oceania"},
["Micronesia"] = {"continent/Oceania"},
["Melanesia"] = {"continent/Oceania"},
["Siberia"] = {"country/Russia", "continent/Asia"},
["Russian Far East"] = {"country/Russia", "continent/Asia"},
["South Wales"] = {"constituent country/Wales", "continent/Europe"},
["Balkans"] = {"continent/Europe"},
["West Bank"] = {"country/Palestine", "continent/Asia"},
["Gaza"] = {"country/Palestine", "continent/Asia"},
["Gaza Strip"] = {"country/Palestine", "continent/Asia"},
}
}
------------------------------------------------------------------------------------------
-- Category and display handlers --
------------------------------------------------------------------------------------------
local function city_type_cat_handler(data)
local entry_placetype = data.entry_placetype
local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities")
if not generic_before_non_cities then
internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" ..
" setting", entry_placetype)
end
local plural_entry_placetype = export.pluralize_placetype(entry_placetype)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and not spec.is_city then
-- ZH: "法國的城市" (location_key + 的 + zh_placetype_name)
local zh_name_raw = export.get_zh_placetype_name(entry_placetype)
local zh_entry_name = zh_name_raw and export.format_zh_name(zh_name_raw) or plural_entry_placetype
local de = export.zh_strings.de_particle
local retcats = {export.get_prefixed_key(key, spec) .. de .. zh_entry_name}
if container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_entry_name)
end
end
return retcats
end
end
local function capital_city_cat_handler(data, non_city)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
-- The first time we're called we want to return something; otherwise we will be called for later-mentioned
-- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in
-- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital
-- category/categories we add below.
local retcats
if not non_city and place_desc.holonyms then
for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do
local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename
retcats = city_type_cat_handler {
entry_placetype = "city",
holonym_placetype = h_placetype,
holonym_placename = h_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if retcats then
break
end
end
end
if not retcats then
retcats = {}
end
-- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we
-- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State
-- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory'
-- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's
-- an entry for 'autonomous community').
-- ZH: look up Chinese capital label by holonym placetype ("首都", "省會", "首府", etc.)
local zh_capital_name = export.zh_capital_label_by_holonym_type[holonym_placetype]
if not zh_capital_name then
zh_capital_name = export.zh_capital_label_by_holonym_type[holonym_placetype:gsub("^.* ", "")]
end
local de = export.zh_strings.de_particle
if zh_capital_name then
local inserted_specific_variant_cat = false
if holonym_index then
-- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern
-- where we use :also to specify that a given city is the capital at multiple surrounding levels.
local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index
for h_index = holonym_index, #place_desc.holonyms do
if place_desc.holonyms[h_index].placetype then
matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location {
holonym_placetype = place_desc.holonyms[h_index].placetype,
holonym_placename = place_desc.holonyms[h_index].unlinked_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if matching_group then
matching_holonym_index = h_index
break
end
end
end
if matching_holonym_index == holonym_index then
if matching_container_trail[1] and not matching_spec.no_container_cat then
for _, container in ipairs(matching_container_trail[1]) do
-- ZH: "美國的首都" (location_key + 的 + zh_capital_name)
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_capital_name)
inserted_specific_variant_cat = true
end
end
elseif matching_holonym_index then
-- Check to make sure that the holonym placetype we were called on is listed among the
-- divtypes of the location we found.
local function insert_specific_variant_if_possible(key, spec)
return export.get_equiv_placetype_prop(holonym_placetype, function(pt)
local plural_holonym_placetype = export.pluralize_placetype(pt)
local saw_matching_div
if spec.divs then
local divs = spec.divs
if type(divs) ~= "table" then
divs = {divs}
end
for _, div in ipairs(divs) do
if type(div) ~= "table" then
div = {type = div}
end
if plural_holonym_placetype == div.type then
saw_matching_div = true
break
end
end
end
if saw_matching_div then
insert(retcats, export.get_prefixed_key(key, spec) .. de .. zh_capital_name)
return true
end
return false
end)
end
if insert_specific_variant_if_possible(matching_key, matching_spec) then
inserted_specific_variant_cat = true
elseif not matching_spec.no_container_cat then
for _, containers in ipairs(matching_container_trail) do
local saw_no_container_cat = false
for _, container in ipairs(containers) do
if insert_specific_variant_if_possible(container.key, container.spec) then
inserted_specific_variant_cat = true
break
end
saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat
end
if inserted_specific_variant_cat or saw_no_container_cat then
break
end
end
end
end
else
-- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for
-- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing.
-- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to
-- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab.
-- Possibly we can just skip this case entirely.
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_capital_name)
inserted_specific_variant_cat = true
end
end
end
if not inserted_specific_variant_cat then
insert(retcats, zh_capital_name)
end
else
-- We didn't recognize the holonym placetype; fall back to generic capital label.
insert(retcats, "首都")
end
return retcats
end
--[=[
This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used
in two ways:
# To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and
[[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym.
# To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym
description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this
case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments,
administrative regions, and for the entire country, and for example we only want to categorize a demonym into
[[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym
invocation only adds the most specific holonym category and not the category of any containing polity (hence if we
add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]).
This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston`
as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and
[[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities
having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]],
[[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing
polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`).
Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the
mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions
Ohio and a holonym for a Columbus in a different country is encountered, because of the function
`augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered.
The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding
language code).
]=]
local function generic_place_cat_handler(data)
local from_demonym = data.from_demonym
local retcats = {}
local function insert_retkey(key, spec)
if from_demonym then
insert(retcats, key)
else
-- ZH: "法國的地點" (location_key + 的 + 地點)
insert(retcats, export.get_prefixed_key(key, spec) .. export.zh_strings.de_particle .. "地點")
end
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
if not spec.no_generic_place_cat then
-- This applies to continents and continental regions.
insert_retkey(key, spec)
end
-- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in
-- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when
-- no_container_cat is set (e.g. for 'United Kingdom').
if not spec.no_container_cat then
for _, container_set in ipairs(container_trail) do
local stop_adding_containers = false
for _, container in ipairs(container_set) do
if not container.spec.no_generic_place_cat then
insert_retkey(container.key, container.spec)
end
if container.spec.no_container_cat then
stop_adding_containers = true
end
end
if stop_adding_containers then
break
end
end
end
return retcats
end
end
--[==[
Special category handler run for all placetypes that checks for specified division placetypes of known locations and
categorizes appropriately.
]==]
function export.political_division_cat_handler(data)
if data.from_demonym then
return
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
local divlists = {}
if spec.divs then
insert(divlists, spec.divs)
end
if spec.addl_divs then
insert(divlists, spec.addl_divs)
end
for _, divlist in ipairs(divlists) do
if type(divlist) ~= "table" then
divlist = {divlist}
end
for _, div in ipairs(divlist) do
if type(div) == "string" then
div = {type = div}
end
local sgdiv = export.maybe_singularize_placetype(div.type) or div.type
local prep = div.prep or "of"
local cat_as = div.cat_as or div.type
if type(cat_as) ~= "table" then
cat_as = {cat_as}
end
if not export.placetype_data[sgdiv] then
internal_error("Placetype %s associated with known location key %s and data %s not found in " ..
"`placetype_data`", sgdiv, key, spec)
end
if sgdiv == data.entry_placetype then
local retcats = {}
for _, pt_cat in ipairs(cat_as) do
if type(pt_cat) == "string" then
pt_cat = {type = pt_cat}
end
local pt_prep = pt_cat.prep or prep
insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " ..
export.get_prefixed_key(key, spec))
end
return retcats
end
end
end
end
end
--[==[
This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any
foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value
in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the
modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the
entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the
country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized
into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to
make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is
intended for Newark, New Jersey).
]==]
function export.get_bare_categories(args, overall_place_spec)
local bare_cats = {}
local place_descs = overall_place_spec.descs
local possible_placetypes_by_place_desc = {}
for i, place_desc in ipairs(place_descs) do
possible_placetypes_by_place_desc[i] = {}
for _, placetype in ipairs(place_desc.placetypes) do
if not export.placetype_is_ignorable(placetype) then
local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true})
for _, equiv in ipairs(equivs) do
insert(possible_placetypes_by_place_desc[i], equiv.placetype)
end
end
end
end
local function check_term(term)
-- Treat Wikipedia links like local ones.
term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[")
term = export.remove_links_and_html(term)
term = term:gsub("^the ", "")
for i, place_desc in ipairs(place_descs) do
-- Iterate over all matching locations in case there are multiple, as with Delhi defined as
-- {{place|en|megacity/and/union territory|c/India|containing the national capital [[New Delhi]]}}.
for group, key, spec, container_trail in export.iterate_matching_holonym_location {
holonym_placetype = possible_placetypes_by_place_desc[i],
holonym_placename = term,
place_desc = place_desc,
} do
insert(bare_cats, key)
end
end
end
-- FIXME: Should we only do the following if the language is English (requires that the lang is passed in)?
-- We should always do it if `pagename` is given (as it is with {{tcl}}) but maybe not otherwise unless 1=en. There
-- are cases like [[Ankara]] = English name for capital of Turkey, but also the name in various languages for the
-- capital of Ghana (= English [[Accra]]). But this should get caught by mismatching the containing country. The
-- advantage of checking when the language isn't English is we catch those places that fail to give an English
-- translation but where the translation happens to be the same as the other-language spelling. However, I don't
-- know how often this situation occurs.
check_term(args.pagename or mw.loadData("Module:headword/data").pagename)
for _, t in ipairs(args.t) do
check_term(t)
end
local function check_termobj_list(terms)
for _, term in ipairs(terms) do
if term.eq then
check_term(term.eq)
end
if term.alt or term.term then
check_term(term.alt or term.term)
end
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
local arg = extra_info_terms.arg
if arg == "modern" or arg == "now" or arg == "full" or arg == "short" then
check_termobj_list(extra_info_terms.terms)
end
end
for _, directive in ipairs(overall_place_spec.directives) do
check_termobj_list(directive.terms)
end
return bare_cats
end
--[==[
This is used to augment the holonyms associated with a place description with the containing polities. For example,
given the following:
`# {{tl|place|en|subprefecture|pref/Hokkaido}}.`
We auto-add Japan as another holonym so that the term gets categorized into [[:Category:Subprefectures of Japan]].
To avoid over-categorizing we need to check to make sure no other countries are specified as holonyms.
]==]
function export.augment_holonyms_with_container(place_descs)
for _, place_desc in ipairs(place_descs) do
if place_desc.holonyms then
-- This ends up containing a copy of the original holonyms, with the augmented holonyms inserted in their
-- appropriate position. We don't just put them at the end because some holonyms have use the `:also`
-- modifier, which causes category processing to restart at that point after generating categories for a
-- preceding holonym, and we don't want the preceding holonym's augmented holonyms interfering with
-- categorization of a later holonym. We proceed from right to left, and each time we augment, we copy
-- the holonyms with the augmented holonym(s) inserted appropriately and replace the place description's
-- holonyms with the augmented ones before the next iteration. The reason for this is so that e.g.
-- {{place|neighborhood|city/Birmingham|co/West Midlands|cc/England}} doesn't throw an error during the
-- augmentation process due to 'Birmingham' referring to two known locations (in England and Alabama). If
-- we go left to right, we will throw an ambiguity error on `city/Birmingham` because code to exclude
-- Birmingham, Alabama needs `c/United Kingdom` present (to cause a mismatch with `c/United States`),
-- which isn't yet present as the augmentation code hasn't gotten to `cc/England` yet. For similar
-- reasons, we need to include the augmented holonyms in the holonyms considered in the next iteration
-- rather than modifying the place description once at athe end.
for i = #place_desc.holonyms, 1, -1 do
local holonym = place_desc.holonyms[i]
if holonym.placetype and not export.placetype_is_ignorable(holonym.placetype) then
local group, key, spec, container_trail = export.find_matching_holonym_location {
holonym_placetype = holonym.placetype,
holonym_placename = holonym.unlinked_placename,
holonym_index = i,
place_desc = place_desc,
}
if group and container_trail[1] and not spec.no_auto_augment_container then
local augmented_holonyms = {}
for j = 1, i do
insert(augmented_holonyms, place_desc.holonyms[j])
end
for _, containers in ipairs(container_trail) do
local any_no_auto_augment_container = false
for _, container in ipairs(containers) do
any_no_auto_augment_container = any_no_auto_augment_container or
container.spec.no_auto_augment_container
local containing_type = container.spec.placetype
if type(containing_type) == "table" then
-- If the containing type is a list, use the first element as the canonical variant.
containing_type = containing_type[1]
end
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
-- Don't side-effect holonyms while processing them.
local new_holonym = {
-- By the time we run, the display has already been generated so we don't need to
-- set display_placename.
placetype = containing_type,
-- placename_to_key() for the group should correctly handle both full and elliptical
-- placenames, but the full placename seems less likely to be ambiguous. FIXME: We
-- should just store the key directly and use it when available to avoid having to
-- convert key to placename and back to key.
unlinked_placename = full_container_placename,
-- Indicate that this is an augmented holonym, and was derived from the specified
-- holonym. In iterate_matching_holonym_location(), we ignore augmented holonyms
-- derived from holonyms that are different from the holonym we're searching for but
-- of the same placetype. This is to correctly handle a situation like
-- {{place|river|dept/Ardèche,Gard,Vaucluse,Bouches-du-Rhône|c/France}}. Here,
-- `Ardèche` is in `r/Auvergne-Rhône-Alpes`, while `Gard` is in `r/Occitania` and
-- the other two are in `r/Provence-Alpes-Côte d'Azur`. Augmenting proceeds from
-- right to left, so after it adds `r/Provence-Alpes-Côte d'Azur` to
-- `Bouches-du-Rhône`, Vaucluse gets augmented correctly but `Gard` fails to match
-- in find_matching_holonym_location() because of the mismatch between augmented
-- `r/Provence-Alpes-Côte d'Azur` and actual `r/Occitania`. Similarly, all later
-- calls to find_matching_holonym_location() fail to match `Gard` (and likewise
-- `Ardèche`) against any known location. To deal with this, we mark augmented
-- holoynms as being augmented due to a source holonym, and when processing a given
-- holonym, ignore augmented holonyms from other holonyms of the same placetype.
-- The restriction to the same placetype is so that `Birmingham` still gets
-- correctly disambiguated to Birmingham, England in the example given above near
-- the top of this function, using the augmented holonym `c/United Kingdom` added by
-- the specified `cc/England` (whose placetype `constituent country` differs from
-- the placetype `city` of Birmingham).
augmented_from_holonym = holonym,
}
insert(augmented_holonyms, new_holonym)
-- But it is safe to modify other parts of the place_desc.
export.key_holonym_into_place_desc(place_desc, new_holonym)
end
if any_no_auto_augment_container then
break
end
end
for j = i + 1, #place_desc.holonyms do
insert(augmented_holonyms, place_desc.holonyms[j])
end
place_desc.holonyms = augmented_holonyms
end
end
end
end
end
end
-- Cat handler for district, areas, neighborhoods and suburbs. Districts are tricky because they can either be political
-- divisions or city neighborhoods. Areas similarly can be political divisions (rarely; specifically, in Kuwait), city
-- neighborhoods or larger geographical areas/regions. We handle this as follows:
-- (1) `placetype_data` cat entries for specific countries or country divisions take precedence over cat_handlers, so if
-- the user says {{tl|place|district|s/Maharashtra|c/India}}, we won't even be called because there is an entry that
-- categorizes into [[:Category|Districts of Maharashtra, India]].
-- (2) If we're called, we check the holonym we're called on to see if it is a recognized city, e.g. if we're called
-- using {{tl|place|district|city/Mumbai|s/Maharashtra|c/India}}. If so, we categorize under e.g.
-- [[:Category:Neighbourhoods of Mumbai]]. (Choosing the spelling "neighbourhoods" because we're in India.)
-- (3) If we're called and the holonym is not a recognized city, we check if the placetype has has_neighborhoods set.
-- If so, it's "city-like" and we categorize under the first containing polity that we recognize. For example, if
-- we're called using {{tl|place|district|town/Northampton|co/Hampshire|s/Massachusetts|c/US}}, we should recognize
-- town as "city-like" and categorize under [[:Category:Neighborhoods in Massachusetts]]. (Note "in" not "of", and
-- note the spelling "neighborhoods" because we're in the US.)
-- (4) If the holonym is not city-like, we do nothing. If there's a city or city-like placetype farther up (e.g. we're
-- called as {{tl|place|district|ward/Foo|mun/Bar|...}}), we will handle the city-like entity according to (2) or
-- (3) when called on that holonym. Otherwise either the categorization in (1) takes place or there's no
-- categorization.
local function district_neighborhood_cat_handler(data)
local function get_plural_entry_placetype(location_spec, container_trail)
if data.entry_placetype == "suburb" then
return "Suburbs"
else
-- Check for `british_spelling` setting on the spec itself or any container.
local uses_british_spelling = location_spec.british_spelling
if uses_british_spelling == nil and container_trail then
for _, container_set in ipairs(container_trail) do
local must_outer_break = false
for _, container in ipairs(container_set) do
if container.spec.british_spelling ~= nil then
uses_british_spelling = container.spec.british_spelling
must_outer_break = true
break
end
end
if must_outer_break then
break
end
end
end
return uses_british_spelling and "Neighbourhoods" or "Neighborhoods"
end
end
-- First check the immediate holonym to see if it's a city or a city-like top-level entity (Hong Kong, Bonaire,
-- etc.)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and spec.is_city then
return {get_plural_entry_placetype(spec, container_trail) .. " of " .. export.get_prefixed_key(key, spec)}
end
-- If the entry placetype is neighbo(u)rhood, assume it is a neighborhood even if there isn't a city-like
-- entity father up the chain. (E.g. due to a mistaken use of m/ instead of mun/ for municipality.)
local has_neighborhoods
local entry_placetype = data.entry_placetype
if entry_placetype == "neighborhood" or entry_placetype == "neighbourhood" or entry_placetype == "suburb" then
has_neighborhoods = true
else
-- Otherwise, make sure the current holonym is city-like.
has_neighborhoods = export.get_equiv_placetype_prop(data.holonym_placetype, function(pt)
return export.get_placetype_prop(pt, "has_neighborhoods")
end, {continue_on_nil_only = true})
end
if has_neighborhoods then
-- Loop up the holonyms, looking for city and city-like entities in case of e.g. [[Sepulveda]] written
-- {{place|en|neighborhood|valley/San Fernando Valley|city/Los Angeles|s/California|c/USA}}
-- but also look for a recognizable poldiv, and if so categorize as "Neighborhoods in POLDIV". We need
-- to start with the current holonym, which is especially important for neighborhoods and suburbs that
-- may have the first holonym be a recognizable province, etc. but can't hurt otherwise. (Previously
-- we skipped the first/current holonym.)
for other_holonym_index, other_holonym in export.get_holonyms_to_check(data.place_desc,
data.holonym_index) do
local other_holonym_data = {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = data.place_desc,
}
local group, key, spec, container_trail = export.find_matching_holonym_location(other_holonym_data)
if group and not spec.is_former_place then
return {get_plural_entry_placetype(spec, container_trail) .. (spec.is_city and " of " or " in ") ..
export.get_prefixed_key(key, spec)}
end
end
end
end
function export.check_already_seen_string(holonym_placename, already_seen_strings)
local canon_placename = ulower(m_links.remove_links(holonym_placename))
if type(already_seen_strings) ~= "table" then
already_seen_strings = {already_seen_strings}
end
for _, already_seen_string in ipairs(already_seen_strings) do
if canon_placename:find(already_seen_string) then
return true
end
end
return false
end
-- Prefix display handler that adds a prefix such as "Metropolitan Borough of " to the display
-- form of holonyms. We make sure the holonym doesn't contain the prefix or some variant already.
-- We do this by checking if any of the strings in ALREADY_SEEN_STRINGS, either a single string or
-- a list of strings, or the prefix if ALREADY_SEEN_STRINGS is omitted, are found in the holonym
-- placename, ignoring case and links. If the prefix isn't already present, we create a link that
-- uses the raw form as the link destination but the prefixed form as the display form, unless the
-- holonym already has a link in it, in which case we just add the prefix.
local function prefix_display_handler(prefix, holonym_placename, already_seen_strings)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(prefix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return prefix .. " " .. holonym_placename
end
return prefix .. " [[" .. holonym_placename .. "]]"
end
-- Suffix display handler that adds a suffix such as " parish" to the display form of holonyms.
-- Works identically to prefix_display_handler but for suffixes instead of prefixes.
local function suffix_display_handler(suffix, holonym_placename, already_seen_strings, include_suffix_in_link)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(suffix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return holonym_placename .. " " .. suffix
end
if include_suffix_in_link then
return "[[" .. holonym_placename .. " " .. suffix .. "]]"
else
return "[[" .. holonym_placename .. "]] " .. suffix
end
end
-- Display handler for boroughs. New York City boroughs are display as-is. Others are suffixed
-- with "borough".
local function borough_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.new_york_boroughs[unlinked_placename] then
-- Hack: don't display "borough" after the names of NYC boroughs
return holonym_placename
end
return suffix_display_handler("borough", holonym_placename)
end
local function county_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
-- Display handler for Irish counties. Irish counties are displayed as e.g. "County [[Cork]]".
if m_locations.ireland_counties["County " .. unlinked_placename .. ", Ireland"] or
m_locations.northern_ireland_counties["County " .. unlinked_placename .. ", Northern Ireland"] then
return prefix_display_handler("County", holonym_placename)
end
-- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County".
if m_locations.taiwan_counties[unlinked_placename .. " County, Taiwan"] then
return suffix_display_handler("County", holonym_placename)
end
-- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County".
if m_locations.romania_counties[unlinked_placename .. " County, Romania"] then
return suffix_display_handler("County", holonym_placename)
end
-- FIXME, we need the same for US counties but need to key off the country, not the specific county.
-- Others are displayed as-is.
return holonym_placename
end
-- Display handler for prefectures. Japanese prefectures are displayed as e.g. "[[Fukushima]] Prefecture".
-- Others are displayed as e.g. "[[Fthiotida]] prefecture".
local function prefecture_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
local suffix = m_locations.japan_prefectures[unlinked_placename .. " Prefecture, Japan"] and "Prefecture" or "prefecture"
return suffix_display_handler(suffix, holonym_placename)
end
-- Display handler for provinces of Bulgaria, Iran, Laos, North and South Korea, Thailand, Turkey and Vietnam. Recognized
-- provinces are displayed as e.g. "[[Gyeonggi]] Province" or "[[Antalya]] Province". Others are displayed as-is.
local function province_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if
m_locations.bulgaria_provinces[unlinked_placename .. "Province, Bulgaria"] or
m_locations.iran_provinces[unlinked_placename .. " Province, Iran"] or
m_locations.laos_provinces[unlinked_placename .. " Province, Laos"] or
m_locations.north_korea_provinces[unlinked_placename .. " Province, North Korea"] or
m_locations.south_korea_provinces[unlinked_placename .. " Province, South Korea"] or
m_locations.thailand_provinces[unlinked_placename .. " Province, Thailand"] or
m_locations.turkey_provinces[unlinked_placename .. " Province, Turkey"] or
m_locations.vietnam_provinces[unlinked_placename .. " Province, Vietnam"] then
return suffix_display_handler("Province", holonym_placename)
end
return holonym_placename
end
-- Display handler for Nigerian states. Nigerian states are display as "[[Kano]] State". Others are displayed as-is.
local function state_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.nigeria_states[unlinked_placename .. " State, Nigeria"] then
return suffix_display_handler("State", holonym_placename)
end
return holonym_placename
end
-- Display handler for voivodeships. Display as e.g. [[Subcarpathian Voivodeship]].
local function voivodesip_display_handler(holonym_placetype, holonym_placename)
return suffix_display_handler("Voivodeship", holonym_placename, nil, "include_suffix_in_link")
end
------------------------------------------------------------------------------------------
-- Placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
Main placetype data structure. This specifies, for each canonicalized placetype, various properties. The keys are
placetypes (in the singular, except for category-only placetypes, which are plural and followed by `!`), and the value
is a table of properties. The `"*"` key is special and is used for adding "generic" categories of the form
`Places in ``location`` `; it runs for all entry placetypes. Keys in the form of plural placetypes followed by `!` are
used only in [[Module:category tree/topic cat/data/Places]] for specifying the properties of categories containing the
specified placetype, esp. bare categories like [[:Category:States and territories]] (rather than qualified categories
like [[:Category:States and territories of Australia]]).
Keys under the value table for a given placetype of are two types: ''property keys'' (which specify the value of
specific properties) and ''categorization keys'' (which tell how to categorize certain sorts of holonyms if the
placetype in question occurs as an entry placetype). Categorization keys are either the special value `default` or are
wildcard strings with a slash in them, such as `"country/*"`. Note that only wildcard strings are currently allowed
directly in the placetype data; everything else is handled through category handlers, either per-placetype or special
(such as `political_division_cat_handler`). The algorithm for how category keys and handlers are used to generate
categories is described at the top of [[Module:place]].
There are several recognized property keys, of various types:
1. The following link-related property keys are recognized:
* `link`: '''Required''' except in category-only placetypes ending in `!`. Describes how to link and display the
placetype in the formatted description when occurring as an entry placetype. Also used for formatting pluralized
placetypes (which may occur in entry placetypes, esp. new-format ones, such as `two <<islands>>`) and may occur in
categories). The possible values are:
*# `true`: Link to the same-named Wiktionary entry. This creates a raw link, e.g. `<nowiki>[[city]]</nowiki>`, which is
converted to an English-specific link by JavaScript postprocessing. If the placetype is plural, this creates a
two-part raw link e.g. `<nowiki>[[city|cities]]</nowiki>`.
*# `"w"`: Link to the same-named Wikipedia entry. This creates a two-part link, e.g.
`<nowiki>[[w:census town|census town]]</nowiki>`, or `<nowiki>[[w:census town|census towns]]</nowiki>` if the
placetype is given plural.
*# `"+..."`: Create a two-part link to the entry following the `+` sign. For example, if `cercle` specifies
`"+w:cercles of Mali"`, a two-part link `<nowiki>[[w:cercles of Mali|cercle]]</nowiki>` will be generated, or
`<nowiki>[[w:cercles of Mali|cercles]]</nowiki>` if plural `cercles` is specified.
*# `"separately"`: Link each word separately. For example, if `administrative territory` specifies `"separately"`, it
will be linked as `<nowiki>[[administrative]] [[territory]]</nowiki>`, or as
`<nowiki>[[administrative]] [[territory|territories]]</nowiki>` if plural `administrative territories` is given.
*# another string: Use that string directly. If the placetype is plural, `pluralize()` in [[Module:en-utilities]] is
called on the string, which will correctly pluralize most strings, including those with links in them. (If there
are multiple links, the display form of the last link is pluralized.)
*# `false`: This placetype is not allowed as an entry placetype. An error will be thrown if this placetype is given as
an entry placetype. This is specified for internal-use placetypes, especially placetypes used in conjunction with
the qualifiers `former`, `ancient`, `historical` and such.
* `plural_link`: If specified and the placetype is plural, use the value in place of generating a pluralized version of
the link spec in `link`. Most commonly, this is either a string with links in it (which is used directly) or the
value `false`, indicating that the placetype cannot occur plural. (This is used for example by `caplc`, which displays
as `<nowiki>[[capital]] and [[large]]st [[city]]</nowiki>`, where a plural version doesn't make sense.) Generally if
this is specified, `plural` also needs to be specified to give a special placetype plural; this situation occurs
especially with multiword placetypes where something other than the last word is pluralized. An example is
`town with bystatus`, whose plural is `towns with bystatus`, which needs to be explicitly given. This example uses
`link = <nowiki>"[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>` ({{m|nb|bystatus}}) is a Norwegian
Bokmål word, and template calls aren't currently permitted in link strings), along with
`plural_link = <nowiki>"[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>`.
* `category_link`: Spec indicating how to display the placetype when occurring in category descriptions. Defaults to
the value of `link`, and in turn is overridden by more specific `category_link_*` keys; see below. Category-only
placetypes (which are plural and end in `!`) usually use `category_link` in preference to `link`. The value of
`category_link` can be any of the types of specs given above, but most commonly is a plural string with links in it,
spelling out the description; in this case it is used directly. When both `category_link` and `link` are given, the
value in `category_link` is typically longer and more descriptive. For example, `polity` uses `link = true`, which
just generates a link `<nowiki>[[polity]]</nowiki>` or plural `<nowiki>[[polity|polities]]</nowiki>`, but specifies a
separate `category_link = <nowiki>"[[independent]] or [[semi-]][[independent]] [[polity|polities]]"</nowiki>`, which
clarifies in the category description what a polity is.
* `category_link_top_level`: Spec indicating how to display top-level (bare/unqualified) categories, i.e. categories
where the placetype is not followed by `in ``location`` ` or `of ``location`` `. If given, this overrides
`category_link` for this type of category.
* `category_link_before_noncity`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` does not refer to a city. If given, this overrides
`category_link` for this type of category.
* `category_link_before_city`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` refer to a city. If given, this overrides `category_link` for
this type of category. An example where this is given is `neighborhood`, which uses the following specs:<ol>
<li>`link = true`</li>
<li>`category_link = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]"</nowiki>`</li>
<li>`category_link_before_city = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions"</nowiki>`</li>
</ol> This has the effect of making the entry placetype `neighborhood` display as just
`<nowiki>[[neighborhood]]</nowiki>`, while e.g. a category like `Neighborhoods of Chicago` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[Chicago]], ...</nowiki>` and a category like
`Neighborhoods in Illinois, USA` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]] in [[Illinois]], ...</nowiki>`.
* `disallow_in_entries`: If specified, this placetype cannot occur as an entry placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
* `disallow_in_holonyms`: If specified, this placetype cannot occur as a holonym placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
2. There is currently one fallback-related property key recognized:
* `fallback`: If specified, its value is a placetype which will be used for categorization purposes if no categories
get added using the placetype itself. As an example, `branch` sets a fallback of `river` but also sets
`preposition = "of"`, meaning that {{tl|place|en|branch|riv/Mississippi}} displays as `a branch of the Mississippi`
(whereas `river` itself uses the preposition `in`), but otherwise categorizes the same as `river`. A more complex
example is `area`, which sets a fallback of `geographic and cultural area` and also sets a category handler that
checks for cities or city-like entities (e.g. boroughs) occurring as holonyms and categorizes the toponym under
[[:Category:Neighborhoods of CITY]] (for recognized cities) or otherwise [[:Category:Neighborhoods of POLDIV]] (for
the nearest containing recognized location). In addition, `area` is set as a political division of Kuwait, meaning if
`c/Kuwait` occurs as holonym, the toponym is categorized under [[:Category:Areas of Kuwait]]. If none of these
categories trigger, the fallback of `geographic and cultural area` will take effect, and the toponym will be
categorized as e.g. [[:Category:Geographic and cultural areas of England]].
3. There is currently one property to control irregular plurals of placetypes:
* `plural`: If specified, its value is the plural of the placetype. Otherwise, the default pluralization algorithm in
[[Module:en-utilities]] applies (which correctly pluralizes most words, including those ending in `-y`, `-ch`, `-sh`,
`-x`, etc.). The value of `plural` is also used when converting a pluralized placetype into its singular equivalent;
for example, since the placetype `kibbutz` has `plural = "kibbutzim"`, the placetype `kibbutzim` will be recognized
as a plural and singularized to `kibbutz`. For this reason, it's occasionally necessary to specify a `plural` value
even when the default pluralization algorithm works correctly, if the default singularization algorithm won't
correctly reverse the pluralization (as with `pass` and other terms ending in `-ss`).
4. The following property keys relate to generating categories for entry placetypes and specifying the parents of those
categories:
* `class`: The general class of placetype. This is used for various purposes: (a) to categorize placetypes preceded by
a qualifier such as `former`, `ancient`, `medieval` or `historical` (note that these placetypes are not all treated
alike); (b) to determine the parent category of bare placetype categories (e.g. [[:Category:Villages]] for placetype
`village`); (c) to determine whether to add a parent category `political divisions of specific countries` to
qualified placetype categories (e.g. [[:Category:Villages in Mali]]). The possible values are:
*# `polity`: a more-or-less sovereign/independent polity, such as a country, kingdom or empire.
*# `subpolity`: a non-sovereign division of a polity, above the level of an individual settlement.
*# `settlement`: a city or smaller equivalent, such as a village. This also includes administrative divisions of a
settlement, such as wards and barangays.
*# `non-admin settlement`: similar to a settlement but without administrative or political significance, such as an
unincorporated community, farm or neighborhood.
*# `capital`: a settlement that is a capital. A former capital is generally still in existence, just not the capital
any more.
*# `natural feature`: any non-man-made feature, such as a lake, mountain, island, ocean, etc.
*# `man-made structure`: a man-made feature below the level of a neighborhood, such as a house, airport, university,
metro station, park or the like.
*# `geographic region`: a geographic or cultural region or area that has no administrative significance. These may vary
greatly in size but typically have some sort of cultural significance (possibly historical). The `former`, `ancient`,
etc. qualifier has no effect on the category of these placetypes.
*# `generic place`: a place that isn't further qualified into any specific subtype.
* `former_type`: The class of placetype used for categorizing placetypes preceded by a qualifier such as `former`,
`ancient`, `medieval` or `historical`. The possible values are the same as for `class` but with the addition of
`dependent territory` (for colonies, protectorates and the like) and `!` (ignore the historical/former/ancient/etc.
qualifier; used e.g. with `fictional location` and `mythological location`). If not specified, the value of `class`
is used. When a qualifier such as `former`, `ancient`, `medieval` or `historical` is encountered (specifically, those
in `former_qualifiers`), it is mapped using `former_qualifiers` to the appropriate internal qualifier or qualifiers
(one or both of `ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
qualifiers), which is prepended to the value of `former_type` or `class` to form a placetype whose properties are
looked up to determine how to categorize the toponym in question. For example, if `medieval village` is given, we map
`medieval` to `ANCIENT` and `FORMER`, and `village` to its `class` of `settlement`, and enter the placetypes
`ANCIENT settlement` and `FORMER settlement` (in that order) into the list of equivalent placetypes returned by
`get_placetype_equivs`. In this case, there is an entry in `placetype_data` for `ANCIENT settlement`, so its default
category spec `Ancient settlements` is used as the category. If on the other hand `medieval kingdom` is given, where
`kingdom` has a `class` value `polity`, we first look up `ANCIENT polity`, see there is no entry in `placetype_data`
for it, and then look up `FORMER polity`, which exists and has a default category spec `Former polities`, which is
used as the category. Note that if the placetype following the "former" qualifier is recognized in `placetype_data`
but has no `former_type` or `class` and no fallback with a `former_type` or `class` specified, it is an internal
error; but if the placetype isn't recognized (e.g. something like `former greenhouse` is specified and we don't have
an entry for `greenhouse`), we just track the occurrence and end up not categorizing.
* `bare_category_parent`: This specifies the first parent category of a bare placetype category named according to the
placetype in question (e.g. [[:Category:Atolls]] for placetype `atoll`, or [[:Category:Named buildings]] for
placetype `named buildings!`). If not specified, the first parent category is determined by the value of `class`,
using the mapping `class_to_bare_category_parent` in [[Module:category tree/topic cat/data/Places]].
* `addl_bare_category_parents`: Extra parent categories to add a bare placetype category to (see `bare_category_parent`
just above).
* `bare_category_breadcrumb`: Breadcrumb for bare placetype categories. Also used as the sort key of
`bare_category_parent` if it is a string.
* `inherently_former`: If specified and the given placetype is used as an entry placetype, act as if `former` or
`ancient` (depending on the value of `inherently_former`) were prefixed to the placetype. This is for placetypes that
always refer to no-longer-existing entities, such as `satrapy` and `treaty port`. The value of `inherently_former` is
a list of internal qualifiers (one or more of `ANCIENT` and/or `FORMER`), just as for `former_qualifiers`, and the
implementation is the same.
* `cat_handler`: Handler used to generate the categories to add a given toponym to, if its entry placetype is the
placetype in question. Generally the `cat_handler` function checks the holonyms specified in order to determine which
category or categories to generate. For example, `district_neighborhood_cat_handler` handles placetypes `district`,
`neighborhood`, `subdivision`, `suburb` and the like, and either adds the toponym to a category like
`Neighborhoods of ``city`` ` (if a recognized city is given as a holonym), or otherwise a category like
`Neighborhoods in ``location`` ` (for the first recognized non-city location given as a holonym, if an unrecognized
city or city-like entity is given before the recognized non-city). The algorithm that runs the category handlers
iterates over holonyms from left to right, running the `cat_handler` function on each holonym in turn until one or
more categories are returned; see below for more specifics. (Note that countries for which e.g. a `district` is a
political division do not get the corresponding category added by the `district_neighborhood_cat_handler` function but
by `political_division_cat_handler`.) `cat_handler` functions are called with one argument, `data`, describing the
resolved entry placetype (i.e. after resolving placetype aliases and fallbacks) and the holonym being processed. The
return value should be a list of category specs (categories minus the langcode prefix, with `+++` standing for the
holonym key, or the value `true`, which stands for ` ``Placetypes`` in/of ``Holonym`` `, i.e. the pluralized placetype
with the appropriate preposition as specified in `placetype_data`). `data` contains the following fields:
** `entry_placetype`: the resolved entry placetype for the entry placetype being processed (i.e. it will always have an
entry in `placetype_data` but may not be the original placetype given by the user);
** `holonym_placetype` and `holonym_placename`: the holonym placetype and placename being processed;
** `holonym_index`: the index of the holonym being processed, or {nil} if we're handling an overriding holonym (FIXME:
we will change the overriding holonym algorithm so there will be an index even when processing overriding holonyms);
** `place_desc`: a full description of the {{tl|place}} call, as specified at the top of [[Module:place]];
** `from_demonym`: If set, we are called from [[Module:demonym]], triggered by {{tl|demonym-adj}} or
{{tl|demonym-noun}}, instead of being triggered by {{tl|place}}.
* `has_neighborhoods`: If `true`, the specified placetype is city-like. This is used in the
`district_neighborhood_cat_handler` to determine whether to add a category such as `Neighborhoods in ``location`` `;
see the section just above on `cat_handler`.
5. The following preposition-related property keys are recognized:
* `preposition`: The preposition used after this placetype when it occurs as an entry placetype. Defaults to `"in"`.
* `generic_before_non_cities`: If specified, the appropriate category description handler in
[[Module:category tree/topic cat/data/Places]] will recognize categories of the form
` ``Placetype`` in/of ``location`` ` for the specified placetype and preposition, if ``location`` is a non-city. This
is used to generate descriptions for categories added by category handlers and by explicit category specs in the
placetype data. All placetypes that specify `generic_before_non_cities` or `generic_before_cities` *MUST* also specify
a value for `class` so that the category tree code can determine whether it's a political or non-political division.
* `generic_before_cities`: Like `generic_before_non_cities` but for locations referring to cities.
6. The following property keys control the auto-addition of affixes when formatting holonyms of a particular placetype:
* `affix_type`: If specified, add the placetype as an affix before or after holonyms of this placetype. Possible values
are:
*# `"pref"` (the holonym will display as `(the) placetype of Holonym`, where `the` appears when the holonym directly
follows an entry placetype);
*# `"Pref"` (same as `"pref"` but the placetype is capitalized; each word is capitalized if there are multiple);
*# `"suf"` (the holonym will display as `Holonym placetype`);
*# `"Suf"` (the holonym will display as `Holonym Placetype`, i.e. same as `"suf"` but the placetype is capitalized).
* `suffix`: String to use in place of the placetype itself when the placetype is displayed as a suffix after a holonym.
Note that `suffix` can be used independently of `affix_type` because the user can also request a suffix explicitly
using a syntax like `adr:suf/Occitania`, which will display as `Occitania region` because the placetype
`administrative region` specifies `suffix = "region"`.
* `prefix`: Like `suffix` but for use when the placetype is displayed as a prefix before the holonym.
* `affix`: Like `suffix` and `prefix` but for use when the placetype is displayed as an affix either before or after the
holonym. If both `suffix` or `prefix` and `affix` are given for a single placetype, `suffix` or `prefix` take
precedence.
* `no_affix_strings`: String or list of strings that, if they occur in the holonym, suppress the addition of any affix
requested using `affix_type`. Defaults to the placetype itself. For example, `autonomous okrug` specifies
`affix_type = "Suf"` so that `aokr/Nenets` displays as `Nenets Autonomous Okrug`, but also specifies
`no_affix_strings = "okrug"` so that `aokr/Nenets Okrug` or `aokr/Nenets Autonomous Okrug` displays as specified,
without a redundant `Autonomous Okrug` added. Matching is case-insensitive but whole-word.
* `display_handler`: A function of two arguments, `holonym_placetype` and `holonym_placename` (specifying a holonym).
Its return value is a string specifying the display form of the holonym.
7. The following property keys control the indefinite and definite articles used before entry placetypes and/or holonyms
of the specified placetype.
* `entry_placetype_use_the`: Use `"the"` before this placetype when it occurs as an entry placetype.
* `entry_placetype_indefinite_article`: Indefinite article used before this placetype when it occurs as an entry
placetype (usually `"a"`, specifically for placetypes beginning with u- that don't take the indefinite article
`"an"`). Defaults to the appropriate indefinite article (`"a"` or `"an"` depending on whether the placetype begins
with a vowel). Overridden by `entry_placetype_use_the`, and unlike for most properties, does not apply to equivalent
placetypes (i.e. fallbacks or those formed by removing a qualifier from the beginning); only to the exact placetype
specified.
* `holonym_use_the`: Use `"the"` before holonyms of this placetype.
'''NOTE:'''
# The `link` property must be specified on all placetypes, except those ending in `!` (category-only placetypes), which
must have either `link` or `category_link` specified.
# Either the `class` or `former_type` property must be specified on all placetypes not ending in `!` that do not have a
fallback (if a placetype has a fallback and omits the `class` and `former_type` properties, they are taken from the
fallback). An internal error will result if a placetype has no `class` or `former_type` property derivable either
directly or through a fallback, if an attempt is made to categorize a former/ancient/historical/etc. entity of this
placetype.
# It is possible to have multiple levels of fallback (e.g. `frazione` falls back to `hamlet`, which falls back
to `village`). Fallback loops will cause an internal error. All placetypes specified as fallbacks must exist in
`placetype_data` or an internal error occurs.
]==]
export.placetype_data = {
--[=[
If you need to sort the following, do this (using Vim):
1. Make sure all full-line comments are within the { ... } table, or are moved after and on the same line as single-line
entries.
2. Make sure the table uses tabs everywhere for indent, and not spaces.
3. Mark the top of the table with `ma`, go to the bottom and execute the following two lines in sequence:
:'a,.s/\n/\\n/g
:s/\\n\(\t\[\)/\r\1/g
The first command converts every newline to a literal `\n` sequence, so the whole thing becomes a single line, while
the second command restores the newlines before the beginning of each entry. The effect is to convert all entries to
a single line while not losing any information. (Potentially a negative lookahead could be used to do it all in one
command.)
4. Execute the following to sort:
:'a,.!perl -pe 's/^(\t\[")(.*?)(".*)$/$2 @@@ $1$2$3/' | sort -f | perl -pe 's/.*? @@@ //'
Note that a simple `sort -f` (where `-f` means case-insensitive) would almost work, but it would sort "hill station"
before "hill" and "county borough" before "county" because the space after e.g. "hill station" sorts before the
quotation mark after e.g. "hill". The above command deals with this by extracting the key, prepending it followed by
` @@@ `, sorting, and then removing key (the classic decorate-sort-undecorate pattern).
5. Put the table back to multi-line format by marking the top of the table with `ma`, going to the bottom and executing
:'a,.s/\\n/\r/g
Note that for some reason, in order to get a match a newline in the left side of a replacement, you must use \n, but
to insert a newline in the right sode of a replacement you must use \r.
]=]
["*"] = {
link = false,
cat_handler = generic_place_cat_handler,
},
["administrative atoll"] = {
-- Maldives
link = "+w:administrative divisions of the Maldives",
preposition = "of",
class = "subpolity",
},
["administrative capital"] = {
link = "w",
fallback = "capital city",
},
["administrative center"] = {
link = "w",
fallback = "non-city capital",
},
["administrative centre"] = {
link = "w",
fallback = "administrative center",
},
["administrative county"] = {
link = "w",
fallback = "county",
},
["administrative district"] = {
link = "w",
fallback = "district",
},
["administrative headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["administrative region"] = {
link = true,
preposition = "of",
suffix = "region", -- but prefix is still "administrative region (of)"
fallback = "region",
class = "subpolity",
},
["administrative seat"] = {
link = "w",
fallback = "administrative centre",
},
["administrative territory"] = {
link = "separately",
preposition = "of",
suffix = "territory", -- but prefix is still "administrative territory (of)"
fallback = "territory",
class = "subpolity",
},
["administrative unit"] = {
-- Grrr, it's difficult to generalize about "administrative units". In Albania, "administrative unit" is an
-- official term for a city-level division of municipalities; Wikipedia renders it using the more practical term
-- "commune". In Pakistan, "administrative unit" is a collective term used to refer to all the different types
-- of first-level divisions (four provinces, one federal territory, and two "disputed territories", i.e. Azad
-- Kashmir and Gilgit-Balistan, that are variously described). For this reason, we set no fallback, but we need
-- to include this so that it can be used as a placetype for Albania, categorizing as communes.
link = "w",
class = "subpolity",
},
["administrative village"] = {
link = "w",
preposition = "of",
has_neighborhoods = true,
class = "settlement",
},
["aimag"] = {
-- used in Mongolia, Russia and China (Inner Mongolia); in Mongolia, equivalent to a province;
-- in China, equivalent to a prefecture (below a province); in Russia, equivalent to a municipal district.
link = "w",
fallback = "prefecture",
},
["airport"] = {
link = true,
class = "man-made structure",
default = {true},
},
["alliance"] = {
link = true,
fallback = "confederation",
},
["archipelago"] = {
link = true,
fallback = "island",
},
["area"] = {
link = true,
preposition = "of",
fallback = "geographic and cultural area",
-- Areas can either be administrative divisions (specifically of Kuwait) or geographic areas. Assume the former
-- when categorizing 'Areas' but the latter when handling e.g. 'historical area'.
class = "subpolity",
former_type = "geographic region",
cat_handler = district_neighborhood_cat_handler,
},
["arm"] = {
link = true,
preposition = "of",
class = "natural feature",
default = {"Seas"},
},
["arrondissement"] = {
link = true,
preposition = "of",
-- FIXME!!! Grrrrr!!! In some countries, arrondissements are divisions of cities; in others, they are divisions
-- of departments or provinces. Need to conditionalize on the country for both of the following.
class = "subpolity",
has_neighborhoods = true,
},
["associated province"] = {
link = "separately",
fallback = "province",
},
["atoll"] = {
-- FIXME! Atolls are administrative divisions of the Maldives but natural features elsewhere. Need to
-- conditionalize `class` on the country. See also `administrative atoll`.
link = true,
class = "natural feature",
bare_category_parent = "islands",
default = {true},
},
["autonomous city"] = {
link = "w",
preposition = "of",
fallback = "city",
has_neighborhoods = true,
},
["autonomous community"] = {
-- Spain; refers to regional entities, not village-like entities, as might be expected from "community"
link = true,
preposition = "of",
class = "subpolity",
},
["autonomous island"] = {
-- Comoros; seems like an administrative atoll of the Maldives.
link = "+w:autonomous islands of Comoros",
preposition = "of",
class = "subpolity",
},
["autonomous oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "oblast",
class = "subpolity",
},
["autonomous okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "okrug",
class = "subpolity",
},
["autonomous prefecture"] = {
link = true,
fallback = "prefecture",
},
["autonomous province"] = {
link = "w",
fallback = "province",
},
["autonomous region"] = {
link = "w",
preposition = "of",
fallback = "administrative region",
-- "administrative region" sets an affix of "region" but we want to display as "Tibet Autonomous Region"
-- if the user writes 'ar:Suf/Tibet'.
affix = "autonomous region",
},
["autonomous republic"] = {
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territorial unit"] = {
-- Moldova; only two of them, one for Gagauzia and one for Transnistria.
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territory"] = {
link = "w",
fallback = "dependent territory",
},
["bailiwick"] = {
-- Jersey, etc.
link = true,
fallback = "polity",
},
["barangay"] = {
-- Philippines
link = true,
class = "settlement",
-- Barangays are formal administrative divisions of a city rather than informal neighborhoods, but can use
-- some of the properties of a neighborhood.
fallback = "neighborhood",
},
["barrio"] = {
-- Spanish-speaking countries; Philippines
link = true,
-- FIXME: Not completely correct, in some countries barrios are formal administrative divisions of a city.
-- `class` will need to conditionalize on the country to be completely correct.
fallback = "neighborhood",
},
["basin"] = {
link = true,
fallback = "lake",
},
["bay"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["beach"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"water"},
default = {true},
},
["beach resort"] = {
link = "w",
fallback = "resort town",
},
["bishopric"] = {
link = true,
fallback = "polity",
},
["bodies of water!"] = {
-- FIXME: This is (maybe?) a type category not a name category. There should be an option for this. We need to
-- straighten out the type vs. name vs. related-to issue.
category_link = "[[body of water|bodies of water]]",
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems", "water"},
},
["borough"] = {
link = true,
preposition = "of",
display_handler = borough_display_handler,
has_neighborhoods = true,
-- "former borough" could be a former settlement or a former part of a city but seems more likely to
-- be a former subpolity, particularly in England. FIXME, we really need a handler to take care of this
-- properly.
class = "subpolity",
-- Grr, some boroughs are city-like but some (e.g. in Britain) may be larger.
},
["borough seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["branch"] = {
link = true,
preposition = "of",
fallback = "river",
},
["bridge"] = {
link = true,
class = "man-made structure",
default = {"Named bridges"},
},
["building"] = {
link = true,
class = "man-made structure",
default = {"Named buildings"},
},
["built-up area"] = {
link = "w",
fallback = "area",
},
["burgh"] = {
link = true,
fallback = "borough",
},
["business park"] = {
link = true,
fallback = "park",
},
["caliphate"] = {
link = true,
fallback = "polity",
},
["canton"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["cape"] = {
link = true,
fallback = "headland",
},
["capital"] = {
link = true,
fallback = "capital city",
},
["capital city"] = {
link = true,
category_link = "[[capital city|capital cities]]: the [[seat of government|seats of government]] for a country or [[political]] [[division]] of a country",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
bare_category_parent = "cities",
cat_handler = capital_city_cat_handler,
default = {true},
-- The following is necessary so that e.g. [[Melbourne]] defined as {{place|en|capital city|s/Victoria|c/Australia}}
-- gets categorized in the bare category [[Category:en:Melbourne]]; otherwise placetype 'capital city' wouldn't
-- match against the placetype 'city' of Melbourne.
fallback = "city",
},
["caplc"] = {
link = "[[capital]] and [[large]]st [[city]]",
plural_link = false,
fallback = "capital city",
},
["captaincy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["caravan city"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"ANCIENT", "FORMER"},
},
["castle"] = {
link = true,
fallback = "building",
},
["cathedral city"] = {
link = true,
fallback = "city",
},
["cattle station"] = {
-- Australia
link = true,
fallback = "farm",
},
["census area"] = {
link = true,
affix_type = "Suf",
has_neighborhoods = true,
class = "non-admin settlement",
},
["census-designated place"] = {
-- United States
link = true,
class = "non-admin settlement",
},
["census division"] = {
-- Canada
link = "w",
preposition = "of",
class = "subpolity",
},
["census town"] = {
link = "w",
fallback = "town",
},
["central business district"] = {
link = true,
fallback = "neighborhood",
},
["cercle"] = {
-- Mali
link = "+w:cercles of Mali",
preposition = "of",
class = "subpolity",
},
["ceremonial county"] = {
link = true,
fallback = "county",
},
["chain of islands"] = {
link = "[[chain]] of [[island]]s",
plural = "chains of islands",
plural_link = "[[chain]]s of [[island]]s",
fallback = "island",
},
["channel"] = {
link = true,
fallback = "strait",
},
["charter community"] = {
-- Northwest Territories, Canada
link = "w",
fallback = "village",
},
["city"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["city-state"] = {
link = true,
category_link = "[[sovereign]] [[microstate]]s consisting of a single [[city]] and [[w:dependent territory|dependent territories]]",
has_neighborhoods = true,
class = "settlement",
["continent/*"] = {"City-states", "Cities in +++", "Countries in +++", "National capitals"},
default = {"City-states", "Cities", "Countries", "National capitals"},
},
["civil parish"] = {
-- Mostly England; similar to municipalities
link = true,
preposition = "of",
affix_type = "suf",
has_neighborhoods = true,
class = "subpolity",
},
["claimed political division"] = {
link = "[[claim]]ed [[political]] [[division]]",
class = "subpolity",
default = {true},
},
["co-capital"] = {
link = "[[co-]][[capital]]",
fallback = "capital city",
},
["coal city"] = {
link = "+w:coal town",
fallback = "city",
},
["coal town"] = {
link = "w",
fallback = "town",
},
["collectivity"] = {
link = "w",
preposition = "of",
-- No default; these are weird one-off governmental divisions in France (esp. for overseas collectivities)
class = "subpolity",
},
["colony"] = {
link = true,
fallback = "dependent territory",
},
["comarca"] = {
-- per Wikipedia: traditional region or local administrative division found in Portugal, Spain, and some of
-- their former colonies, like Brazil, Nicaragua, and Panama. In the Valencian Community, for example, it
-- sits between municipalities and provinces, something like a county or district.
link = true,
preposition = "of",
class = "subpolity",
},
["commandery"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["commonwealth"] = {
link = true,
preposition = "of",
-- No default; applies specifically to Puerto Rico
class = "subpolity",
},
["commune"] = {
link = true,
fallback = "municipality",
},
["community"] = {
link = true,
category_link = "[[community|communities]] of all sizes",
fallback = "village",
},
["community development block"] = {
-- in India; appears to be similar to a rural municipality; groups several villages, unclear if there will be
-- neighborhoods so I'm not setting `has_neighborhoods` for now
link = "w",
affix_type = "suf",
no_affix_strings = "block",
class = "subpolity",
},
["comune"] = {
-- Italy, Switzerland
link = true,
fallback = "municipality",
},
["condominium"] = {
link = true,
fallback = "polity",
},
["confederacy"] = {
link = true,
fallback = "confederation",
},
["confederation"] = {
link = true,
fallback = "polity",
},
["constituency"] = {
-- currently we have them as political divisions of Namibia but many countries have them
link = true,
preposition = "of",
class = "subpolity",
},
["constituent country"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["constituent part"] = {
link = "separately",
preposition = "of",
class = "subpolity",
},
["constituent republic"] = {
-- Of Russia, Yugoslavia, etc.
link = "separately",
preposition = "of",
class = "subpolity",
},
["counties and county-level cities!"] = {
-- This is used when grouping counties and county-level cities under prefecture-level cities in China.
category_link = "[[county|counties]] and [[county-level city|county-level cities]]",
class = "subpolity",
},
["continent"] = {
link = true,
category_link = false, -- can't occur as a bare category
class = "natural feature",
default = {"Continents and continental regions"},
},
["continental region"] = {
link = "separately",
category_link = false, -- can't occur as a bare category
class = "geographic region",
fallback = "continent",
},
["continents and continental regions!"] = {
category_link = "[[continent]]s and [[continent]]-[[level]] [[region]]s (e.g. [[Polynesia]])",
class = "geographic region",
},
["council area"] = {
link = true,
-- in Scotland; similar to a county
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["country"] = {
link = true,
class = "polity",
["continent/*"] = {true, "Countries"},
default = {true},
},
["country-like entities!"] = {
category_link = "[[polity|polities]] not normally considered [[country|countries]] but treated similarly for categorization purposes; typically, [[unrecognized]] [[de-facto]] countries or [[w:dependent territory|dependent territories]]",
class = "polity",
},
["county"] = {
link = true,
preposition = "of",
display_handler = county_display_handler,
class = "subpolity",
},
["county borough"] = {
link = true,
-- in Wales; similar to a county
preposition = "of",
affix_type = "suf",
fallback = "borough",
class = "subpolity",
},
["county seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["county town"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
fallback = "town",
has_neighborhoods = true,
class = "capital",
},
["county-administered city"] = {
-- In Taiwan, per Wikipedia similar to a Taiwanese township or district, which is a small city.
-- NOT anything like a "county-level city" in PR China, which is a county masquerading as a city.
link = "w",
fallback = "city",
has_neighborhoods = true,
class = "settlement",
},
["county-controlled city"] = {
-- Taiwan
link = "w",
fallback = "county-administered city",
},
["county-level city"] = {
-- PR China
link = "w",
fallback = "prefecture-level city",
},
["crater lake"] = {
link = true,
fallback = "lake",
},
["creek"] = {
link = true,
fallback = "stream",
},
["Crown colony"] = {
link = "+crown colony",
fallback = "crown colony",
},
["crown colony"] = {
link = true,
fallback = "colony",
},
["Crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["cultural area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["cultural region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["delegation"] = {
-- Tunisia
link = "+w:delegations of Tunisia",
preposition = "of",
class = "subpolity",
},
["department"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["departmental capital"] = {
link = "separately",
fallback = "capital city",
},
["dependency"] = {
link = true,
fallback = "dependent territory",
},
["dependent territory"] = {
link = "w",
preposition = "of",
class = "subpolity",
former_type = "dependent territory",
bare_category_parent = "political divisions",
["country/*"] = {true},
default = {true},
},
["desert"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems"},
default = {true},
},
["deserted mediaeval village"] = {
link = "w",
fallback = "deserted medieval village",
},
["deserted medieval village"] = {
link = "w",
fallback = "ANCIENT settlement",
},
["direct-administered municipality"] = {
-- China
link = "+w:direct-administered municipalities of China",
fallback = "municipality",
},
["direct-controlled municipality"] = {
-- several countries
link = "w",
fallback = "municipality",
},
["distributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["district"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- Grrr! FIXME! Here is where we need handlers for `class`. Using similar logic to
-- district_neighborhood_cat_handler, we need to check if we're below or above a city to determine if the class
-- is "settlement" or "subpolity".
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
-- No default. Countries for which districts are political divisions will get entries.
},
["districts and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Portugal.
category_link = "[[district]]s and [[autonomous region]]s",
class = "subpolity",
},
["districts and autonomous territorial units!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Moldova.
category_link = "[[district]]s and [[w:autonomous territorial unit|autonomous territorial unit]]s",
class = "subpolity",
},
["district capital"] = {
link = "separately",
fallback = "capital city",
},
["district headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["district municipality"] = {
-- In Canada, a district municipality is equivalent to a rural municipality and won't have neighborhoods; in
-- South Africa, district municipalities group local municipalities and hence won't have neighborhoods.
link = "w",
preposition = "of",
affix_type = "suf",
no_affix_strings = {"district", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["division"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["division capital"] = {
link = "separately",
fallback = "capital city",
},
["dome"] = {
link = true,
fallback = "mountain",
},
["dormant volcano"] = {
link = true,
fallback = "volcano",
},
["duchy"] = {
link = true,
fallback = "polity",
},
["emirate"] = {
link = true,
preposition = "of",
-- FIXME: Can be subpolities (of the United Arab Emirates).
fallback = "polity",
},
["empire"] = {
link = true,
fallback = "polity",
},
["enclave"] = {
link = true,
preposition = "of",
-- Enclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["entity"] = {
-- Bosnia and Herzegovina
link = "+w:entities of Bosnia and Herzegovina",
preposition = "of",
class = "subpolity",
},
["escarpment"] = {
link = true,
fallback = "mountain",
},
["ethnographic region"] = {
-- used in Lithuania
link = "+w:ethnographic regions of Lithuania",
fallback = "geographic and cultural area",
},
["exclave"] = {
link = true,
preposition = "of",
-- exclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["external territory"] = {
link = "separately",
fallback = "dependent territory",
},
["farm"] = {
link = true,
class = "non-admin settlement",
default = {"Farms and ranches"},
},
["farms and ranches!"] = {
category_link = "[[farm]]s and [[ranch]]es",
class = "non-admin settlement",
},
["federal city"] = {
link = "w",
preposition = "of",
fallback = "city",
},
["federal district"] = {
link = true,
preposition = "of",
-- Might have neighborhoods as federal districts are often cities (e.g. Mexico City)
has_neighborhoods = true,
class = "settlement",
},
["federal subject"] = {
-- In Russia; a generic term for first-level administrative divisions (republics, oblasts, okrugs, krais,
-- autonomous okrugs and autonomous oblasts).
link = "w",
preposition = "of",
class = "subpolity",
},
["federal territory"] = {
link = "w",
fallback = "territory",
},
["fictional location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["First Nations reserve"] = {
-- Canada
link = "[[First Nations]] [[w:Indian reserve|reserve]]",
-- Wikipedia uses "Indian reserve"; presumably that is the legal term
fallback = "Indian reserve",
class = "subpolity",
},
["fjord"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["footpath"] = {
link = true,
fallback = "road",
},
["forest"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems", "forestry"},
default = {true},
},
["fort"] = {
link = true,
fallback = "building",
},
["fortress"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- fortresses -> fortresse, so put an entry here to ensure we singularize correctly.
plural = "fortresses",
fallback = "building",
},
["frazione"] = {
link = "w",
fallback = "hamlet",
},
["freeway"] = {
link = true,
fallback = "road",
},
["French prefecture"] = {
link = "[[w:prefectures in France|prefecture]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["geographic and cultural area"] = {
link = "+w:cultural area",
-- `generic_before_non_cities` is used when generating the category description of categories of the format
-- `Geographic and cultural areas of PLACE`. `preposition` is used when generating {{place}} description and
-- categories for any placetype that falls back to `geographic and cultural area`.
generic_before_non_cities = "of",
preposition = "of",
class = "geographic region",
bare_category_parent = "places",
["country/*"] = {true},
["constituent country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["geographic area"] = {
link = "+w:geographic region",
fallback = "geographic and cultural area",
},
["geographic region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geopolitical zone"] = {
-- Nigeria
link = true,
preposition = "of",
class = "subpolity",
},
["gewog"] = {
-- Bhutan
link = true,
preposition = "of",
class = "subpolity",
},
["ghost town"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
bare_category_parent = "former settlements",
cat_handler = city_type_cat_handler,
default = {true},
},
["glen"] = {
link = true,
fallback = "valley",
},
["governorate"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["greater administrative region"] = {
-- China (former division)
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["gromada"] = {
-- Poland (former division)
link = "w",
preposition = "of",
affix_type = "Pref",
class = "subpolity",
inherently_former = {"FORMER"},
},
["group of islands"] = {
link = "[[group]] of [[island]]s",
plural = "groups of islands",
plural_link = "[[group]]s of [[island]]s",
fallback = "island group",
},
["gulf"] = {
link = true,
preposition = "of",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["hamlet"] = {
link = true,
fallback = "village",
},
["harbor city"] = {
link = "separately",
fallback = "city",
},
["harbor town"] = {
link = "separately",
fallback = "town",
},
["harbour city"] = {
link = "separately",
fallback = "city",
},
["harbour town"] = {
link = "separately",
fallback = "town",
},
["headland"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["headquarters"] = {
link = "w",
fallback = "administrative centre",
},
["heath"] = {
link = true,
fallback = "moor",
},
["hemisphere"] = {
link = true,
entry_placetype_use_the = true,
fallback = "continental region",
},
["highway"] = {
link = true,
fallback = "road",
},
["hill"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["hill station"] = {
link = "w",
fallback = "town",
},
["hill town"] = {
link = "w",
fallback = "town",
},
["historic region"] = {
-- provided only for the link
link = "+w:historical region",
fallback = "FORMER geographic region",
},
["historical county"] = {
-- needed for historical counties of England/etc.
link = "+w:historic county",
fallback = "FORMER subpolity",
},
["historical region"] = {
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["home rule city"] = {
link = "w",
fallback = "city",
},
["home rule municipality"] = {
link = "w",
fallback = "municipality",
},
["hot spring"] = {
link = true,
fallback = "spring",
},
["house"] = {
link = true,
fallback = "building",
},
["housing estate"] = {
-- not the same as a housing project (i.e. public housing)
link = true,
-- not exactly the case but approximately
fallback = "neighborhood",
},
["hromada"] = {
-- Ukraine
link = "w",
disallow_in_entries = "Use placetype 'urban hromada', 'rural hromada' or 'settlement hromada' in place of bare 'hromada'",
disallow_in_holonyms = "Use placetype 'urban hromada'/'uhrom', 'rural hromada'/'rhrom' or 'settlement hromada'/'shrom' in place of bare 'hromada'",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["inactive volcano"] = {
link = "w",
fallback = "dormant volcano",
},
["independent city"] = {
link = true,
fallback = "city",
},
["independent town"] = {
link = "+independent city",
fallback = "town",
},
["Indian reservation"] = {
link = "w",
-- In the US. Also known as "Native American reservation" or "domestic dependent nation", and the reservations
-- themselves often use the term "nation" in their official name (e.g. the "Navajo Nation"). But Wikipedia puts
-- the article at [[w:Indian reservation]] and uses that term when describing e.g. what the Navajo Nation is,
-- so this must still be the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["Indian reserve"] = {
link = "w",
-- In Canada. "First Nations reserve" sounds more modern/PC but Wikipedia uses "Indian reserve"; presumably that
-- is still the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["inland sea"] = {
-- note, we also have 'inland' as a qualifier
link = true,
fallback = "sea",
},
["inner city area"] = {
link = "[[inner city]] [[area]]",
fallback = "neighborhood",
},
["island"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["island country"] = {
-- FIXME: The following should map to both 'island' and 'country'.
link = "w",
fallback = "country",
},
["island group"] = {
link = "separately",
fallback = "island",
},
["island municipality"] = {
link = "w",
fallback = "municipality",
},
["islet"] = {
link = "w",
fallback = "island",
},
["Israeli settlement"] = {
link = "w",
class = "settlement",
default = {true},
},
["judicial capital"] = {
link = "w",
fallback = "capital city",
},
["khanate"] = {
link = true,
fallback = "polity",
},
["kibbutz"] = {
link = true,
plural = "kibbutzim",
class = "non-admin settlement",
default = {true},
},
["kingdom"] = {
link = true,
fallback = "monarchy",
},
["krai"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["lake"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["landforms!"] = {
category_link = "[[landform]]s",
bare_category_parent = "places",
addl_bare_category_parents = {"Earth"},
},
["largest city"] = {
link = "[[large]]st [[city]]",
entry_placetype_use_the = true,
fallback = "city",
has_neighborhoods = true,
},
["league"] = {
link = true,
fallback = "confederation",
},
["legislative capital"] = {
link = "separately",
fallback = "capital city",
},
["library"] = {
link = true,
fallback = "building",
},
["lieutenancy area"] = {
-- used in the United Kingdom; per Wikipedia:
-- In England, lieutenancy areas are colloquially known as the ceremonial counties, although this phrase does
-- not appear in any legislation referring to them. The lieutenancy areas of Scotland are subdivisions of
-- Scotland that are more or less based on the counties of Scotland, making use of the major cities as separate
-- entities.[2] In Wales, the lieutenancy areas are known as the preserved counties of Wales and are based on
-- those used for lieutenancy and local government between 1974 and 1996. The lieutenancy areas of Northern
-- Ireland correspond to the six counties and two former county boroughs.[3]
link = "w",
fallback = "ceremonial county",
},
["local authority district"] = {
link = "w",
fallback = "local government district",
},
["local government area"] = {
-- Australia
link = "w",
preposition = "of",
class = "subpolity",
},
["local council"] = {
-- Malta; similar to municipalities
link = "+w:local councils of Malta",
preposition = "of",
fallback = "municipality",
},
["local government district"] = {
link = "w",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local government district with borough status"] = {
link = "[[w:local government district|local government district]] with [[w:borough status|borough status]]",
plural = "local government districts with borough status",
plural_link = "[[w:local government district|local government districts]] with [[w:borough status|borough status]]",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local urban district"] = {
link = "w",
fallback = "unincorporated community",
},
["locality"] = {
link = "+w:locality (settlement)",
-- not necessarily true, but usually is the case
fallback = "village",
},
["London borough"] = {
link = "w",
preposition = "of",
affix_type = "pref",
affix = "borough",
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["macroregion"] = {
link = true,
fallback = "region",
},
["man-made structures!"] = {
category_link = "[[w:geographical feature#Engineered constructs|man-made structures]] such as [[airport]]s, [[university|universities]] and [[metro station]]s",
bare_category_parent = "places",
},
["manor"] = {
-- FIXME: or is this more like a farm?
link = true,
fallback = "building",
},
["marginal sea"] = {
link = true,
preposition = "of",
fallback = "sea",
},
["market city"] = {
link = "+market town",
fallback = "city",
},
["market town"] = {
link = true,
fallback = "town",
},
["massif"] = {
link = true,
fallback = "mountain",
},
["megacity"] = {
link = true,
fallback = "city",
},
["metro station"] = {
link = true,
class = "man-made structure",
},
["metropolitan borough"] = {
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"borough", "city"},
fallback = "local government district",
has_neighborhoods = true,
},
["metropolitan city"] = {
-- These exist e.g. in Italy and are more like municipalities or even provinces than cities.
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"metropolitan", "city"},
class = "subpolity",
},
["metropolitan county"] = {
link = true,
fallback = "county",
},
["metropolitan municipality"] = {
-- In South Africa, metropolitan municipalities group local municipalities and are like districts, between
-- provinces and municipalities.
-- In Turkey, metropolitan municipalities are provinces-level.
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"metropolitan", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["microdistrict"] = {
-- residential complex in post-Soviet states
link = true,
fallback = "neighborhood",
},
["micronations!"] = {
-- FIXME, merge with microstate
category_link = "[[micronation]]s",
bare_category_parent = "countries",
},
["microstate"] = {
link = true,
fallback = "country",
},
["military base"] = {
link = "w",
class = "settlement", -- or "man-made structure"?
default = {true},
},
["minster town"] = {
-- England
link = "separately",
fallback = "town",
},
["monarchy"] = {
link = true,
fallback = "polity",
},
["moor"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems"},
default = {true},
},
["moorland"] = {
link = true,
fallback = "moor",
},
["motorway"] = {
link = true,
fallback = "road",
},
["mountain"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["mountain indigenous district"] = {
-- Taiwan
link = "+w:district (Taiwan)",
fallback = "district",
},
["mountain indigenous township"] = {
-- Taiwan
link = "+w:township (Taiwan)",
fallback = "township",
},
["mountain pass"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "mountain passes",
class = "natural feature",
addl_bare_category_parents = {"mountains"},
default = {true},
},
["mountain range"] = {
link = true,
fallback = "mountain",
},
["mountainous region"] = {
link = "separately",
fallback = "region",
},
["mukim"] = {
-- Malaysia, Brunei, Indonesia, Singapore
link = true,
preposition = "of",
class = "subpolity",
},
["municipal district"] = {
link = "w",
-- meaning varies depending on the country; for now, assume no neighborhoods.
-- FIXME: has_neighborhoods might have to be a function that looks at the containing holonyms.
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "municipality",
},
["municipality"] = {
link = true,
preposition = "of",
has_neighborhoods = true,
class = "subpolity",
},
["municipality with city status"] = {
link = "[[municipality]] with [[w:city status|city status]]",
plural = "municipalities with city status",
plural_link = "[[municipality|municipalities]] with [[w:city status|city status]]",
fallback = "municipality",
},
["museum"] = {
link = true,
fallback = "building",
},
["mythological location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["named bridges!"] = {
category_link = "notable [[bridge]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"bridges"},
},
["named buildings!"] = {
category_link = "notable [[house]]s, [[library|libraries]] and other [[building]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"buildings"},
},
["named roads!"] = {
category_link = "notable [[road]]s, [[highway]]s, [[trail]]s and similar linear structures",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"roads"},
},
["national capital"] = {
link = "w",
fallback = "capital city",
},
["national park"] = {
link = true,
fallback = "park",
},
["natural features!"] = {
category_link = "[[w:geographical feature#Natural features|natural features]] such as [[lake]]s, [[mountain]]s, [[island]]s and [[ocean]]s",
bare_category_parent = "places",
},
["neighborhood"] = {
-- The majority of the properties here apply to both `neighborhoods` and `neighbourhoods`; the choice of which
-- one to use is made by district_neighborhood_cat_handler() based on the value of `british_spelling` for the
-- location (city, political division, etc.) of the holonym that follows the word "neighbo(u)hoods" in the
-- category name. It does *NOT* depend on whether the {{place}} call uses "neighborhoods" or "neighbourhoods".
-- (In general it can't, because other things like "urban areas", "districts", "subdivisions" and the like also
-- categorize as neighbo(u)rhoods.)
link = true,
-- See below. These are used by category handlers in [[Module:category tree/topic cat/data/Places]].
generic_before_non_cities = "in",
generic_before_cities = "of",
-- The following text is suitable for the top-level description of a neighborhood as well as categories of the
-- form `Neighborhoods in POLDIV` e.g. `Neighborhoods in Illinois, USA` but not for categories of the form
-- `Neighborhoods of Chicago`, where we'd get "... and other subportions of [[city|cities]] of [[Chicago]]".
category_link = "[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighborhood]]s, [[district]]s and other subportions",
-- NOTE: This setting is needed for administrative divisions like barangays that fall back to `neighborhood`,
-- when set in [[Module:place/locations]] for a specific country (e.g. the Philippines). The above settings
-- for `generic_before_non_cities` and `generic_before_cities` are used by category handlers in
-- [[Module:category tree/topic cat/data/Places]] for `Neighborhoods in POLDIV` and `Neighborhoods of CITY`
-- categories. In fact, district_neighborhood_cat_handler() does not currently pay attention to them, but
-- generates "of" before cities and "in" before non-cities regardless. (FIXME: We should change that.)
preposition = "of",
class = "non-admin settlement",
cat_handler = district_neighborhood_cat_handler,
},
["neighbourhood"] = {
link = true,
category_link = "[[neighbourhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighbourhood]]s, [[district]]s and other subportions",
fallback = "neighborhood",
},
["new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
preposition = "in",
class = "subpolity", --?
},
["new town"] = {
link = true,
fallback = "town",
},
["non-city capital"] = {
link = "[[capital]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
cat_handler = function(data)
return capital_city_cat_handler(data, "non-city")
end,
-- FIXME, do we need the following?
default = {true},
},
["non-metropolitan county"] = {
link = "w",
fallback = "county",
},
["non-metropolitan district"] = {
link = "w",
fallback = "local government district",
},
["non-sovereign kingdom"] = {
-- especially in Africa and Asia
link = "+w:non-sovereign monarchy",
generic_before_non_cities = "in",
class = "subpolity",
["country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["non-sovereign monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["oblasts and autonomous republics!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Ukraine.
category_link = "[[oblast]]s and [[w:autonomous republic|autonomous republic]]s",
class = "subpolity",
},
["ocean"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"seas", "bodies of water"},
default = {true},
},
["okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["overseas collectivity"] = {
link = "w",
fallback = "collectivity",
},
["overseas department"] = {
link = "w",
fallback = "department",
},
["overseas territory"] = {
link = "w",
fallback = "dependent territory",
},
["parish"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["parish municipality"] = {
-- in Quebec, often similar to a rural village; the famous [[Saint-Louis-du-Ha! Ha!]] is one of them.
link = "+w:parish municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true,
},
["parish seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
class = "capital",
has_neighborhoods = true,
},
["park"] = {
link = true,
class = "man-made structure",
default = {true},
},
["pass"] = {
link = "+mountain pass",
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "passes",
fallback = "mountain pass",
},
["path"] = {
link = true,
fallback = "road",
},
["peak"] = {
link = true,
fallback = "mountain",
},
["peninsula"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["periphery"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["places!"] = {
generic_before_non_cities = "in",
generic_before_cities = "in",
class = "generic place",
category_link = "[[place]]s of all sorts",
-- `category_link_top_level` control the description used in the top-level [[Category:Places]] and
-- language-specific variants such as [[Category:en:Places]]. The actual text for a language-spefic variant is
-- "{{{langname}}} names of [[geographical]] [[place]]s of all sorts; [[toponym]]s." where the "names of"
-- portion is automatically generated by the appropriate handler in
-- [[Module:category tree/topic cat/data/Places]].
category_link_top_level = "[[geographical]] [[place]]s of all sorts; [[toponym]]s",
bare_category_parent = "names",
},
["planned community"] = {
-- Include this so we don't categorize 'planned community' into villages, as 'community' does.
link = true,
class = "settlement",
has_neighborhoods = true,
},
["plateau"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
-- FIXME: Should generate both "Plateaus" and the appropriate 'geographic and cultural area' category
},
["Polish colony"] = {
link = "[[w:colony (Poland)|colony]]",
affix_type = "suf",
affix = "colony",
fallback = "village",
has_neighborhoods = true,
},
["political divisions!"] = {
category_link = "[[political]] [[division]]s and [[subdivision]]s, such as [[state]]s, [[province]]s, [[county|counties]] or [[district]]s",
bare_category_parent = "places",
},
["polity"] = {
link = true,
category_link = "[[independent]] or [[semi-]][[independent]] [[polity|polities]]",
class = "polity",
bare_category_parent = "places",
default = {true},
},
["populated place"] = {
link = "+w:populated place",
-- not necessarily true, but usually is the case
fallback = "village",
},
["port"] = {
link = true,
class = "man-made structure",
default = {true},
},
["port city"] = {
-- FIXME: should categorize into "Ports" as well as "Cities"
link = true,
fallback = "city",
},
["port town"] = {
-- FIXME: should categorize into "Ports" as well as "Towns"
link = "w",
fallback = "town",
},
["prefecture"] = {
-- FIXME! `prefecture` is like a county in Japan and elsewhere but a department capital city in France.
-- May need `has_neighborhoods` to be a function.
link = true,
preposition = "of",
display_handler = prefecture_display_handler,
class = "subpolity",
},
["prefecture-level city"] = {
-- China; they are huge entities with a central city; not cities themselves.
link = "w",
preposition = "of",
class = "subpolity",
},
["preserved county"] = {
-- In Wales; they are former counties enshrined in law; there are 8 of them and each consists of one or more
-- "principal areas" (styled as "counties" or "county boroughs"), of which there are 22.
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["primary area"] = {
-- a grouping of "districts" (neighborhoods) in Gothenburg, Sweden
link = "+w:sv:primärområde",
fallback = "neighborhood",
},
["principality"] = {
link = true,
fallback = "monarchy",
},
["promontory"] = {
link = true,
fallback = "headland",
},
["protectorate"] = {
link = true,
fallback = "dependent territory",
},
["province"] = {
link = true,
preposition = "of",
display_handler = province_display_handler,
class = "subpolity",
},
["provinces and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case China.
category_link = "[[province]]s and [[autonomous region]]s",
class = "subpolity",
},
["provinces and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Canada and Pakistan.
category_link = "[[province]]s and [[territory|territories]]",
class = "subpolity",
},
["provincial capital"] = {
link = "separately",
fallback = "capital city",
},
["raion"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["ranch"] = {
link = true,
fallback = "farm",
},
["range"] = {
-- FIXME: Where is this used? Is it a mountain range?
link = true,
holonym_use_the = true,
class = "natural feature",
},
["regency"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["region"] = {
link = true,
preposition = "of",
-- If 'region' isn't a specific administrative division, fall back to 'geographic and cultural area'
fallback = "geographic and cultural area",
-- "former region" is a subpolity but traditional/historic(al)/ancient/medieval/etc. is a geographic region
class = "geographic region",
},
["regional capital"] = {
link = "separately",
fallback = "capital city",
},
["regional county municipality"] = {
-- Quebec
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"municipality", "county"},
fallback = "municipality",
},
["regional district"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "district",
},
["regional municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
},
["regional unit"] = {
link = "w",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["registration county"] = {
-- Used in Scotland for land registration purposes; formerly used in England, Wales and Ireland for statistical
-- purposes (registration of births, deaths and marriages, and for the output of census information).
link = "w",
fallback = "county",
},
["republic"] = {
-- Of Russia, Yugoslavia, etc. "Republics" in general are sovereign but we use "country" in that case.
link = true,
fallback = "constituent republic",
},
["research base"] = {
link = "+w:research station",
fallback = "research station",
},
["research station"] = {
link = "w",
class = "non-admin settlement", -- or "man-made structure"?
default = {true},
},
["reservoir"] = {
link = true,
fallback = "lake",
},
["residential area"] = {
link = "separately",
fallback = "neighborhood",
},
["resort city"] = {
link = "w",
fallback = "city",
},
["resort town"] = {
link = "w",
fallback = "town",
},
["river"] = {
link = true,
generic_before_non_cities = "in",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
cat_handler = city_type_cat_handler,
["continent/*"] = {true},
default = {true},
},
["river island"] = {
link = "w",
fallback = "island",
},
["road"] = {
link = true,
class = "man-made structure",
default = {"Named roads"},
},
["Roman province"] = {
-- FIXME! Eliminate this in favor of 'former province|emp/Roman Empire'
link = "w",
default = {"Provinces of the Roman Empire"},
class = "subpolity",
},
["royal borough"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"royal", "borough"},
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["royal burgh"] = {
link = true,
fallback = "borough",
},
["royal capital"] = {
link = "w",
fallback = "capital city",
},
["rural committee"] = {
-- Hong Kong; a group of villages
link = "w",
affix_type = "Suf",
has_neighborhoods = true,
class = "settlement",
},
["rural community"] = {
-- New Brunswick
link = "+w:list of municipalities in New_Brunswick#Rural communities",
fallback = "municipality",
},
["rural hromada"] = {
link = "[[rural]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["rural municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
has_neighborhoods = true, --?
},
["rural township"] = {
-- Taiwan
link = "+w:rural township (Taiwan)",
fallback = "township",
},
["sanctuary"] = {
link = true,
fallback = "temple",
},
["satrapy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["sea"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["seaport"] = {
link = true,
fallback = "port",
},
["seat"] = {
link = true,
fallback = "administrative centre",
},
["self-administered area"] = {
-- Myanmar (groups self-administered divisions and zones)
link = "+w:self-administered zone",
preposition = "of",
class = "subpolity",
},
["self-administered division"] = {
-- Myanmar (only one of them: Wa Self-Administered Division)
link = "w",
fallback = "self-administered area",
},
["self-administered zone"] = {
-- Myanmar (five of them)
link = "w",
fallback = "self-administered area",
},
["separatist state"] = {
link = "separately",
fallback = "unrecognized country",
},
["settlement"] = {
link = true,
category_link = "[[settlement]]s such as [[city|cities]], [[village]]s and [[farm]]s",
bare_category_parent = "places",
-- not necessarily true, but usually is the case
fallback = "village",
},
["settlement hromada"] = {
link = "[[w:Populated places in Ukraine#Rural settlements|settlement]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["sheading"] = {
-- Isle of Man
link = true,
fallback = "district",
},
["sheep station"] = {
-- Australia
link = true,
fallback = "farm",
},
["shire"] = {
link = true,
fallback = "county",
},
["shire county"] = {
link = "w",
fallback = "county",
},
["shire town"] = {
link = true,
fallback = "county seat",
},
["ski resort city"] = {
link = "[[ski resort]] [[city]]",
fallback = "city",
},
["ski resort town"] = {
link = "[[ski resort]] [[town]]",
fallback = "town",
},
["spa city"] = {
link = "+w:spa town",
fallback = "city",
},
["spa town"] = {
link = "w",
fallback = "town",
},
["space station"] = {
link = true,
fallback = "research station",
},
["special administrative region"] = {
-- in China; in practice they are city-like (Hong Kong, Macau); also [[Oecusse]] in East Timor is formally a
-- "special administrative region"; North Korea had one such region planned (Sinuiju) but abandoned; Indonesia
-- has similar "special regions" of Jakarta, Yogyakarta and Aceh; and South Sudan has three "special
-- administrative areas"
link = "+w:special administrative regions of China",
preposition = "of",
class = "subpolity",
has_neighborhoods = true, --?
-- no suffix since places in Hong Kong or Macau are listed without China, except Hong Kong and Macau themselves
-- they also contain regions (or areas), e.g. [[Kowloon]], so it would be confusing
suffix = "",
},
["special collectivity"] = {
link = "w",
fallback = "collectivity",
},
["special municipality"] = {
-- formerly linked to the Taiwan article but there are also special municipalities of the Netherlands
link = "w",
fallback = "municipality",
},
["special ward"] = {
-- Tokyo
link = true,
fallback = "municipality",
},
["spit"] = {
link = true,
fallback = "peninsula",
},
["spring"] = {
link = true,
class = "natural feature",
default = {true},
},
["star"] = {
link = true,
class = "natural feature",
default = {true},
},
["state"] = {
link = true,
preposition = "of",
class = "subpolity",
-- 'former/historical state' could refer either to a state of a country (a division) or a state = sovereign
-- entity. The latter appears more common (e.g. in various "ancient states" of East Asia).
former_type = "polity",
},
["states and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Australia.
category_link = "[[state]]s and [[territory|territories]]",
class = "subpolity",
},
["states and union territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case India.
category_link = "[[state]]s and [[union territory|union territories]]",
class = "subpolity",
},
["state capital"] = {
link = true,
fallback = "capital city",
},
["state park"] = {
link = true,
fallback = "park",
},
["state-level new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
fallback = "new area",
},
["statistical region"] = {
-- Slovenia
link = true,
fallback = "administrative region",
},
["statutory city"] = {
link = "w",
fallback = "city",
},
["statutory town"] = {
link = "w",
fallback = "town",
},
["strait"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["stream"] = {
link = true,
fallback = "river",
},
["street"] = {
link = true,
fallback = "road",
},
["strip"] = {
link = true,
fallback = "geographic region",
},
["strip of land"] = {
link = "[[strip]] of [[land]]",
plural = "strips of land",
plural_link = "[[strip]]s of [[land]]",
fallback = "geographic region",
},
["sub-metropolitan city"] = {
link = "+w:List of cities in Nepal#Sub-metropolitan cities",
fallback = "city",
},
["sub-prefectural city"] = {
link = "w",
fallback = "subprovincial city",
},
["subdistrict"] = {
link = true,
preposition = "of",
has_neighborhoods = true, --?
-- FIXME: subdistricts can be neighborhood-like (of Jakarta) or larger (in China); need a handler
class = "subpolity",
default = {true},
},
["subdivision"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- FIXME: subdivisions can be neighborhood-like or larger; need a handler
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
},
["submerged ghost town"] = {
-- FIXME: Consider just having "submerged" as a qualifier.
link = "[[submerged]] [[ghost town]]",
fallback = "ghost town",
},
["subnational kingdom"] = {
link = "+w:subnational monarchy",
fallback = "non-sovereign kingdom",
},
["subnational monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["subprefecture"] = {
link = true,
affix_type = "suf",
preposition = "of",
class = "subpolity",
},
["subprovince"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["subprovincial city"] = {
link = "w",
-- China; special status given to certain prefecture-level cities
fallback = "prefecture-level city",
},
["subprovincial district"] = {
link = "w",
-- China; special status given to Binhai New Area and Pudong New Area, which are county-level districts
preposition = "of",
class = "subpolity",
},
["subregion"] = {
link = true,
fallback = "geographic region",
},
["suburb"] = {
link = true,
-- The following text is suitable for the top-level description of a suburb as well as categories of the form
-- 'Suburbs in POLDIV' e.g. 'Suburbs in Illinois, USA' but not for categories of the form 'Suburbs of Chicago',
-- where we'd get "[[suburb]]s of [[city|cities]] of [[Chicago]]".
category_link = "[[suburb]]s of [[city|cities]]",
category_link_before_city = "[[suburb]]s",
-- See comments under "neighborhood" for the following three settings. They are used by
-- [[Module:category tree/topic cat/data/Places]] for generating the text of 'Suburbs in/of PLACE' categories
-- but currently ignored by district_neighborhood_cat_handler (which actually generates the categories for a
-- given page), which hardcodes "in" for non-cities and "of" for cities. (FIXME: Change this.)
generic_before_non_cities = "in",
generic_before_cities = "of",
preposition = "of",
has_neighborhoods = true, --?
class = "non-admin settlement", --?
cat_handler = district_neighborhood_cat_handler,
},
["suburban area"] = {
link = "w",
fallback = "suburb",
},
["subway station"] = {
link = "w",
fallback = "metro station",
},
["sum"] = {
-- In China, Mongolia, Russia; something like a county in Mongolia but a township in China (Inner Mongolia),
-- and equivalent to a [[selsoviet]] in the parts of Russia where it's in use (a rural council, below a raion).
link = "+w:sum (administrative division)",
-- This fallback is somewha arbitrary. We could use "county" but that has a display handler
-- which we don't want to be active (FIXME: If the display handler would be active, that's a bug).
fallback = "division",
},
["supercontinent"] = {
link = true,
fallback = "continent",
},
["tehsil"] = {
link = true,
affix_type = "suf",
no_affix_strings = {"tehsil", "tahsil"},
class = "subpolity",
},
["temple"] = {
link = true,
fallback = "building",
},
["territorial authority"] = {
link = "w",
fallback = "district",
},
["territory"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["theme"] = {
link = "+w:theme (Byzantine district)",
preposition = "of",
class = "subpolity",
},
["town"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["town with bystatus"] = {
-- can't use templates in links currently
link = "[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]",
plural = "towns with bystatus",
plural_link = "[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]",
fallback = "town",
},
["township"] = {
link = true,
has_neighborhoods = true,
class = "settlement", --?
default = {true},
},
["township municipality"] = {
-- Quebec
link = "+w:township municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["traditional county"] = {
link = true,
fallback = "county",
},
["traditional region"] = {
-- FIXME: Verify this works. Same for 'historic(al) region'.
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["trail"] = {
link = true,
fallback = "road",
},
["treaty port"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"FORMER"},
},
["tributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["underground station"] = {
link = "w",
fallback = "metro station",
},
["unincorporated area"] = {
link = "w",
-- I don't know if this fallback makes sense everywhere.
fallback = "unincorporated community",
},
["unincorporated community"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
},
["unincorporated territory"] = {
link = "w",
fallback = "territory",
},
["union territory"] = {
-- India
link = true,
preposition = "of",
entry_placetype_indefinite_article = "a",
class = "subpolity",
},
["unitary authority"] = {
-- UK, New Zealand
link = true,
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["unitary district"] = {
link = "w",
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["united township municipality"] = {
-- Quebec
link = "+w:united township municipality (Quebec)",
entry_placetype_indefinite_article = "a",
fallback = "township municipality",
has_neighborhoods = true, --?
},
["university"] = {
link = true,
entry_placetype_indefinite_article = "a",
class = "man-made structure",
default = {true},
},
["unrecognised country"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized and nearly unrecognized countries!"] = {
category_link = "[[de facto]] [[independent]] [[state]]s with little or no {{w|international recognition}}",
bare_category_parent = "country-like entities",
},
["unrecognized country"] = {
link = "w",
class = "polity",
default = {"Unrecognized and nearly unrecognized countries"},
},
["unrecognised state"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized state"] = {
link = "w",
fallback = "unrecognized country",
},
["urban area"] = {
link = "separately",
fallback = "neighborhood",
},
["urban hromada"] = {
link = "[[urban]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["urban service area"] = {
-- A strange beast existing in Alberta; technically a type of hamlet but in practice used for much larger
-- cities and treated equivalent to a city. (There are only two of them, [[Fort McMurray]] and [[Sherwood Park]]).
link = "w",
fallback = "city",
},
["urban township"] = {
link = "w",
fallback = "township",
},
["urban-type settlement"] = {
-- appears to be a particular type of small urban settlement in post-Soviet states,
-- had an administrative function.
link = "w",
fallback = "town",
},
["valley"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "water"},
default = {true},
},
["viceroyalty"] = {
-- in essence, a type of colony
link = true,
fallback = "dependent territory",
},
["village"] = {
link = true,
generic_before_non_cities = "in",
category_link = "[[village]]s, [[hamlet]]s, and other small [[community|communities]] and [[settlement]]s",
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["village development committee"] = {
-- former administrative structure in Nepal; also exists in India but not as a formal unit
link = "+w:village development committee (Nepal)",
inherently_former = {"FORMER"},
fallback = "village",
},
["village municipality"] = {
-- Quebec
link = "+w:village municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["voivodeship"] = {
-- Poland
link = true,
display_handler = voivodeship_display_handler,
preposition = "of",
class = "subpolity",
},
["volcano"] = {
link = true,
plural = "volcanoes",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true, "Mountains"},
},
["ward"] = {
link = true,
class = "settlement",
-- Wards are formal administrative divisions of a city but have some properties of neighborhoods.
fallback = "neighborhood",
},
["watercourse"] = {
link = true,
fallback = "channel",
},
["Welsh community"] = {
-- Wales
link = "[[w:community (Wales)|community]]",
preposition = "of",
affix_type = "suf",
affix = "community",
has_neighborhoods = true,
class = "settlement",
},
["zone"] = {
-- administrative division of Ethiopia, Qatar, Nepal, India
link = "+w:zone#Place names",
preposition = "of",
class = "subpolity",
},
----------------------------------------------------------------------------------------------
-- Categories for former places --
----------------------------------------------------------------------------------------------
["ANCIENT capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
-- FIXME: Consider removing 'ancient settlements' here. Ancient capitals, like former capitals, often still
-- exist but just aren't the capital any more. Maybe we should have an 'Ancient capitals' category.
default = {"Ancient settlements", "Former capitals"},
},
["ANCIENT non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "ANCIENT settlement",
},
["ANCIENT settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Ancient settlements"},
},
["ancient settlements!"] = {
category_link = "former [[city|cities]], [[town]]s and [[village]]s that existed in [[antiquity]]",
bare_category_parent = "former settlements",
},
["FORMER capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
default = {"Former capitals"},
},
["former capitals!"] = {
category_link = "former [[capital]] [[city|cities]] and [[town]]s",
bare_category_parent = "settlements",
},
["former counties and county-level cities!"] = {
-- For categorizing former counties and county-level cities of China
category_link = "no-longer existing [[county|counties]] and [[county-level city|county-level cities]]",
bare_category_breadcrumb = "counties and county-level cities",
bare_category_parent = "former political divisions",
},
["FORMER county"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER county-level city"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["former countries and country-like entities!"] = {
category_link = "[[country|countries]] and similar [[polity|polities]] that no longer exist",
bare_category_breadcrumb = "countries and country-like entities",
bare_category_parent = "former polities",
},
["FORMER country"] = {
link = false,
class = "polity",
default = {"Former countries and country-like entities"},
},
["former dependent territories!"] = {
category_link = "[[w:dependent territory|dependent territories]] (colonies, dependencies, protectorates, etc.) that no longer exist",
bare_category_breadcrumb = "dependent territories",
bare_category_parent = "former political divisions",
},
["FORMER dependent territory"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former dependent territories"},
},
["former districts!"] = {
-- For categorizing former districts of China
category_link = "no-longer-existing [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "former political divisions",
},
["FORMER district"] = {
-- For categorizing former districts of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER geographic region"] = {
link = false,
fallback = "geographic and cultural area",
},
["FORMER man-made structure"] = {
link = false,
class = "man-made structure",
default = {"Former man-made structures"},
},
["former man-made structures!"] = {
category_link = "man-made structures such as [[airport]]s and [[park]]s that no longer exist",
bare_category_breadcrumb = "man-made structures",
bare_category_parent = "former places",
},
["former municipalities!"] = {
-- For categorizing former municipalities of the Netherlands
category_link = "no-longer-existing [[municipality|municipalities]]",
bare_category_breadcrumb = "municipalities",
bare_category_parent = "former political divisions",
},
["FORMER municipality"] = {
-- For categorizing former municipalities of the Netherlands
link = false,
fallback = "FORMER subpolity",
},
["FORMER natural feature"] = {
link = false,
class = "natural feature",
default = {"Former natural features"},
},
["former natural features!"] = {
category_link = "natural features such as [[lake]]s, [[river]]s and [[island]]s that no longer exist",
bare_category_breadcrumb = "natural features",
bare_category_parent = "former places",
},
["FORMER non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "FORMER settlement",
},
["former places!"] = {
category_link = "[[place]]s of all sorts that no longer exist",
bare_category_breadcrumb = "former",
bare_category_parent = "places",
},
["former political divisions!"] = {
category_link = "[[political]] [[division]]s (states, provinces, counties, etc.) that no longer exist",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former places",
},
["former polities!"] = {
category_link = "[[polity|polities]] (countries, kingdoms, empires, etc.) that no longer exist",
bare_category_breadcrumb = "polities",
bare_category_parent = "former places",
},
["FORMER polity"] = {
link = false,
class = "polity",
default = {"Former polities"},
},
["former prefectures!"] = {
-- For categorizing former prefectures of China
category_link = "no-longer-existing [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "former political divisions",
},
["FORMER prefecture"] = {
-- For categorizing former prefectures of China
link = false,
fallback = "FORMER subpolity",
},
["former provinces!"] = {
-- For categorizing former provinces of China, etc.
category_link = "no-longer-existing [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "former political divisions",
},
["FORMER province"] = {
-- For categorizing ancient/historical/former provinces of the Roman Empire
link = false,
fallback = "FORMER subpolity",
},
["former region"] = {
-- A former region is considered a former political division, but not a 'historical/traditional/etc.' region.
link = "separately",
preposition = "of",
inherently_former = {"FORMER"},
class = "subpolity",
},
["FORMER settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Former settlements"},
},
["former settlements!"] = {
category_link = "[[city|cities]], [[town]]s and [[village]]s that no longer exist or have been merged or reclassified",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former political divisions",
},
["FORMER subpolity"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former political divisions"},
},
----------------------------------------------------------------------------------------------
-- form-of categories --
----------------------------------------------------------------------------------------------
---------- Abbreviations ----------
["abbreviations of counties!"] = {
-- For categorizing abbreviations of counties of e.g. England
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[county|counties]]",
bare_category_breadcrumb = "counties",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of places",
},
["abbreviations of departments!"] = {
-- For categorizing abbreviations of departments of e.g. France
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[department]]s",
bare_category_breadcrumb = "departments",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of districts!"] = {
-- For categorizing abbreviations of districts of e.g. ???
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of divisions!"] = {
-- For categorizing abbreviations of divisions of e.g. Bangladesh
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[division]]s",
bare_category_breadcrumb = "divisions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of former countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of former places",
},
["abbreviations of former places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "abbreviations of places", sort = "former"}},
},
["abbreviations of places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "places",
},
["abbreviations of political divisions!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[political]] [[division]]s",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "abbreviations of places",
},
["abbreviations of prefectures!"] = {
-- For categorizing abbreviations of prefectures of e.g. Japan
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces!"] = {
-- For categorizing abbreviations of provinces of e.g. Canada
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s and [[territory|territories]]",
bare_category_breadcrumb = "provinces and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of regions!"] = {
-- For categorizing abbreviations of regions of e.g. Italy
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[administrative region]]s",
bare_category_breadcrumb = "regions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states!"] = {
-- For categorizing abbreviations of states of e.g. the United States
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[territory|territories]]",
bare_category_breadcrumb = "states and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and union territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[union territory|union territories]]",
bare_category_breadcrumb = "states and union territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[territory|territories]]",
bare_category_breadcrumb = "territories",
bare_category_parent = "abbreviations of political divisions",
},
["ABBREVIATION_OF country"] = {
link = false,
default = {"Abbreviations of countries"},
},
["ABBREVIATION_OF county"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF department"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF district"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF division"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF FORMER country"] = {
link = false,
default = {"Abbreviations of former countries"},
},
["ABBREVIATION_OF FORMER place"] = {
link = false,
default = {"Abbreviations of former places"},
},
["ABBREVIATION_OF place"] = {
link = false,
default = {"Abbreviations of places"},
},
["ABBREVIATION_OF prefecture"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF province"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF region"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF state"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF subpolity"] = {
link = false,
default = {"Abbreviations of political divisions"},
},
["ABBREVIATION_OF territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF union territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
---------- Archaic forms ----------
["archaic forms of places!"] = {
full_category_link = "{{glossary|archaic}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "archaic forms",
bare_category_parent = "places",
},
["ARCHAIC_FORM_OF place"] = {
link = false,
default = {"Archaic forms of places"},
},
---------- Clippings ----------
["clippings of places!"] = {
full_category_link = "{{glossary|clipping}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "clippings",
bare_category_parent = "places",
},
["CLIPPING_OF place"] = {
link = false,
default = {"Clippings of places"},
},
---------- Dated forms ----------
["dated forms of places!"] = {
full_category_link = "{{glossary|dated}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "dated forms",
bare_category_parent = "places",
},
["DATED_FORM_OF place"] = {
link = false,
default = {"Dated forms of places"},
},
---------- Derogatory names ----------
["derogatory names for cities!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[city|cities]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["derogatory names for continents!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for continents"},
},
["derogatory names for countries!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for countries"},
},
["derogatory names for places!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[place]]s",
bare_category_breadcrumb = "derogatory names",
bare_category_parent = "nicknames for places",
},
["derogatory names for states!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for states"},
},
["DEROGATORY_NAME_FOR capital"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR city"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR continent"] = {
link = false,
default = {"Derogatory names for continents"},
},
["DEROGATORY_NAME_FOR country"] = {
link = false,
default = {"Derogatory names for countries"},
},
["DEROGATORY_NAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR place"] = {
link = false,
default = {"Derogatory names for places"},
},
["DEROGATORY_NAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR state"] = {
link = false,
default = {"Derogatory names for states"},
},
["DEROGATORY_NAME_FOR town"] = {
link = false,
default = {"Derogatory names for cities"},
},
---------- Ellipses ----------
["ellipses of places!"] = {
full_category_link = "{{glossary|ellipsis|ellipses}} of [[name]]s of [[place]]s",
bare_category_breadcrumb = "ellipses",
bare_category_parent = "places",
},
["ELLIPSIS_OF place"] = {
link = false,
default = {"Ellipses of places"},
},
---------- Former long-form names ----------
["former long-form names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former long-form names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "long-form"}},
},
["former long-form names of places!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form",
bare_category_parent = "former names of places",
},
["FORMER_LONG_FORM_OF country"] = {
link = false,
default = {"Former long-form names of countries"},
},
["FORMER_LONG_FORM_OF place"] = {
link = false,
default = {"Former long-form names of places"},
},
---------- Former names ----------
["former names of capitals!"] = {
full_category_link = "[[former]] [[name]]s of [[capital city|capital cities]] that generally still exist but under a different name",
bare_category_breadcrumb = "capitals",
bare_category_parent = "former names of settlements",
},
["former names of countries!"] = {
full_category_link = "[[former]] [[name]]s of [[country|countries]] that generally still exist but under a different name",
bare_category_breadcrumb = "countries",
bare_category_parent = "former names of places",
},
["former names of places!"] = {
full_category_link = "[[former]] [[name]]s of [[place]]s that generally still exist but under a different name",
bare_category_breadcrumb = "former names",
bare_category_parent = "places",
},
["former names of political divisions!"] = {
full_category_link = "[[former]] [[name]]s of [[political]] [[division]]s (states, provinces, counties, etc.) that generally still exist but under a different name",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former names of places",
},
["former names of polities!"] = {
full_category_link = "[[former]] [[name]]s of [[polity|polities]] (e.g. [[country|countries]]) that generally still exist but under a different name",
bare_category_breadcrumb = "polities",
bare_category_parent = "former names of places",
},
["former names of settlements!"] = {
full_category_link = "[[former]] [[name]]s of [[city|cities]], [[town]]s, [[village]]s, etc. that generally still exist but under a different name",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former names of political divisions",
},
["FORMER_NAME_OF capital"] = {
link = false,
default = {"Former names of capitals"},
},
["FORMER_NAME_OF country"] = {
link = false,
default = {"Former names of countries"},
},
["FORMER_NAME_OF place"] = {
link = false,
default = {"Former names of places"},
},
["FORMER_NAME_OF polity"] = {
link = false,
default = {"Former names of polities"},
},
["FORMER_NAME_OF region"] = {
link = false,
fallback = "FORMER_NAME_OF subpolity",
},
["FORMER_NAME_OF settlement"] = {
link = false,
default = {"Former names of settlements"},
},
["FORMER_NAME_OF subpolity"] = {
link = false,
default = {"Former names of political divisions"},
},
---------- Former nicknames ----------
["former nicknames for cities!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[city|cities]], e.g. the [[Eternal City]] for [[Kyoto]] during the {{w|Heian period}} ({{circa2|800–1100|short=yes}} {{AD}})",
bare_category_breadcrumb = "cities",
bare_category_parent = "former nicknames for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["former nicknames for places!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "former",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {{name = "former names of places", sort = "nicknames"}},
},
["FORMER_NICKNAME_FOR capital"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR city"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR place"] = {
link = false,
default = {"Former nicknames for places"},
},
["FORMER_NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR town"] = {
link = false,
default = {"Former nicknames for cities"},
},
---------- Former official names ----------
["former official names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former official names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "official"}},
},
["former official names of places!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "former names of places",
},
["FORMER_OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Former official names of countries"},
},
["FORMER_OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Former official names of places"},
},
---------- Long-form names ----------
["long-form names of countries!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "long-form names of places",
},
["long-form names of places!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form names",
bare_category_parent = "places",
},
["LONG_FORM_OF country"] = {
link = false,
default = {"Long-form names of countries"},
},
["LONG_FORM_OF place"] = {
link = false,
default = {"Long-form names of places"},
},
---------- Nicknames ----------
["nicknames for cities!"] = {
full_category_link = "[[nickname]]s for [[city|cities]], e.g. the [[Big Apple]] for [[New York City]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"cities"},
},
["nicknames for continents!"] = {
full_category_link = "[[nickname]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"continents"},
},
["nicknames for countries!"] = {
full_category_link = "[[nickname]]s for [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"countries"},
},
["nicknames for places!"] = {
full_category_link = "[[nickname]]s for [[place]]s",
bare_category_breadcrumb = "places",
bare_category_parent = "nicknames",
addl_bare_category_parents = {"places"},
},
["nicknames for states!"] = {
-- For categorizing nicknames for states of e.g. the United States
full_category_link = "[[nicknames]] for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"states"},
},
["NICKNAME_FOR capital"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR city"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR continent"] = {
link = false,
default = {"Nicknames for continents"},
},
["NICKNAME_FOR country"] = {
link = false,
default = {"Nicknames for countries"},
},
["NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR place"] = {
link = false,
default = {"Nicknames for places"},
},
["NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR state"] = {
link = false,
default = {"Nicknames for states"},
},
["NICKNAME_FOR town"] = {
link = false,
default = {"Nicknames for cities"},
},
---------- Obsolete forms ----------
["obsolete forms of places!"] = {
full_category_link = "{{glossary|obsolete}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "obsolete forms",
bare_category_parent = "places",
},
["OBSOLETE_FORM_OF place"] = {
link = false,
default = {"Obsolete forms of places"},
},
---------- Official names ----------
["official names of countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of places",
},
["official names of former countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of former places",
},
["official names of former places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "official names",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "official names of places", sort = "former"}},
},
["official names of places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official names",
bare_category_parent = "places",
},
["OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Official names of countries"},
},
["OFFICIAL_NAME_OF FORMER country"] = {
link = false,
default = {"Official names of former countries"},
},
["OFFICIAL_NAME_OF FORMER place"] = {
link = false,
default = {"Official names of former places"},
},
["OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Official names of places"},
},
---------- Official nicknames ----------
["official nicknames for places!"] = {
full_category_link = "[[official]] [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for places",
},
["official nicknames for states!"] = {
-- For categorizing official nicknames for states of e.g. the United States
full_category_link = "[[official]] [[nicknames]] for [[state]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for states",
addl_bare_category_parents = {"states"},
},
["OFFICIAL_NICKNAME_FOR place"] = {
link = false,
default = {"Official nicknames for places"},
},
["OFFICIAL_NICKNAME_FOR state"] = {
link = false,
default = {"Official nicknames for states"},
},
}
export.plural_placetype_to_singular = {}
for sg_placetype, spec in pairs(export.placetype_data) do
if spec.plural then
export.plural_placetype_to_singular[spec.plural] = sg_placetype
end
end
------------------------------------------------------------------------------------------
-- ZH: Chinese localization functions --
------------------------------------------------------------------------------------------
--[==[
Get the Chinese display name for a placetype, resolving through the enwikt fallback chain.
`holonym_placetype` (optional string) provides context for placetypes like `capital city`
whose Chinese term depends on the containing administrative level (country → 首都,
province → 省會, state → 首府, etc.).
Returns two values: zh_name (string or array of regional variants), zh_suffix (string,
array, or nil). Returns nil, nil if no Chinese data is available for the placetype or
any of its fallbacks.
]==]
function export.get_zh_placetype_name(placetype, holonym_placetype)
placetype = export.resolve_placetype_aliases(placetype)
local zh_name, zh_suffix, zh_by_holonym = m_zh_data.get_zh_placetype_props(placetype, export)
if zh_name then
local resolved = m_zh_data.resolve_zh_name(zh_name, zh_by_holonym, holonym_placetype)
return resolved, zh_suffix
end
return nil, nil
end
--[==[
Get only the Chinese suffix for a placetype.
Used when rendering holonym `:pref`/`:suf` modifiers in Chinese: the suffix is appended
directly to the holonym name (e.g. `s:suf/New York` → 紐約州; `c:pref/Georgia` → 格魯吉亞國).
Returns a string, an array of regional variants, or nil if no suffix is defined.
]==]
function export.get_zh_placetype_suffix(placetype)
placetype = export.resolve_placetype_aliases(placetype)
local _, zh_suffix = m_zh_data.get_zh_placetype_props(placetype, export)
return zh_suffix
end
--[==[
Chinese placetype "pluralization" — a no-op, since Chinese has no grammatical plural.
Accepts and returns a string or an array (for multi-variant names) unchanged.
Provided so that call sites shared with the English path can call a uniform function.
]==]
function export.pluralize_zh_placetype(zh_name)
return zh_name
end
--[==[
Get the entry preposition for Chinese display: "in" or "of".
Identical to `get_placetype_entry_preposition` in semantics; the Chinese rendering
maps these to different constructions:
"in" → 位於 [holonyms] 的 [placetype]
"of" → [holonyms] 的 [placetype] (no 位於 prefix)
]==]
export.get_zh_entry_preposition = export.get_placetype_entry_preposition
-- Re-export Chinese data tables so that [[Module:place]] only needs to require
-- this module rather than both this module and [[Module:place/zh-data]] separately.
export.zh_strings = m_zh_data.zh_strings
export.zh_qualifiers = m_zh_data.zh_qualifiers
export.zh_extra_info_labels = m_zh_data.zh_extra_info_labels
export.zh_capital_label_by_holonym_type = m_zh_data.zh_capital_label_by_holonym_type
export.format_zh_name = m_zh_data.format_zh_name
return export
6xig2gk8xrve5gq0bl8gabydnctc9gw
9758642
9758134
2026-05-13T09:47:38Z
TongcyDai
53191
9758642
Scribunto
text/plain
local export = {}
export.force_cat = false -- set to true for testing
local m_locations = require("Module:place/locations")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_strutils = require("Module:string utilities")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
-- Chinese localization data (zh_name, zh_suffix, qualifiers, extra-info labels, etc.)
local m_zh_data = require("Module:place/data/sandbox")
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local internal_error = m_locations.internal_error
export.internal_error = internal_error
local process_error = m_locations.process_error
export.process_error = process_error
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local ucfirst = m_strutils.ucfirst
local ulower = m_strutils.lower
local rmatch = m_strutils.match
local split = m_strutils.split
--[==[ intro:
This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code
to work with both placetypes and locations, as well as some placename-related info (FIXME: Consider moving it to
[[Module:place/locations]]). See also [[Module:place/locations]], which has definitions of all known locations. You must
currently load this module using {{cd|require()}}, not using {{cd|mw.loadData()}}.
In particular, it contains two fundamental and tricky functions:
# `get_placetype_equivs`, which finds the equivalent placetypes to look under in order to find a given property, and in
the process correctly handles placetypes with qualifiers (including qualifiers that act similar to "type-raising"
operators in that they do something non-trivial to the placetype to their right) as well as form-of directives and
fallbacks.
# `find_matching_holonym_location`, which looks up a holonym to find a matching known location, but in the process
checks holonyms to the right to make sure there isn't a clash between the user-specified containing holonyms and the
containers of the known location being considered. This is done to prevent overcategorizing when either there are two
known locations with the same name (e.g. Birmingham in England and Birmingham, Alabama in the US), or more generally
two locations with the same name, one of which is a known location but where the other is not (e.g. we're processing
non-known-location Mérida, Spain and don't want it categorized like known location Mérida, Yucatán, Mexico).
Both of these functions are invoked repeatedly, and probably are invoked several times on the same inputs and as a
result are candidates for memoization to speed up the operation of {{tl|place}}.
]==]
------------------------------------------------------------------------------------------
-- Basic utilities --
------------------------------------------------------------------------------------------
--[==[
Return true if `force_cat` is set either in this module or in [[Module:place/locations]].
]==]
function export.get_force_cat()
return export.force_cat or m_locations.force_cat
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
function export.remove_links_and_html(text)
text = m_links.remove_links(text)
return text:gsub("<.->", "")
end
--[==[
Return the singular version of a maybe-plural placetype, or nil if not plural. This correctly handles placetypes with
irregular plurals such as `kibbutzim` plural of `kibbutz` by looking up in a table constructed from the `plural` values
specified in `placetype_data`. If a special plural value is not found, the regular singularization algorithm in
[[Module:en-utilities]] is invoked, which reverses the y -> ies change after vowels and the 'es' addition after sh/ch/x,
and otherwise just subtracts a final 's' (which will incorrectly generate 'passe' for plural 'passes'; FIXME: consider
changing this for words ending in '-sses'). If the generated singular is the same as the passed-in value, nil is
returned.
]==]
function export.maybe_singularize_placetype(placetype)
if not placetype then
return nil
end
if export.plural_placetype_to_singular[placetype] then
return export.plural_placetype_to_singular[placetype]
end
local retval = require(en_utilities_module).singularize(placetype)
if retval == placetype then
return nil
end
return retval
end
-- Return the correct plural of a placetype, and (if `do_ucfirst` is given) make the first letter uppercase. We first
-- look up the plural in `placetype_data`, falling back to pluralize() in [[Module:en-utilities]], which is almost
-- always correct.
function export.pluralize_placetype(placetype, do_ucfirst)
local ptdata = export.placetype_data[placetype]
if ptdata and ptdata.plural then
placetype = ptdata.plural
else
placetype = require(en_utilities_module).pluralize(placetype)
end
if do_ucfirst then
return ucfirst(placetype)
else
return placetype
end
end
--[==[
Get the data associated with a placetype, which may be in its singular or plural form. If `from_category` is specified,
we also look for category-only placetypes (generally plural) followed by `!`. Return three values: (a) the placetype
under which the data can be looked up (i.e. in its singular form if the passed-in `placetype` is plural and did not
match a category-only placetype followed by `!`); (b) the placetype data structure; (c) the type of `placetype` match
that occurred, one of `"direct"` if the canonical placetype is the same as the passed-in `placetype` and also the same
as the key under which `ptdata` was looked up, or `"direct-category"` if the `ptdata` was looked up under a key formed
from the passed-in `placetype` by adding `!`, or `"plural"` if the `ptdata` was looked up under the singularized version
of the plural passed-in `placetype`.
]==]
function export.get_placetype_data(placetype, from_category)
local ptdata = export.placetype_data[placetype]
if ptdata then
return placetype, ptdata, "direct"
end
if from_category then
ptdata = export.placetype_data[placetype .. "!"]
if ptdata then
return placetype .. "!", ptdata, "direct-category"
end
end
local sg_placetype = export.maybe_singularize_placetype(placetype)
if sg_placetype then
ptdata = export.placetype_data[sg_placetype]
if ptdata then
return sg_placetype, ptdata, "plural"
end
end
return nil
end
--[==[
Check for special pseudo-placetypes that should be ignored for categorization purposes.
]==]
function export.placetype_is_ignorable(placetype)
return placetype == "and" or placetype == "or" or placetype:find("^%(")
end
function export.resolve_placetype_aliases(placetype)
return export.placetype_aliases[placetype] or placetype
end
--[==[
Return a property from `placetype_data` for a given placetype. If the placetype isn't found in `placetype_data`, or the
key isn't found in the placetype's entry in `placetype_data`, return nil.
]==]
function export.get_placetype_prop(placetype, key)
-- Usually we are called on equivalent placetypes returned from `get_placetype_equivs`, in which case placetype
-- aliases have been resolved, but sometimes not, e.g. when fetching the indefinite article in
-- get_placetype_article(). `resolve_placetype_aliases` is just a simple lookup and it doesn't hurt to do it twice.
placetype = export.resolve_placetype_aliases(placetype)
if export.placetype_data[placetype] then
return export.placetype_data[placetype][key]
else
return nil
end
end
--[==[
Given a placetype, split the placetype into one or more potential ''splits'', each consisting of a three-element list
{ {``prev_qualifiers``, ``this_qualifier``, ``reduced_placetype``}}, i.e.
# the concatenation of zero or more previously-recognized qualifiers on the left, normally canonicalized (if there are
zero such qualifiers, the value will be nil);
# a single recognized qualifier, normally canonicalized (if there is no qualifier, the value will be nil);
# the "reduced placetype" on the right.
Splitting between the qualifier in (2) and the reduced placetype in (3) happens at each space character, proceeding from
left to right, and stops if a qualifier isn't recognized. All placetypes are canonicalized by checking for aliases
in `placetype_aliases`, but no other checks are made as to whether the reduced placetype is recognized. Canonicalization
of qualifiers does not happen if `no_canon_qualifiers` is specified.
For example, given the placetype `"small beachside unincorporated community"`, the return value will be
{ {
{nil, nil, "small beachside unincorporated community"},
{nil, "small", "beachside unincorporated community"},
{"small", "[[beachfront]]", "unincorporated community"},
{"small [[beachfront]]", "[[unincorporated]]", "community"},
}}
Here, `"beachside"` is canonicalized to `"[[beachfront]]"` and `"unincorporated"` is canonicalized to
`"[[unincorporated]]"`, in both cases according to the entry in `placetype_qualifiers`.
On the other hand, if given `"small former haunted community"`, the return value will be
{ {
{nil, nil, "small former haunted community"},
{nil, "small", "former haunted community"},
{"small", "former", "haunted community"},
}}
because `"small"` and `"former"` but not `"haunted"` are recognized as qualifiers.
Finally, if given `"former adr"`, the return value will be
{ {
{nil, nil, "former adr"},
{nil, "former", "administrative region"},
}}
because `"adr"` is a recognized placetype alias for `"administrative region"`.
]==]
function export.split_qualifiers_from_placetype(placetype, no_canon_qualifiers)
local splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
local prev_qualifier = nil
while true do
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if canon == nil then
break
end
local new_qualifier = qualifier
if type(canon) == "table" then
canon = canon.link
end
if not no_canon_qualifiers and canon ~= false then
if canon == true then
new_qualifier = "[[" .. qualifier .. "]]"
else
new_qualifier = canon
end
end
insert(splits, {prev_qualifier, new_qualifier, export.resolve_placetype_aliases(reduced_placetype)})
prev_qualifier = prev_qualifier and prev_qualifier .. " " .. new_qualifier or new_qualifier
placetype = reduced_placetype
else
break
end
end
return splits
end
--[==[
Given a `placetype` (which may be pluralized), return an ordered list of equivalent placetypes to look under to find the
placetype's properties (such as the category or categories to be inserted). The return value is actually an ordered list
of objects of the form `{qualifier=``qualifier``, placetype=``equiv_placetype``}` where ``equiv_placetype`` is a
placetype whose properties to look up, derived from the passed-in placetype or from a contiguous subsequence of the
words in the passed-in placetype (always including the rightmost word in the placetype, i.e. we successively chop off
qualifier words from the left and use the remainder to find equivalent placetypes). ``qualifier`` is the remaining words
not part of the subsequence used to find ``equiv_placetype``; or nil if all words in the passed-in placetype were used
to find ``equiv_placetype``. (FIXME: This qualifier is not currently used anywhere.) Only placetypes for which there is
an entry in `placetype_data` are included. The placetype passed in is always checked first, and will form the first
entry if it exists in `placetype_data`.
'''NOTE:''' This is a tricky function as it implements handling of (a) qualifiers, (b) fallback logic, (c)
"type-raising" qualifiers such as `former`/`ancient`/etc. as well as `fictional` and `mythological`, and (d) form-of
directives, which act somewhat similarly to `former`, and allows interaction between more than one of these
simultaneously (e.g. official names of former places, which have their own categorization).
If {{tl|place}} gets too slow, one potential speedup is to memoize the results of this function, as it appears to be
getting called more than once on the same inputs. Another similar potential speedup is to memoize the results of
`iterate_matching_holonym_location()`.
For example, given the placetype `left tributary`, the following placetype/qualifier combinations are checked in turn:
```
{qualifier = nil, placetype="left tributary"}
{qualifier = "left", placetype="tributary"}
{qualifier = "left", placetype="river"}
```
and the return value will be
{ {
{qualifier = "left", placetype="tributary"},
{qualifier = "left", placetype="river"},
}}
The algorithm first enters the placetype itself into the list, then checks for `left tributary` as a recognized
placetype in `placetype_data` and doesn't find it, so it doesn't enter it into the returned list (if it found it, it
would add it as well as any fallbacks directly after it). It then splits off the recognized qualifier `left` to form the
''reduced placetype'' `tributary`, which is entered into the list because it is found in `placetype_data`. Then, because
it has a fallback `river`, which exists in `placetype_data`, the fallback is entered next.
Another example is `small rural fraziones` (where a ''frazione'' is type of subdivision of a ''comune'' or municipality,
often specifically an outlying hamlet). the placetype/qualifier combinations checked are:
```
{qualifier = nil, placetype="small rural fraziones"}
{qualifier = nil, placetype="small rural frazione"}
{qualifier = "small", placetype="rural fraziones"}
{qualifier = "small", placetype="rural frazione"}
{qualifier = "small [[rural]]", placetype="fraziones"}
{qualifier = "small [[rural]]", placetype="frazione"}
{qualifier = "small [[rural]]", placetype="hamlet"}
{qualifier = "small [[rural]]", placetype="village"}
```
The return value ends up as
{qualifier = "small [[rural]]", placetype="frazione"},
{qualifier = "small [[rural]]", placetype="hamlet"},
{qualifier = "small [[rural]]", placetype="village"},
}}
Here, because the result of singularizing `fraziones` returns a different value from the placetype itself, that
singularized value is checked after the original plural value. Also, in the process of splitting off qualifiers,
they are canonicalized if the entry in `placetype_qualifiers` says to do so; in this case, links are placed around
`rural`. Finally, `frazione` has `hamlet` as its fallback, which in turn has `village` as its fallback, so both
fallbacks end up being returned.
`no_fallback`, if set, disables returning equivalent placetypes based on the `fallback` setting for a placetype. This is
used in the first of two loops in find_placetype_cat_specs() in [[Module:place]] to prefer exact matches for placetypes
such as barangays with later holonyms to matches based on a fallback such as `neighborhood` with an earlier holonym.
See the comment in that function in [[Module:place]] for a more detailed explanation of why this is needed. Only the
placetype itself, and any reduced placetypes created by chopping off recognized qualifiers at the beginning, are
returned; but we do not return reduced placetypes if a containing placetype exists in `placetype_data`. (For example,
`"overseas territory"` has a fallback `"dependent territory"`, and `"overseas"` is also a recognized qualifier. When
`no_fallback` is in place, without the above proviso, we would return `"overseas territory"` followed by `"territory"`
with the incorrect effect of classifying an `"overseas territory"` of the United Kingdom such as `"Gibraltar"` under
[[:Category:Territories of the United Kingdom]] instead of [[:Category:Dependent territories of the United Kingdom]].)
As an exception, if `historical`, `ancient`, `former` or the like are found, they proceed ignoring `no_fallback`,
because it seems tricky to handle them correctly in the presence of `no_fallback`, and historical/former placetypes
rarely occur with exact match category specs anyway.
`no_split_qualifiers` prevents splitting off recognized qualifiers and returning the remainder of the placetype as an
equivalent placetype. Only the passed-in placetype, and any fallbacks, will be returned. This is used in
[[Module:category tree/topic cat/data/Places]] when looking up placetypes found in categories. Such placetypes won't
have qualifiers and so it doesn't make sense to try and look for them.
`from_category`, if set, causes category-only placetypes (those ending in `!`) to also be checked.
`form_of_directive`, if set, causes the specified form-of directive (e.g. `FORMER_NAME_OF`) to be prepended to checked
placetypes, their directive-specific type (e.g. `FORMER_NAME_OF_type`), and their classes (`class`) to get the
appropriate placetypes to check for form-of-directive categories. It falls back to the prepended generic `place` as a
placetype, e.g. `FORMER_NAME_OF place`, if nothing else matches.
`no_check_for_inherently_former` is used internally to prevent an infinite loop when checking for `inherently_former`.
`register_former_as_non_former` is a major hack used in `get_bare_categories` to deal with the mismatch between e.g.
known location `Yugoslavia` declaring itself a `country` but definitions of it declaring it a `former country`. It
causes the non-former version of the specified placetype to be included in the returned equivalents along with the
former placetypes. [FIXME: This should apply only to the entries in `former_countries` but it's tricky to do that now;
fix this in the known-location refactor. -- The known-location refactor is already done but we haven't yet fixed this.]
]==]
function export.get_placetype_equivs(placetype, props)
local no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former
local form_of_directive
if props then
no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former =
props.no_fallback, props.no_split_qualifiers, props.no_check_for_inherently_former, props.from_category,
props.register_former_as_non_former
form_of_directive = props.form_of_directive
end
local equivs = {}
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. `qualifier` is
-- the preceding qualifier to insert into `equivs` along with the placetype (see comment at top of function). If
-- `from_category` is given, we also check for a category-specific entry consisting of the placetype followed by
-- `!`, and in all cases we also check to see if `placetype` is plural, and if so, insert the singularized version
-- along with its fallbacks (if any) in `placetype_data`. `form_of_prefix` is a form-of prefix such as
-- `OFFICIAL_NAME_OF`. If specified, we check the fallbacks of `placetype` without the prefix but then insert into
-- `equivs` the prefixed placetype. This way, if the user says e.g. {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}},
-- we will correctly categorize into [[:Category:Official names of countries]], rather than only trying to look up
-- `OFFICIAL_NAME_OF island country` and failing, falling back ultimately to [[:Category:Official names of places]].
local function insert_placetype_and_fallbacks(qualifier, placetype, form_of_prefix)
local function insert_equiv(pt)
if form_of_prefix then
-- Let's say the user says {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}} and we have
-- no entry for `OFFICIAL_NAME_OF island country` but we do for `OFFICIAL_NAME_OF country` (which we end
-- up processing because `island country` falls back to `country`), and that entry in turn is defined
-- using a fallback. We have to insert that fallback-of-fallback, and the easiest/cleanest way of
-- handling this is by calling ourselves recursively.
insert_placetype_and_fallbacks(qualifier, form_of_prefix .. " " .. pt)
else
insert(equivs, {qualifier=qualifier, placetype=pt})
end
end
-- Insert the placetype, along with any fallbacks.
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if ptdata then
insert_equiv(canon_placetype)
if no_fallback then
return
end
local first_placetype = #equivs + 1
local prev_placetype = nil
while true do
local pt_value = export.placetype_data[canon_placetype]
if not pt_value then
internal_error("Fallback value %s specified for placetype %s but is not in `placetype_data`",
canon_placetype, prev_placetype)
end
if pt_value.fallback then
insert_equiv(pt_value.fallback)
local last_placetype = #equivs
if last_placetype - first_placetype >= 10 then
local fallback_loop = {}
for i = first_placetype, last_placetype do
insert(fallback_loop, equivs[i].placetype)
end
internal_error("Apparent loop in fallback chain: %s", table.concat(fallback_loop, " -> "))
end
prev_placetype = canon_placetype
canon_placetype = pt_value.fallback
else
break
end
end
end
end
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. This is a
-- wrapper around the more basic `insert_placetype_and_fallbacks()` which handles form-of directives. If there is no
-- form-of directive, this function directly calls `insert_placetype_and_fallbacks()`. We do things this way so that
-- form-of directives correctly combine with `former`-type qualifiers. Note that we also have special backups for
-- form-of directives that check `DIRECTIVE place` (and before that, `DIRECTIVE FORMER/ANCIENT place` is there's a
-- `former`-type directive); these backups live outside this function because we want them done once, late, rather
-- than in each invocation of `process_and_insert_placetype()`.
local function process_and_insert_placetype(qualifier, reduced_placetype)
if form_of_directive then
-- First check for e.g. `OFFICIAL_NAME_OF island country` and its fallbacks; then we look for fallbacks of
-- `island country` and check e.g. `OFFICIAL_NAME_OF country` and its fallbacks. All of this is handled by
-- `insert_placetype_and_fallbacks()` with appropriate parameters. After that, check the general class of
-- the directive, e.g. `subpolity` if something like `district` is given. (Eventually, we check for
-- `OFFICIAL_NAME_OF place` as a backup, but this happens at the end outside the loop over qualifiers.)
insert_placetype_and_fallbacks(qualifier, reduced_placetype, form_of_directive)
if not no_fallback then
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype)
local directive_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, form_of_directive .. "_type") or
export.get_placetype_prop(pt, "class") end
)
if not directive_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s in conjunction with form-of directive %s, placetype data " ..
'located but directive-specific type property %s missing, and so is "class"; ' ..
"placetypes searched are %s", reduced_placetype, form_of_directive,
form_of_directive .. "_type", reduced_placetype_equivs)
else
-- This should be allowed, as we allow unrecognized placetypes in general.
end
elseif directive_type ~= "!" then
insert_placetype_and_fallbacks(qualifier, directive_type, form_of_directive)
end
end
else
insert_placetype_and_fallbacks(qualifier, reduced_placetype)
end
end
-- Successively split off recognized qualifiers and loop over successively greater sets of qualifiers from the left
-- (unless `no_split_qualifiers` is specified, in which case we don't check for qualifiers).
local splits
if no_split_qualifiers then
splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
else
splits = export.split_qualifiers_from_placetype(placetype)
end
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, reduced_placetype = unpack(split, 1, 3)
-- If a special "former" qualifier like `former` or `historical` isn't present, and
-- `no_check_for_inherently_former` is not given (this flag is used to avoid infinite loops), check for
-- "inherently former" placetypes like `satrapy` and `treaty port` that always refer to no-longer-existing
-- placetypes, and handle accordingly.
local unlinked_this_qualifier
if this_qualifier and this_qualifier:find("%[") then
unlinked_this_qualifier = export.remove_links_and_html(this_qualifier)
else
unlinked_this_qualifier = this_qualifier
end
local former_qualifiers = this_qualifier and export.former_qualifiers[unlinked_this_qualifier] or nil
if not former_qualifiers and not no_check_for_inherently_former then
former_qualifiers = export.get_equiv_placetype_prop(reduced_placetype,
function(pt) return export.get_placetype_prop(pt, "inherently_former") end,
{no_check_for_inherently_former = true})
end
-- If a special "former" qualifier like `former` or `historical` is present, map it to the appropriate internal
-- qualifiers (`ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
-- qualifiers), fetch the `former_type` property, and treat the placetype as if a concatenation of the mapped
-- qualifier(s) and the value of `former_type`. For example, if `medieval village` is given, we map `medieval`
-- to `ANCIENT` and `FORMER`, and `village` to its `former_type` of `settlement`, and enter the placetypes
-- `ANCIENT settlement` and `FORMER settlement` (in that order) into `equivs`. If the placetype following the
-- "former" qualifier is recognized in `placetype_data` but has no `former_type` and no fallback with a
-- `former_type` specified, it is an internal error; but if the placetype isn't recognized (e.g. something like
-- `former greenhouse` is specified and we don't have an entry for `greenhouse`), just track the occurrence and
-- don't enter anything into `equivs`.
if former_qualifiers then
-- FIXME: Should we respect `no_fallback` here? My instinct says no.
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype, {
no_check_for_inherently_former = true
})
local former_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, "former_type") or
export.get_placetype_prop(pt, "class") end
)
if not former_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s, placetype data located but `former_type` missing; " ..
"placetypes searched are %s", reduced_placetype, reduced_placetype_equivs)
else
-- Enable error when we've verified there aren't any examples.
track("bad-former-placetype")
track("bad-former-placetype/" .. reduced_placetype)
--process_error("For placetype '%s', unrecognized placetype following 'former'-type " ..
-- "qualifier; searched placetype(s) %s", reduced_placetype, dump(reduced_placetype_equivs))
end
elseif former_type ~= "!" then
-- First check directly for `ANCIENT/FORMER` + the original following placetype. This makes it possible
-- for (e.g.) former provinces of the Roman empire to be categorized specially.
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. reduced_placetype)
end
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. former_type)
end
-- HACK! See explanation above for `register_former_as_non_former`.
if register_former_as_non_former then
process_and_insert_placetype(prev_qualifier, reduced_placetype)
end
-- If we're processing a form-of directive, after doing everything else we do
-- `DIRECTIVE ANCIENT/FORMER place` e.g. `OFFICIAL_NAME_OF FORMER place` as a backup.
if form_of_directive and not no_fallback then
for _, former_qualifier in ipairs(former_qualifiers) do
insert_placetype_and_fallbacks(prev_qualifier, form_of_directive .. " " .. former_qualifier ..
" place")
end
end
-- Don't continue processing equivs. The reason is probably the same as the `break` below for
-- qualifier_to_placetype_equivs[]; categories for `former BLAH` are set using `default`, and
-- non-former equivs will otherwise take precedence.
break
end
end
-- Then see if the rightmost split-off qualifier is in qualifier_to_placetype_equivs
-- (e.g. 'fictional *' -> 'fictional location'). If so, add the mapping.
if this_qualifier and export.qualifier_to_placetype_equivs[unlinked_this_qualifier] then
insert(equivs, {
qualifier=prev_qualifier,
placetype=export.qualifier_to_placetype_equivs[unlinked_this_qualifier]
})
-- Don't continue processing equivs; otherwise, if we specify 'mythological city', even though the
-- equivalent entry for 'mythological location' gets inserted ahead of the entry for 'city', the
-- latter ends up generating the category because the category for 'mythological location' is set as
-- the default value, which is used only when no non-default category can be found.
break
end
-- Finally, join the rightmost split-off qualifier to the previously split-off qualifiers to form a combined
-- qualifier, and add it along with reduced_placetype and any mapping in placetype_data for reduced_placetype.
-- NOTE: The first time through this loop, both `prev_qualifier` and `this_qualifier` are nil, and this inserts
-- the full placetype into `equivs`.
local qualifier = prev_qualifier and prev_qualifier .. " " .. this_qualifier or this_qualifier
process_and_insert_placetype(qualifier, reduced_placetype)
-- If `no_fallback` and there's an entry in `placetype_data` for this placetype, don't include any reduced
-- placetypes to avoid the "overseas territory treated as a territory" issue describe above.
if no_fallback then
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(reduced_placetype, from_category)
if canon_placetype then
break
end
end
end
-- If we're processing a form-of directive, after doing everything else we do `DIRECTIVE place` e.g.
-- `OFFICIAL_NAME_OF place` as a backup; but only if either the placetype as a whole is recognized or the placetype
-- begins with a recognized qualifier. This latter check is to avoid categorizing into e.g.
-- [[Category:en:Former names of places]] in an invocation like
-- {{place|en|@former name of:Democratic Republic of the Congo|country|r/Central Africa|;|used from 1971–1997}};
-- the `used from 1971–1997` gets treated as a placetype and we're called on it.
if form_of_directive and not no_fallback and (splits[2] or export.get_placetype_data(placetype, from_category)) then
insert_placetype_and_fallbacks(nil, form_of_directive .. " place")
end
return equivs
end
function export.get_equiv_placetype_prop_from_equivs(equivs, fun, continue_on_nil_only)
for _, equiv in ipairs(equivs) do
local retval = fun(equiv.placetype)
if continue_on_nil_only and retval ~= nil or not continue_on_nil_only and retval then
return retval, equiv
end
end
return nil, nil
end
--[==[
Given a placetype `placetype` and a function `fun` of one argument, iteratively call the function on equivalent
placetypes fetched from `get_placetype_equivs` until the function returns a non-falsy value (i.e. not {nil} or {false});
but if `continue_on_nil_only` is specified, the iterations continue until the function returns non non-{nil} value.
FIXME: We should make `continue_on_nil_only` the default; but this requires changing some callers.) When `fun` returns a
non-falsy or non-{nil} value, `get_equiv_placetype_prop` returns two values: the value returned by `fun` and the
equivalent placetype that triggered the non-falsy (or non-{nil}) return value. If `fun` never returns a non-falsy (or
non-{nil}) value, `get_equiv_placetype_prop` returns {nil} for both return values. If `placetype` is passed in as {nil},
the return value is the result of calling `fun` on {nil} (whatever it is) with {nil} for the second return value.
]==]
function export.get_equiv_placetype_prop(placetype, fun, props)
if not placetype then
return fun(nil), nil
end
return export.get_equiv_placetype_prop_from_equivs(export.get_placetype_equivs(placetype, props), fun,
props and props.continue_on_nil_only)
end
--[==[
Return the article that is used with an entry placetype. We proceed as follows:
# See if there is a recognized qualifier at the beginning that specifies an article (including `false` for no article).
This takes precedence over anything else, so that e.g. `various capitals` gets no article rather than "`the"`.
# Then check the placetype or any equivalent placetype for the `entry_placetype_use_the` property, indicating that
`"the"` should be used.
# Otherwise we look to see if the placetype itself (not any equivalents, even those involving deleting a qualifier from
the beginning) has an entry in `placetype_data` that specifies the indefinite article using `entry_placetype_use_the`
(principally for use with placetypes like `union territory`).
# Otherwise, we use [[Module:en-utilities]] to apply the standard algorithm to generate `"an"` for words beginning with
a vowel and `"a"` otherwise.
If `ucfirst` is true, the first letter of the article is made upper-case.
]==]
function export.get_placetype_article(placetype, ucfirst)
local art
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if type(canon) == "table" then
art = canon.article
end
end
if art == false then
return art
end
if art == nil then
local placetype_use_the = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "entry_placetype_use_the") end)
if placetype_use_the then
art = "the"
else
art = export.get_placetype_prop(placetype, "entry_placetype_indefinite_article")
if not art then
art = require(en_utilities_module).get_indefinite_article(placetype)
end
end
end
if ucfirst then
art = m_strutils.ucfirst(art)
end
return art
end
--[==[
Return the preposition that should be used after `placetype` when occurring as an entry placetype or in categories
(e.g. `city >in< France` but `country >of< South America`). The preposition defaults to `"in"` if not specified.
]==]
function export.get_placetype_entry_preposition(placetype)
local pt_prep = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "preposition") end
)
return pt_prep or "in"
end
--[==[
Given a place desc (see top of file) and a holonym object (see top of file), add a key/value into the place desc's
`holonyms_by_placetype` field corresponding to the placetype and placename of the holonym. For example, corresponding
to the holonym "c/Italy", a key "country" with the list value {"Italy"} will be added to the place desc's
`holonyms_by_placetype` field. If there is already a key with that place type, the new placename will be added to the
end of the value's list.
]==]
function export.key_holonym_into_place_desc(place_desc, holonym)
if not holonym.placetype then
return
end
-- Key in equivalent placetypes, so that e.g. `cities/San Francisco` gets keyed under `city`; but don't do
-- fallbacks, as it doesn't seem correct for the "do other holonyms of the same placetype" algorithm to do holonyms
-- of different types just because they have the same fallback.
local equiv_placetypes = export.get_placetype_equivs(holonym.placetype, {no_fallback = true})
local unlinked_placename = holonym.unlinked_placename
for _, equiv in ipairs(equiv_placetypes) do
local placetype = equiv.placetype
if not place_desc.holonyms_by_placetype then
place_desc.holonyms_by_placetype = {}
end
if not place_desc.holonyms_by_placetype[placetype] then
place_desc.holonyms_by_placetype[placetype] = {unlinked_placename}
else
insert(place_desc.holonyms_by_placetype[placetype], unlinked_placename)
end
end
end
--[=[
Construct a formatted link from the raw link spec `link` given the canonical singular placetype `sg_placetype`. If the
placetype was originally plural, `orig_placetype` should contain this plural value; otherwise it should be nil. This
will construct the appropriate type of link that displays as `orig_placetype` (or otherwise `sg_placetype`) but links to
whatever the `link` spec specifies (which may be `sg_placetype`, a Wikipedia article, etc.). `ptdata` is the placetype
data structure for the placetype, and `from_category` indicates that we are generating the description of a category
(otherwise we are generating the display form of an entry placetype).
]=]
local function make_placetype_link(link, sg_placetype, orig_placetype, ptdata, from_category, noerror)
if not from_category and ptdata.disallow_in_entries then
if noerror then
return "[not meant to be specified directly, with warning: " .. ptdata.disallow_in_entries .. "]"
else
process_error("Placetype %s is not meant to be specified directly: " .. ptdata.disallow_in_entries, sg_placetype)
end
end
if link == nil then
internal_error("Placetype data present for placetype %s but no link= setting given", sg_placetype)
elseif link == true then
if orig_placetype then
return ("[[%s|%s]]"):format(sg_placetype, orig_placetype)
else
return ("[[%s]]"):format(sg_placetype)
end
elseif link == false then
process_error("Placetype %s is not meant to be specified directly, but is only for internal use", sg_placetype)
elseif link == "w" then
return ("[[w:%s|%s]]"):format(sg_placetype, orig_placetype or sg_placetype)
elseif link == "separately" then
if orig_placetype then
local sg_words = split(sg_placetype, " ")
local orig_words = split(orig_placetype, " ")
if #sg_words ~= #orig_words then
internal_error("Can't construct 'separately' link for plural placetype %s as original placetype %s " ..
"has different number of words", orig_placetype, sg_placetype)
else
for i = 1, #sg_words do
if sg_words[i] == orig_words[i] then
sg_words[i] = ("[[%s]]"):format(sg_words[i])
else
sg_words[i] = ("[[%s|%s]]"):format(sg_words[i], orig_words[i])
end
end
return concat(sg_words, " ")
end
else
return (sg_placetype:gsub("([^ ]+)", "[[%1]]"))
end
elseif link:find("^%+") then
link = link:sub(2) -- discard initial +
return ("[[%s|%s]]"):format(link, orig_placetype or sg_placetype)
elseif not orig_placetype then
return link
else
return require(en_utilities_module).pluralize(link)
end
end
--[==[
Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the
plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying
as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description
of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like
[[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or
`"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description
for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with
special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the
"full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is
prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be
disallowed.
]==]
function export.get_placetype_display_form(placetype, category_type, return_full, noerror)
local from_category = not not category_type
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if canon_placetype then
local raw_link
local function is_linked_string(str)
return type(str) == "string" and str:find("%[%[")
end
if category_type then
local fetched_full
local function fetch_maybe_full(prop)
local retval = ptdata["full_" .. prop]
if retval ~= nil then
if return_full then
return retval, true
else
internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval)
end
end
return ptdata[prop], false
end
local function maybe_prefix(str)
if return_full and not fetched_full then
return "names of " .. str
else
return str
end
end
-- Careful with `false` as possible value.
if category_type == "top-level" then
raw_link, fetched_full = fetch_maybe_full("category_link_top_level")
elseif category_type == "noncity" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity")
elseif category_type == "city" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_city")
else
internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"',
category_type)
end
if type(raw_link) == "string" then
return maybe_prefix(raw_link), ptdata
elseif raw_link ~= nil then
return raw_link, ptdata
end
raw_link, fetched_full = fetch_maybe_full("category_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
if ptmatch == "plural" then
raw_link, fetched_full = fetch_maybe_full("plural_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
end
if raw_link == nil then
raw_link, fetched_full = fetch_maybe_full("link")
end
if raw_link == false then
return raw_link, ptdata
end
return maybe_prefix(make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata
else
if ptmatch == "plural" then
raw_link = ptdata.plural_link
if raw_link == false then
process_error("Placetype %s cannot appear plural", placetype)
end
if is_linked_string(raw_link) then
return raw_link, ptdata
end
end
if raw_link == nil then
raw_link = ptdata.link
end
return make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata
end
end
return nil
end
local function resolve_unlinked_placename_display_aliases(placetype, placename)
local equiv_placetypes = export.get_placetype_equivs(placetype)
for i, equiv in ipairs(equiv_placetypes) do
equiv_placetypes[i] = equiv.placetype
end
local all_display_aliases_found = {}
local all_others_found = {}
for group, key, spec in m_locations.iterate_matching_location {
placetypes = equiv_placetypes,
placename = placename,
alias_resolution = "display",
} do
if spec.alias_of and spec.display then
insert(all_display_aliases_found, {group, key, spec, spec.display_as_full})
else
insert(all_others_found, {group, key, spec})
end
end
if not all_display_aliases_found[1] then
return placename
elseif all_display_aliases_found[2] then
internal_error("Found multiple matching display aliases for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
elseif all_others_found[1] then
internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
else
local group, key, spec, as_full = unpack(all_display_aliases_found[1])
local full, elliptical = m_locations.key_to_placename(group, key)
return as_full and full or elliptical
end
end
--[==[
If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged.
Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`,
`country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as
`United States`.
'''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they
should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed.
For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to
`Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political
connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!)
to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two
terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to
`North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly
display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve
alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and
consistency.
]==]
function export.resolve_placename_display_aliases(placetype, placename)
-- If the placename is a link, apply the alias inside the link.
-- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will
-- be empty.
local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$")
if link then
if linktext ~= "" then
local alias = resolve_unlinked_placename_display_aliases(placetype, linktext)
return "[[" .. link .. "|" .. alias .. "]]"
else
local alias = resolve_unlinked_placename_display_aliases(placetype, link)
return "[[" .. alias .. "]]"
end
else
return resolve_unlinked_placename_display_aliases(placetype, placename)
end
end
--[==[
Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key.
]==]
function export.get_prefixed_key(key, spec)
if spec.the then
return "the " .. key
else
return key
end
end
-- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary.
export.iterate_matching_location = m_locations.iterate_matching_location
--[=[
Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the
specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If
`first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is
specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified
by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the
holonym index and holonym structure, similar to `ipairs()`.
]=]
function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms)
local stop_at_also = not not first_holonym_index
return function(place_desc, index)
while true do
index = index + 1
local this_holonym = place_desc.holonyms[index]
-- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also`
-- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym
-- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with
-- `:also`.
if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then
return nil
end
-- If not placetype, we're processing raw text, which we normally want to skip.
if include_raw_text_holonyms or this_holonym.placetype then
return index, this_holonym
end
end
end, place_desc, first_holonym_index and first_holonym_index - 1 or 0
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all
such known locations, returning for each location the corresponding key, spec and group as well as the trail of
ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between
the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data`
are:
* `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with
`iterate_matching_location()`.
* `holonym_placename`: The placename of the holonym.
* `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the
holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms
following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none
exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.)
* `place_desc`: Description of the place; used for the holonyms, to check for container mismatches.
Returns four values: the location group, the canonical key by which the location is known, the spec object describing
the location and the trail of ancestral containers for the location. The first three values are the same as for
`iterate_matching_location`.
]==]
function export.iterate_matching_holonym_location(data)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
local matching_location_iterator = m_locations.iterate_matching_location {
placetypes = holonym_placetype,
placename = holonym_placename,
}
return function()
while true do
local group, key, spec = matching_location_iterator()
if not group then
return nil
end
local container_trail = {}
-- For each level of container, check that there are no mismatches (i.e. other location of the same
-- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container
-- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city
-- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of
-- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark,
-- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New
-- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough,
-- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If
-- there are no mismatches at any level we assume we're dealing with the right known location.
--
-- If at a given level there are multiple containing locations, we count a match if any holonym matches any
-- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any
-- containing location.
local containers_mismatch = false
for containers in m_locations.iterate_containers(group, key, spec) do
insert(container_trail, containers)
local match_at_level = false
local mismatch_at_level = false
for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc,
holonym_index and holonym_index + 1 or nil) do
local other_source_holonym = other_holonym.augmented_from_holonym
if other_source_holonym and other_source_holonym.placetype == holonym_placetype and
other_source_holonym.unlinked_placename ~= holonym_placename then
-- Ignore holonyms added during the augmentation process for other holonyms of the same
-- placetype as the placetype of the holonym we're considering. See comment in
-- augment_holonyms_with_container() for why we do this.
-- continue; grrr, no 'continue' in Lua
else
local holonym_matches_at_level = false
local holonym_exists_with_same_placetype = false
for _, container in ipairs(containers) do
if not container.spec.no_check_holonym_mismatch then
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
local placetypes = container.spec.placetype
if type(placetypes) ~= "table" then
placetypes = {placetypes}
end
local placetype_equivs = {}
for _, pt in ipairs(placetypes) do
m_table.extend(placetype_equivs, export.get_placetype_equivs(pt))
end
local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype and
(other_holonym.unlinked_placename == full_container_placename or
other_holonym.unlinked_placename == elliptical_container_placename)
end
)
if this_holonym_matches then
holonym_matches_at_level = true
break
end
local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype
end
)
if this_holonym_exists_with_same_placetype then
-- We seem to have a mismatch at this level. But before we decide conclusively that this
-- is the case, check to see whether the putative mismatch is an alias and matches when
-- we resolve the alias.
for oh_group, oh_key, oh_spec, oh_container_trail in
export.iterate_matching_holonym_location {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = place_desc,
} do
local oh_full_placename, oh_elliptical_placename =
m_locations.key_to_placename(oh_group, oh_key)
if oh_full_placename == full_container_placename or
oh_elliptical_placename == elliptical_container_placename then
-- Alias matched when resolved.
this_holonym_matches = true
break
end
end
if this_holonym_matches then
-- Alias matched above when resolved.
holonym_matches_at_level = true
break
else
-- Not an alias, or doesn't match when resolved. We have a true mismatch.
holonym_exists_with_same_placetype = true
end
end
end
end
if holonym_matches_at_level then
match_at_level = true
break
end
if holonym_exists_with_same_placetype then
mismatch_at_level = true
end
end
end
if not match_at_level and mismatch_at_level then
containers_mismatch = true
break
end
end
if not containers_mismatch then
return group, key, spec, container_trail
end
end
end
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the
corresponding key, spec and group as well as the trail of ancestral containers. This is like
`iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this
would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To
fix this, specify additional following disambiguating holonyms, e.g.
{{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}.
]==]
function export.find_matching_holonym_location(data)
local all_found = {}
for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do
insert(all_found, {group, key, spec, container_trail})
end
if not all_found[1] then
return nil
elseif all_found[2] then
local holonym_placetype = data.holonym_placetype
if type(holonym_placetype) == "table" then
holonym_placetype = concat(holonym_placetype, ",")
end
local found_keys = {}
for _, found in ipairs(all_found) do
local _, key, _, _ = unpack(found)
insert(found_keys, key)
end
error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " ..
"containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys)))
else
return unpack(all_found[1])
end
end
------------------------------------------------------------------------------------------
-- Placename and placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their
canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which
applies to categorization and other processes but not to display.
The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state",
"province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g.
"census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype.
Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be
interpreted as "department", "district" or "division").
]==]
export.placetype_aliases = {
["acomm"] = "autonomous community",
["adr"] = "administrative region",
["adterr"] = "administrative territory", -- Pakistan
["aobl"] = "autonomous oblast",
["aokr"] = "autonomous okrug",
["ap"] = "autonomous province",
["apref"] = "autonomous prefecture",
["aprov"] = "autonomous province",
["ar"] = "autonomous region",
["arch"] = "archipelago",
["arep"] = "autonomous republic",
["aterr"] = "autonomous territory",
["atu"] = "autonomous territorial unit",
["bor"] = "borough",
["c"] = "country",
["can"] = "canton",
["carea"] = "council area",
["cc"] = "constituent country",
["cdblock"] = "community development block",
["cdep"] = "Crown dependency",
["CDP"] = "census-designated place",
["cdp"] = "census-designated place",
["clcity"] = "county-level city",
["co"] = "county",
["cobor"] = "county borough",
["colcity"] = "county-level city",
["coll"] = "collectivity",
["comm"] = "community",
["cont"] = "continent",
["contr"] = "continental region",
["contregion"] = "continental region",
["cpar"] = "civil parish",
["damun"] = "direct-administered municipality",
["dep"] = "dependency",
["department capital"] = "departmental capital",
["dept"] = "department",
["depterr"] = "dependent territory",
["dist"] = "district",
["distmun"] = "district municipality",
["div"] = "division",
["emp"] = "empire",
["fpref"] = "French prefecture",
["gov"] = "governorate",
["govnat"] = "governorate",
["home-rule city"] = "home rule city",
["home-rule municipality"] = "home rule municipality",
["inner-city area"] = "inner city area",
["ires"] = "Indian reservation",
["isl"] = "island",
["lbor"] = "London borough",
["lga"] = "local government area",
["lgarea"] = "local government area",
["lgd"] = "local government district",
["lgdist"] = "local government district",
["metbor"] = "metropolitan borough",
["metcity"] = "metropolitan city",
["metmun"] = "metropolitan municipality",
["mtn"] = "mountain",
["mun"] = "municipality",
["mundist"] = "municipal district",
["nonmetropolitan county"] = "non-metropolitan county",
["obl"] = "oblast",
["okr"] = "okrug",
["p"] = "province",
["par"] = "parish",
["parmun"] = "parish municipality",
["pen"] = "peninsula",
["plcity"] = "prefecture-level city",
["plcolony"] = "Polish colony",
["pref"] = "prefecture",
["prefcity"] = "prefecture-level city",
["preflcity"] = "prefecture-level city",
["prov"] = "province",
["r"] = "region",
["range"] = "mountain range",
["rcm"] = "regional county municipality",
["rcomun"] = "regional county municipality",
["rdist"] = "regional district",
["rep"] = "republic",
["rhrom"] = "rural hromada",
["riv"] = "river",
["rmun"] = "regional municipality",
["robor"] = "royal borough",
["romp"] = "Roman province",
["runit"] = "regional unit",
["rurmun"] = "rural municipality",
["s"] = "state",
["sar"] = "special administrative region",
["shrom"] = "settlement hromada",
["spref"] = "subprefecture",
["sprefcity"] = "sub-prefectural city",
["sprovcity"] = "subprovincial city",
["submet city"] = "sub-metropolitan city",
["submetropolitan city"] = "sub-metropolitan city",
["sub-prefecture-level city"] = "sub-prefectural city",
["sub-provincial city"] = "subprovincial city",
["sub-provincial district"] = "subprovincial district",
["terr"] = "territory",
["terrauth"] = "territorial authority",
["twp"] = "township",
["twpmun"] = "township municipality",
["uauth"] = "unitary authority",
["ucomm"] = "unincorporated community",
["udist"] = "unitary district",
["uhrom"] = "urban hromada",
["uterr"] = "union territory",
["utwpmun"] = "united township municipality",
["val"] = "valley",
["vdc"] = "village development committee",
["vil"] = "village",
["voi"] = "voivodeship",
["wcomm"] = "Welsh community",
-- Chinese capital/seat types
["首都"] = "capital",
["省會"] = "provincial capital",
["首府"] = "regional capital",
["縣治"] = "county seat",
}
local no_link_def_article = {link = false, article = "the"}
local no_link_no_article = {link = false, article = false}
--[==[ var:
These qualifiers can be prepended onto any placetype and will be handled correctly. For example, the placetype
`large city` will be displayed as `large <nowiki>[[city]]</nowiki>` and categorized as if `city` were specified. If the
value in the following table is a string, the qualifier will display according to the string. If the value is `true`,
the qualifier will be linked to its corresponding Wiktionary entry. If the value is `false`, the qualifier will not be
linked but will appear as-is. Note that these qualifiers do not override placetypes with entries elsewhere that contain
those same qualifiers. For example, the entry for `inland sea` in `placetype_data` will apply in preference to treating
`inland sea` as equivalent to `sea`.
]==]
export.placetype_qualifiers = {
-- generic qualifiers
["huge"] = false,
["tiny"] = false,
["large"] = false,
["big"] = false,
["mid-size"] = false,
["mid-sized"] = false,
["small"] = false,
["sizable"] = false,
["important"] = false,
["long"] = false,
["short"] = false,
["major"] = false,
["minor"] = false,
["high"] = false,
["tall"] = false,
["low"] = false,
["left"] = false, -- left tributary
["right"] = false, -- right tributary
["modern"] = false, -- for use in opposition to "ancient" in another definition
-- "former" qualifiers
["abandoned"] = true,
["ancient"] = true,
["deserted"] = true,
["extinct"] = true,
["former"] = false,
["historic"] = "historical",
["historical"] = true,
["medieval"] = true,
["mediaeval"] = true,
["ruined"] = true,
["traditional"] = true,
-- sea qualifiers
["coastal"] = true,
["inland"] = true, -- note, we also have an entry in placetype_data for 'inland sea' to get a link to [[inland sea]]
["maritime"] = true,
["overseas"] = true,
["seaside"] = true,
["beachfront"] = true,
["beachside"] = true,
["riverside"] = true,
-- lake qualifiers
["freshwater"] = true,
["saltwater"] = true,
["endorheic"] = true,
["oxbow"] = true,
["ox-bow"] = "[[oxbow]]", -- [[ox-bow]] is a red link
["tidal"] = true,
-- land qualifiers
["hilltop"] = true,
["hilly"] = true,
["insular"] = true,
["peninsular"] = true,
["chalk"] = true,
["karst"] = true,
["limestone"] = true,
["mountainous"] = true,
["mountaintop"] = true,
["alpine"] = true,
["volcanic"] = true, -- for an island
-- political status qualifiers
["autonomous"] = true,
["incorporated"] = true,
["special"] = true,
["unincorporated"] = true,
["coterminous"] = true,
-- monetary status/etc. qualifiers
["fashionable"] = true,
["wealthy"] = true,
["affluent"] = true,
["declining"] = true,
-- city vs. rural qualifiers
["urban"] = true,
["suburban"] = true,
["exurban"] = true,
["outlying"] = true,
["remote"] = true,
["rural"] = true,
["outback"] = true,
["inner"] = false,
["inner-city"] = true,
["central"] = false,
["outer"] = false,
-- land use qualifiers
["residential"] = true,
["agricultural"] = true,
["business"] = true,
["commercial"] = true,
["industrial"] = true,
-- business use qualifiers
["railroad"] = true,
["railway"] = true,
["farming"] = true,
["fishing"] = true,
["mining"] = true,
["logging"] = true,
["cattle"] = true,
-- tourism use qualifiers
["resort"] = true, -- note, we also have 'resort city' and 'resort town', that take precedecne
["spa"] = true, -- note, we also have 'spa city' and 'spa town', that take precedecne
["ski"] = true, -- note, we also have 'ski resort city' and 'ski resort town', that take precedecne
-- religious qualifiers
["holy"] = true,
["sacred"] = true,
["religious"] = true,
["secular"] = true,
-- qualifiers for nonexistent places
["claimed"] = false,
["fictional"] = true,
["legendary"] = true,
["mythical"] = true,
["mythological"] = true,
-- directional qualifiers
["northern"] = false,
["southern"] = false,
["eastern"] = false,
["western"] = false,
["north"] = false,
["south"] = false,
["east"] = false,
["west"] = false,
["northeastern"] = false,
["southeastern"] = false,
["northwestern"] = false,
["southwestern"] = false,
["northeast"] = false,
["southeast"] = false,
["northwest"] = false,
["southwest"] = false,
-- seasonal qualifiers
["summer"] = true, -- e.g. for 'summer capital'
["winter"] = true,
-- legal status qualifiers
-- FIXME: Two-word qualifiers don't work yet. But you can enter "de-facto" and it's canonicalized to [[de facto]].
["official"] = true,
["unofficial"] = true,
["de facto"] = true, -- 'de facto capital'
["de-facto"] = "[[de facto]]", -- [[de-facto]] is a red link
["de jure"] = true, -- 'de jure capital'
["de-jure"] = "[[de jure]]", -- [[de-jure]] is a red link
-- NOTE: 'unrecognized/unrecognised' are handled as placetypes 'unrecognized country', 'unrecognized state'
-- misc. qualifiers
["planned"] = true,
["chartered"] = true,
["landlocked"] = true,
["uninhabited"] = true,
-- superlative qualifiers
["first"] = no_link_def_article,
["second"] = no_link_def_article, -- for "second largest" etc.
["third"] = no_link_def_article,
["fourth"] = no_link_def_article,
["last"] = no_link_def_article,
["only"] = no_link_def_article,
["sole"] = no_link_def_article,
["main"] = no_link_def_article,
["largest"] = no_link_def_article,
["biggest"] = no_link_def_article,
["smallest"] = no_link_def_article,
["shortest"] = no_link_def_article,
["longest"] = no_link_def_article,
["tallest"] = no_link_def_article,
["highest"] = no_link_def_article,
["lowest"] = no_link_def_article,
["leftmost"] = no_link_def_article,
["rightmost"] = no_link_def_article,
["innermost"] = no_link_def_article,
["outermost"] = no_link_def_article,
["northernmost"] = no_link_def_article,
["southernmost"] = no_link_def_article,
["westernmost"] = no_link_def_article,
["easternmost"] = no_link_def_article,
["northwesternmost"] = no_link_def_article,
["southwesternmost"] = no_link_def_article,
["northeasternmost"] = no_link_def_article,
["southeasternmost"] = no_link_def_article,
-- several/various
["several"] = no_link_no_article,
["various"] = no_link_no_article,
["numerous"] = no_link_no_article,
["multiple"] = no_link_no_article,
["many"] = no_link_no_article,
["other"] = no_link_no_article,
}
--[==[ var:
In this table, the key qualifiers should be treated the same as the value qualifiers for categorization purposes. This
is overridden by `placetype_data` and `qualifier_to_placetype_equivs`.
]==]
export.former_qualifiers = {
["abandoned"] = {"FORMER"},
["ancient"] = {"ANCIENT", "FORMER"},
["former"] = {"FORMER"},
["extinct"] = {"FORMER"},
["historic"] = {"FORMER"},
["historical"] = {"FORMER"},
["medieval"] = {"ANCIENT", "FORMER"},
["mediaeval"] = {"ANCIENT", "FORMER"},
["ruined"] = {"ANCIENT", "FORMER"},
["traditional"] = {"FORMER"},
}
--[==[ var:
In this table, any placetypes containing these qualifiers that do not occur in `placetype_data` should be mapped to the
specified placetypes for categorization purposes. Entries here are overridden by `placetype_data`.
]==]
export.qualifier_to_placetype_equivs = {
["fictional"] = "fictional location",
["legendary"] = "mythological location",
["mythical"] = "mythological location",
["mythological"] = "mythological location",
-- For e.g. Taiwan as a "claimed province" of China; parts of Belize as claimed by Guatemala; various islands
-- claimed by various parties in East Asia. FIXME: We should conditionalize on what is being claimed since there are
-- also claimed capitals, e.g. Israel and Palestine claim Jerusalem as their capital.
["claimed"] = "claimed political division",
}
--[==[ var:
Mapping from placetypes to the corresponding plural category-only placetype for a capital of that placetype. The reverse
mapping also exists.
]==]
export.placetype_to_capital_cat = {
["autonomous community"] = "autonomous community capitals",
["canton"] = "cantonal capitals",
["comarca"] = "comarca capitals",
["country"] = "national capitals",
-- The following are not obviously different from 'county seats' but the latte terminology is used in the US.
["county"] = "county capitals",
["department"] = "departmental capitals",
["district"] = "district capitals",
["division"] = "division capitals",
["emirate"] = "emirate capitals",
["governorate"] = "governorate capitals",
["hromada"] = "hromada capitals",
["krai"] = "krai capitals",
["metropolitan city"] = "metropolitan city capitals",
["municipality"] = "municipal capitals",
["oblast"] = "oblast capitals",
["okrug"] = "okrug capitals",
["prefecture"] = "prefectural capitals",
["province"] = "provincial capitals",
["raion"] = "raion capitals",
["regency"] = "regency capitals",
["region"] = "regional capitals",
["regional unit"] = "regional unit capitals",
["republic"] = "republic capitals",
["state"] = "state capitals",
["territory"] = "territorial capitals",
["voivodeship"] = "voivodeship capitals",
}
--[==[ var:
This contains placenames that should be preceded by an article (almost always "the"). '''NOTE''': There are multiple
ways that placenames can come to be preceded by "the":
# Listed here.
# Given in [[Module:place/locations]] with an initial "the". All such placenames are added to this map by the code
just below the map.
# The placetype of the placename has `holonym_use_the = true` in its placetype_data.
# A regex in placename_the_re matches the placename.
Note that "the" is added only before the first holonym in a place description.
]==]
export.placename_article = {
-- This should only contain info that can't be inferred from [[Module:place/locations]].
["archipelago"] = {
["Cyclades"] = "the",
["Dodecanese"] = "the",
},
["country"] = {
["Holy Roman Empire"] = "the",
},
["empire"] = {
["Holy Roman Empire"] = "the",
},
["island"] = {
["North Island"] = "the",
["South Island"] = "the",
},
["region"] = {
["Balkans"] = "the",
["Russian Far East"] = "the",
["Caribbean"] = "the",
["Caucasus"] = "the",
["Middle East"] = "the",
["New Territories"] = "the",
["North Caucasus"] = "the",
["South Caucasus"] = "the",
["West Bank"] = "the",
["Gaza Strip"] = "the",
},
["valley"] = {
["San Fernando Valley"] = "the",
},
}
--[==[ var:
Regular expressions to apply to determine whether we need to put 'the' before a holonym. The key "*" applies to all
holonyms, otherwise only the regexes for the holonym's placetype apply.
]==]
export.placename_the_re = {
-- We don't need entries for peninsulas, seas, oceans, gulfs or rivers
-- because they have holonym_use_the = true.
["*"] = {"^Isle of ", " Islands$", " Mountains$", " Empire$", " Country$", " Region$", " District$", "^City of "},
["bay"] = {"^Bay of "},
["lake"] = {"^Lake of "},
["country"] = {"^Republic of ", " Republic$"},
["republic"] = {"^Republic of ", " Republic$"},
["region"] = {" [Rr]egion$"},
["river"] = {" River$"},
["local government area"] = {"^Shire of "},
["county"] = {"^Shire of "},
["Indian reservation"] = {" Reservation", " Nation"},
["tribal jurisdictional area"] = {" Reservation", " Nation"},
}
--[==[ var:
If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of
holonyms for categorization (but not display) purposes.
]==]
export.cat_implications = {
["region"] = {
["Eastern Europe"] = {"continent/Europe"},
["Central Europe"] = {"continent/Europe"},
["Western Europe"] = {"continent/Europe"},
["South Europe"] = {"continent/Europe"},
["Southern Europe"] = {"continent/Europe"},
["Northern Europe"] = {"continent/Europe"},
["Northeast Europe"] = {"continent/Europe"},
["Northeastern Europe"] = {"continent/Europe"},
["Southeast Europe"] = {"continent/Europe"},
["Southeastern Europe"] = {"continent/Europe"},
["North Caucasus"] = {"continent/Europe"},
["South Caucasus"] = {"continent/Asia"},
["South Asia"] = {"continent/Asia"},
["Southern Asia"] = {"continent/Asia"},
["East Asia"] = {"continent/Asia"},
["Eastern Asia"] = {"continent/Asia"},
["Central Asia"] = {"continent/Asia"},
["West Asia"] = {"continent/Asia"},
["Western Asia"] = {"continent/Asia"},
["Southeast Asia"] = {"continent/Asia"},
["North Asia"] = {"continent/Asia"},
["Northern Asia"] = {"continent/Asia"},
["Anatolia"] = {"continent/Asia"},
["Asia Minor"] = {"continent/Asia"},
["Mesopotamia"] = {"continent/Asia"},
["North Africa"] = {"continent/Africa"},
["Central Africa"] = {"continent/Africa"},
["West Africa"] = {"continent/Africa"},
["East Africa"] = {"continent/Africa"},
["Southern Africa"] = {"continent/Africa"},
["Central America"] = {"continent/Central America"},
["Caribbean"] = {"continent/North America"},
["Polynesia"] = {"continent/Oceania"},
["Micronesia"] = {"continent/Oceania"},
["Melanesia"] = {"continent/Oceania"},
["Siberia"] = {"country/Russia", "continent/Asia"},
["Russian Far East"] = {"country/Russia", "continent/Asia"},
["South Wales"] = {"constituent country/Wales", "continent/Europe"},
["Balkans"] = {"continent/Europe"},
["West Bank"] = {"country/Palestine", "continent/Asia"},
["Gaza"] = {"country/Palestine", "continent/Asia"},
["Gaza Strip"] = {"country/Palestine", "continent/Asia"},
}
}
------------------------------------------------------------------------------------------
-- Category and display handlers --
------------------------------------------------------------------------------------------
local function city_type_cat_handler(data)
local entry_placetype = data.entry_placetype
local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities")
if not generic_before_non_cities then
internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" ..
" setting", entry_placetype)
end
local plural_entry_placetype = export.pluralize_placetype(entry_placetype)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and not spec.is_city then
-- ZH: "法國的城市" (location_key + 的 + zh_placetype_name)
local zh_name_raw = export.get_zh_placetype_name(entry_placetype)
local zh_entry_name = zh_name_raw and export.format_zh_name(zh_name_raw) or plural_entry_placetype
local de = export.zh_strings.de_particle
local retcats = {export.get_prefixed_key(key, spec) .. de .. zh_entry_name}
if container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_entry_name)
end
end
return retcats
end
end
local function capital_city_cat_handler(data, non_city)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
-- The first time we're called we want to return something; otherwise we will be called for later-mentioned
-- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in
-- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital
-- category/categories we add below.
local retcats
if not non_city and place_desc.holonyms then
for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do
local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename
retcats = city_type_cat_handler {
entry_placetype = "city",
holonym_placetype = h_placetype,
holonym_placename = h_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if retcats then
break
end
end
end
if not retcats then
retcats = {}
end
-- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we
-- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State
-- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory'
-- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's
-- an entry for 'autonomous community').
-- ZH: look up Chinese capital label by holonym placetype ("首都", "省會", "首府", etc.)
local zh_capital_name = export.zh_capital_label_by_holonym_type[holonym_placetype]
if not zh_capital_name then
zh_capital_name = export.zh_capital_label_by_holonym_type[holonym_placetype:gsub("^.* ", "")]
end
local de = export.zh_strings.de_particle
if zh_capital_name then
local inserted_specific_variant_cat = false
if holonym_index then
-- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern
-- where we use :also to specify that a given city is the capital at multiple surrounding levels.
local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index
for h_index = holonym_index, #place_desc.holonyms do
if place_desc.holonyms[h_index].placetype then
matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location {
holonym_placetype = place_desc.holonyms[h_index].placetype,
holonym_placename = place_desc.holonyms[h_index].unlinked_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if matching_group then
matching_holonym_index = h_index
break
end
end
end
if matching_holonym_index == holonym_index then
if matching_container_trail[1] and not matching_spec.no_container_cat then
for _, container in ipairs(matching_container_trail[1]) do
-- ZH: "美國的首都" (location_key + 的 + zh_capital_name)
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_capital_name)
inserted_specific_variant_cat = true
end
end
elseif matching_holonym_index then
-- Check to make sure that the holonym placetype we were called on is listed among the
-- divtypes of the location we found.
local function insert_specific_variant_if_possible(key, spec)
return export.get_equiv_placetype_prop(holonym_placetype, function(pt)
local plural_holonym_placetype = export.pluralize_placetype(pt)
local saw_matching_div
if spec.divs then
local divs = spec.divs
if type(divs) ~= "table" then
divs = {divs}
end
for _, div in ipairs(divs) do
if type(div) ~= "table" then
div = {type = div}
end
if plural_holonym_placetype == div.type then
saw_matching_div = true
break
end
end
end
if saw_matching_div then
insert(retcats, export.get_prefixed_key(key, spec) .. de .. zh_capital_name)
return true
end
return false
end)
end
if insert_specific_variant_if_possible(matching_key, matching_spec) then
inserted_specific_variant_cat = true
elseif not matching_spec.no_container_cat then
for _, containers in ipairs(matching_container_trail) do
local saw_no_container_cat = false
for _, container in ipairs(containers) do
if insert_specific_variant_if_possible(container.key, container.spec) then
inserted_specific_variant_cat = true
break
end
saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat
end
if inserted_specific_variant_cat or saw_no_container_cat then
break
end
end
end
end
else
-- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for
-- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing.
-- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to
-- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab.
-- Possibly we can just skip this case entirely.
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, export.get_prefixed_key(container.key, container.spec) .. de .. zh_capital_name)
inserted_specific_variant_cat = true
end
end
end
if not inserted_specific_variant_cat then
insert(retcats, zh_capital_name)
end
else
-- We didn't recognize the holonym placetype; fall back to generic capital label.
insert(retcats, "首都")
end
return retcats
end
--[=[
This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used
in two ways:
# To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and
[[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym.
# To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym
description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this
case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments,
administrative regions, and for the entire country, and for example we only want to categorize a demonym into
[[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym
invocation only adds the most specific holonym category and not the category of any containing polity (hence if we
add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]).
This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston`
as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and
[[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities
having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]],
[[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing
polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`).
Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the
mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions
Ohio and a holonym for a Columbus in a different country is encountered, because of the function
`augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered.
The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding
language code).
]=]
local function generic_place_cat_handler(data)
local from_demonym = data.from_demonym
local retcats = {}
local function insert_retkey(key, spec)
if from_demonym then
insert(retcats, key)
else
-- ZH: "法國的地點" (location_key + 的 + 地點)
insert(retcats, export.get_prefixed_key(key, spec) .. export.zh_strings.de_particle .. "地點")
end
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
if not spec.no_generic_place_cat then
-- This applies to continents and continental regions.
insert_retkey(key, spec)
end
-- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in
-- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when
-- no_container_cat is set (e.g. for 'United Kingdom').
if not spec.no_container_cat then
for _, container_set in ipairs(container_trail) do
local stop_adding_containers = false
for _, container in ipairs(container_set) do
if not container.spec.no_generic_place_cat then
insert_retkey(container.key, container.spec)
end
if container.spec.no_container_cat then
stop_adding_containers = true
end
end
if stop_adding_containers then
break
end
end
end
return retcats
end
end
--[==[
Special category handler run for all placetypes that checks for specified division placetypes of known locations and
categorizes appropriately.
]==]
function export.political_division_cat_handler(data)
if data.from_demonym then
return
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
local divlists = {}
if spec.divs then
insert(divlists, spec.divs)
end
if spec.addl_divs then
insert(divlists, spec.addl_divs)
end
for _, divlist in ipairs(divlists) do
if type(divlist) ~= "table" then
divlist = {divlist}
end
for _, div in ipairs(divlist) do
if type(div) == "string" then
div = {type = div}
end
local sgdiv = export.maybe_singularize_placetype(div.type) or div.type
local prep = div.prep or "of"
local cat_as = div.cat_as or div.type
if type(cat_as) ~= "table" then
cat_as = {cat_as}
end
if not export.placetype_data[sgdiv] then
internal_error("Placetype %s associated with known location key %s and data %s not found in " ..
"`placetype_data`", sgdiv, key, spec)
end
if sgdiv == data.entry_placetype then
local retcats = {}
for _, pt_cat in ipairs(cat_as) do
if type(pt_cat) == "string" then
pt_cat = {type = pt_cat}
end
local pt_prep = pt_cat.prep or prep
insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " ..
export.get_prefixed_key(key, spec))
end
return retcats
end
end
end
end
end
--[==[
This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any
foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value
in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the
modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the
entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the
country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized
into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to
make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is
intended for Newark, New Jersey).
]==]
function export.get_bare_categories(args, overall_place_spec)
local bare_cats = {}
local place_descs = overall_place_spec.descs
local possible_placetypes_by_place_desc = {}
for i, place_desc in ipairs(place_descs) do
possible_placetypes_by_place_desc[i] = {}
for _, placetype in ipairs(place_desc.placetypes) do
if not export.placetype_is_ignorable(placetype) then
local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true})
for _, equiv in ipairs(equivs) do
insert(possible_placetypes_by_place_desc[i], equiv.placetype)
end
end
end
end
local function check_term(term)
-- Treat Wikipedia links like local ones.
term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[")
term = export.remove_links_and_html(term)
term = term:gsub("^the ", "")
for i, place_desc in ipairs(place_descs) do
-- Iterate over all matching locations in case there are multiple, as with Delhi defined as
-- {{place|en|megacity/and/union territory|c/India|containing the national capital [[New Delhi]]}}.
for group, key, spec, container_trail in export.iterate_matching_holonym_location {
holonym_placetype = possible_placetypes_by_place_desc[i],
holonym_placename = term,
place_desc = place_desc,
} do
insert(bare_cats, key)
end
end
end
-- FIXME: Should we only do the following if the language is English (requires that the lang is passed in)?
-- We should always do it if `pagename` is given (as it is with {{tcl}}) but maybe not otherwise unless 1=en. There
-- are cases like [[Ankara]] = English name for capital of Turkey, but also the name in various languages for the
-- capital of Ghana (= English [[Accra]]). But this should get caught by mismatching the containing country. The
-- advantage of checking when the language isn't English is we catch those places that fail to give an English
-- translation but where the translation happens to be the same as the other-language spelling. However, I don't
-- know how often this situation occurs.
check_term(args.pagename or mw.loadData("Module:headword/data").pagename)
for _, t in ipairs(args.t) do
check_term(t)
end
local function check_termobj_list(terms)
for _, term in ipairs(terms) do
if term.eq then
check_term(term.eq)
end
if term.alt or term.term then
check_term(term.alt or term.term)
end
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
local arg = extra_info_terms.arg
if arg == "modern" or arg == "now" or arg == "full" or arg == "short" then
check_termobj_list(extra_info_terms.terms)
end
end
for _, directive in ipairs(overall_place_spec.directives) do
check_termobj_list(directive.terms)
end
return bare_cats
end
--[==[
This is used to augment the holonyms associated with a place description with the containing polities. For example,
given the following:
`# {{tl|place|en|subprefecture|pref/Hokkaido}}.`
We auto-add Japan as another holonym so that the term gets categorized into [[:Category:Subprefectures of Japan]].
To avoid over-categorizing we need to check to make sure no other countries are specified as holonyms.
]==]
function export.augment_holonyms_with_container(place_descs)
for _, place_desc in ipairs(place_descs) do
if place_desc.holonyms then
-- This ends up containing a copy of the original holonyms, with the augmented holonyms inserted in their
-- appropriate position. We don't just put them at the end because some holonyms have use the `:also`
-- modifier, which causes category processing to restart at that point after generating categories for a
-- preceding holonym, and we don't want the preceding holonym's augmented holonyms interfering with
-- categorization of a later holonym. We proceed from right to left, and each time we augment, we copy
-- the holonyms with the augmented holonym(s) inserted appropriately and replace the place description's
-- holonyms with the augmented ones before the next iteration. The reason for this is so that e.g.
-- {{place|neighborhood|city/Birmingham|co/West Midlands|cc/England}} doesn't throw an error during the
-- augmentation process due to 'Birmingham' referring to two known locations (in England and Alabama). If
-- we go left to right, we will throw an ambiguity error on `city/Birmingham` because code to exclude
-- Birmingham, Alabama needs `c/United Kingdom` present (to cause a mismatch with `c/United States`),
-- which isn't yet present as the augmentation code hasn't gotten to `cc/England` yet. For similar
-- reasons, we need to include the augmented holonyms in the holonyms considered in the next iteration
-- rather than modifying the place description once at athe end.
for i = #place_desc.holonyms, 1, -1 do
local holonym = place_desc.holonyms[i]
if holonym.placetype and not export.placetype_is_ignorable(holonym.placetype) then
local group, key, spec, container_trail = export.find_matching_holonym_location {
holonym_placetype = holonym.placetype,
holonym_placename = holonym.unlinked_placename,
holonym_index = i,
place_desc = place_desc,
}
if group and container_trail[1] and not spec.no_auto_augment_container then
local augmented_holonyms = {}
for j = 1, i do
insert(augmented_holonyms, place_desc.holonyms[j])
end
for _, containers in ipairs(container_trail) do
local any_no_auto_augment_container = false
for _, container in ipairs(containers) do
any_no_auto_augment_container = any_no_auto_augment_container or
container.spec.no_auto_augment_container
local containing_type = container.spec.placetype
if type(containing_type) == "table" then
-- If the containing type is a list, use the first element as the canonical variant.
containing_type = containing_type[1]
end
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
-- Don't side-effect holonyms while processing them.
local new_holonym = {
-- By the time we run, the display has already been generated so we don't need to
-- set display_placename.
placetype = containing_type,
-- placename_to_key() for the group should correctly handle both full and elliptical
-- placenames, but the full placename seems less likely to be ambiguous. FIXME: We
-- should just store the key directly and use it when available to avoid having to
-- convert key to placename and back to key.
unlinked_placename = full_container_placename,
-- Indicate that this is an augmented holonym, and was derived from the specified
-- holonym. In iterate_matching_holonym_location(), we ignore augmented holonyms
-- derived from holonyms that are different from the holonym we're searching for but
-- of the same placetype. This is to correctly handle a situation like
-- {{place|river|dept/Ardèche,Gard,Vaucluse,Bouches-du-Rhône|c/France}}. Here,
-- `Ardèche` is in `r/Auvergne-Rhône-Alpes`, while `Gard` is in `r/Occitania` and
-- the other two are in `r/Provence-Alpes-Côte d'Azur`. Augmenting proceeds from
-- right to left, so after it adds `r/Provence-Alpes-Côte d'Azur` to
-- `Bouches-du-Rhône`, Vaucluse gets augmented correctly but `Gard` fails to match
-- in find_matching_holonym_location() because of the mismatch between augmented
-- `r/Provence-Alpes-Côte d'Azur` and actual `r/Occitania`. Similarly, all later
-- calls to find_matching_holonym_location() fail to match `Gard` (and likewise
-- `Ardèche`) against any known location. To deal with this, we mark augmented
-- holoynms as being augmented due to a source holonym, and when processing a given
-- holonym, ignore augmented holonyms from other holonyms of the same placetype.
-- The restriction to the same placetype is so that `Birmingham` still gets
-- correctly disambiguated to Birmingham, England in the example given above near
-- the top of this function, using the augmented holonym `c/United Kingdom` added by
-- the specified `cc/England` (whose placetype `constituent country` differs from
-- the placetype `city` of Birmingham).
augmented_from_holonym = holonym,
}
insert(augmented_holonyms, new_holonym)
-- But it is safe to modify other parts of the place_desc.
export.key_holonym_into_place_desc(place_desc, new_holonym)
end
if any_no_auto_augment_container then
break
end
end
for j = i + 1, #place_desc.holonyms do
insert(augmented_holonyms, place_desc.holonyms[j])
end
place_desc.holonyms = augmented_holonyms
end
end
end
end
end
end
-- Cat handler for district, areas, neighborhoods and suburbs. Districts are tricky because they can either be political
-- divisions or city neighborhoods. Areas similarly can be political divisions (rarely; specifically, in Kuwait), city
-- neighborhoods or larger geographical areas/regions. We handle this as follows:
-- (1) `placetype_data` cat entries for specific countries or country divisions take precedence over cat_handlers, so if
-- the user says {{tl|place|district|s/Maharashtra|c/India}}, we won't even be called because there is an entry that
-- categorizes into [[:Category|Districts of Maharashtra, India]].
-- (2) If we're called, we check the holonym we're called on to see if it is a recognized city, e.g. if we're called
-- using {{tl|place|district|city/Mumbai|s/Maharashtra|c/India}}. If so, we categorize under e.g.
-- [[:Category:Neighbourhoods of Mumbai]]. (Choosing the spelling "neighbourhoods" because we're in India.)
-- (3) If we're called and the holonym is not a recognized city, we check if the placetype has has_neighborhoods set.
-- If so, it's "city-like" and we categorize under the first containing polity that we recognize. For example, if
-- we're called using {{tl|place|district|town/Northampton|co/Hampshire|s/Massachusetts|c/US}}, we should recognize
-- town as "city-like" and categorize under [[:Category:Neighborhoods in Massachusetts]]. (Note "in" not "of", and
-- note the spelling "neighborhoods" because we're in the US.)
-- (4) If the holonym is not city-like, we do nothing. If there's a city or city-like placetype farther up (e.g. we're
-- called as {{tl|place|district|ward/Foo|mun/Bar|...}}), we will handle the city-like entity according to (2) or
-- (3) when called on that holonym. Otherwise either the categorization in (1) takes place or there's no
-- categorization.
local function district_neighborhood_cat_handler(data)
local function get_plural_entry_placetype(location_spec, container_trail)
if data.entry_placetype == "suburb" then
return "Suburbs"
else
-- Check for `british_spelling` setting on the spec itself or any container.
local uses_british_spelling = location_spec.british_spelling
if uses_british_spelling == nil and container_trail then
for _, container_set in ipairs(container_trail) do
local must_outer_break = false
for _, container in ipairs(container_set) do
if container.spec.british_spelling ~= nil then
uses_british_spelling = container.spec.british_spelling
must_outer_break = true
break
end
end
if must_outer_break then
break
end
end
end
return uses_british_spelling and "Neighbourhoods" or "Neighborhoods"
end
end
-- First check the immediate holonym to see if it's a city or a city-like top-level entity (Hong Kong, Bonaire,
-- etc.)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and spec.is_city then
return {get_plural_entry_placetype(spec, container_trail) .. " of " .. export.get_prefixed_key(key, spec)}
end
-- If the entry placetype is neighbo(u)rhood, assume it is a neighborhood even if there isn't a city-like
-- entity father up the chain. (E.g. due to a mistaken use of m/ instead of mun/ for municipality.)
local has_neighborhoods
local entry_placetype = data.entry_placetype
if entry_placetype == "neighborhood" or entry_placetype == "neighbourhood" or entry_placetype == "suburb" then
has_neighborhoods = true
else
-- Otherwise, make sure the current holonym is city-like.
has_neighborhoods = export.get_equiv_placetype_prop(data.holonym_placetype, function(pt)
return export.get_placetype_prop(pt, "has_neighborhoods")
end, {continue_on_nil_only = true})
end
if has_neighborhoods then
-- Loop up the holonyms, looking for city and city-like entities in case of e.g. [[Sepulveda]] written
-- {{place|en|neighborhood|valley/San Fernando Valley|city/Los Angeles|s/California|c/USA}}
-- but also look for a recognizable poldiv, and if so categorize as "Neighborhoods in POLDIV". We need
-- to start with the current holonym, which is especially important for neighborhoods and suburbs that
-- may have the first holonym be a recognizable province, etc. but can't hurt otherwise. (Previously
-- we skipped the first/current holonym.)
for other_holonym_index, other_holonym in export.get_holonyms_to_check(data.place_desc,
data.holonym_index) do
local other_holonym_data = {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = data.place_desc,
}
local group, key, spec, container_trail = export.find_matching_holonym_location(other_holonym_data)
if group and not spec.is_former_place then
return {get_plural_entry_placetype(spec, container_trail) .. (spec.is_city and " of " or " in ") ..
export.get_prefixed_key(key, spec)}
end
end
end
end
function export.check_already_seen_string(holonym_placename, already_seen_strings)
local canon_placename = ulower(m_links.remove_links(holonym_placename))
if type(already_seen_strings) ~= "table" then
already_seen_strings = {already_seen_strings}
end
for _, already_seen_string in ipairs(already_seen_strings) do
if canon_placename:find(already_seen_string) then
return true
end
end
return false
end
-- Prefix display handler that adds a prefix such as "Metropolitan Borough of " to the display
-- form of holonyms. We make sure the holonym doesn't contain the prefix or some variant already.
-- We do this by checking if any of the strings in ALREADY_SEEN_STRINGS, either a single string or
-- a list of strings, or the prefix if ALREADY_SEEN_STRINGS is omitted, are found in the holonym
-- placename, ignoring case and links. If the prefix isn't already present, we create a link that
-- uses the raw form as the link destination but the prefixed form as the display form, unless the
-- holonym already has a link in it, in which case we just add the prefix.
local function prefix_display_handler(prefix, holonym_placename, already_seen_strings)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(prefix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return prefix .. " " .. holonym_placename
end
return prefix .. " [[" .. holonym_placename .. "]]"
end
-- Suffix display handler that adds a suffix such as " parish" to the display form of holonyms.
-- Works identically to prefix_display_handler but for suffixes instead of prefixes.
local function suffix_display_handler(suffix, holonym_placename, already_seen_strings, include_suffix_in_link)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(suffix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return holonym_placename .. " " .. suffix
end
if include_suffix_in_link then
return "[[" .. holonym_placename .. " " .. suffix .. "]]"
else
return "[[" .. holonym_placename .. "]] " .. suffix
end
end
-- Display handler for boroughs. New York City boroughs are display as-is. Others are suffixed
-- with "borough".
local function borough_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.new_york_boroughs[unlinked_placename] then
-- Hack: don't display "borough" after the names of NYC boroughs
return holonym_placename
end
return suffix_display_handler("borough", holonym_placename)
end
local function county_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
-- Display handler for Irish counties. Irish counties are displayed as e.g. "County [[Cork]]".
if m_locations.ireland_counties["County " .. unlinked_placename .. ", Ireland"] or
m_locations.northern_ireland_counties["County " .. unlinked_placename .. ", Northern Ireland"] then
return prefix_display_handler("County", holonym_placename)
end
-- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County".
if m_locations.taiwan_counties[unlinked_placename .. " County, Taiwan"] then
return suffix_display_handler("County", holonym_placename)
end
-- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County".
if m_locations.romania_counties[unlinked_placename .. " County, Romania"] then
return suffix_display_handler("County", holonym_placename)
end
-- FIXME, we need the same for US counties but need to key off the country, not the specific county.
-- Others are displayed as-is.
return holonym_placename
end
-- Display handler for prefectures. Japanese prefectures are displayed as e.g. "[[Fukushima]] Prefecture".
-- Others are displayed as e.g. "[[Fthiotida]] prefecture".
local function prefecture_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
local suffix = m_locations.japan_prefectures[unlinked_placename .. " Prefecture, Japan"] and "Prefecture" or "prefecture"
return suffix_display_handler(suffix, holonym_placename)
end
-- Display handler for provinces of Bulgaria, Iran, Laos, North and South Korea, Thailand, Turkey and Vietnam. Recognized
-- provinces are displayed as e.g. "[[Gyeonggi]] Province" or "[[Antalya]] Province". Others are displayed as-is.
local function province_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if
m_locations.bulgaria_provinces[unlinked_placename .. "Province, Bulgaria"] or
m_locations.iran_provinces[unlinked_placename .. " Province, Iran"] or
m_locations.laos_provinces[unlinked_placename .. " Province, Laos"] or
m_locations.north_korea_provinces[unlinked_placename .. " Province, North Korea"] or
m_locations.south_korea_provinces[unlinked_placename .. " Province, South Korea"] or
m_locations.thailand_provinces[unlinked_placename .. " Province, Thailand"] or
m_locations.turkey_provinces[unlinked_placename .. " Province, Turkey"] or
m_locations.vietnam_provinces[unlinked_placename .. " Province, Vietnam"] then
return suffix_display_handler("Province", holonym_placename)
end
return holonym_placename
end
-- Display handler for Nigerian states. Nigerian states are display as "[[Kano]] State". Others are displayed as-is.
local function state_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.nigeria_states[unlinked_placename .. " State, Nigeria"] then
return suffix_display_handler("State", holonym_placename)
end
return holonym_placename
end
-- Display handler for voivodeships. Display as e.g. [[Subcarpathian Voivodeship]].
local function voivodesip_display_handler(holonym_placetype, holonym_placename)
return suffix_display_handler("Voivodeship", holonym_placename, nil, "include_suffix_in_link")
end
------------------------------------------------------------------------------------------
-- Placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
Main placetype data structure. This specifies, for each canonicalized placetype, various properties. The keys are
placetypes (in the singular, except for category-only placetypes, which are plural and followed by `!`), and the value
is a table of properties. The `"*"` key is special and is used for adding "generic" categories of the form
`Places in ``location`` `; it runs for all entry placetypes. Keys in the form of plural placetypes followed by `!` are
used only in [[Module:category tree/topic cat/data/Places]] for specifying the properties of categories containing the
specified placetype, esp. bare categories like [[:Category:States and territories]] (rather than qualified categories
like [[:Category:States and territories of Australia]]).
Keys under the value table for a given placetype of are two types: ''property keys'' (which specify the value of
specific properties) and ''categorization keys'' (which tell how to categorize certain sorts of holonyms if the
placetype in question occurs as an entry placetype). Categorization keys are either the special value `default` or are
wildcard strings with a slash in them, such as `"country/*"`. Note that only wildcard strings are currently allowed
directly in the placetype data; everything else is handled through category handlers, either per-placetype or special
(such as `political_division_cat_handler`). The algorithm for how category keys and handlers are used to generate
categories is described at the top of [[Module:place]].
There are several recognized property keys, of various types:
1. The following link-related property keys are recognized:
* `link`: '''Required''' except in category-only placetypes ending in `!`. Describes how to link and display the
placetype in the formatted description when occurring as an entry placetype. Also used for formatting pluralized
placetypes (which may occur in entry placetypes, esp. new-format ones, such as `two <<islands>>`) and may occur in
categories). The possible values are:
*# `true`: Link to the same-named Wiktionary entry. This creates a raw link, e.g. `<nowiki>[[city]]</nowiki>`, which is
converted to an English-specific link by JavaScript postprocessing. If the placetype is plural, this creates a
two-part raw link e.g. `<nowiki>[[city|cities]]</nowiki>`.
*# `"w"`: Link to the same-named Wikipedia entry. This creates a two-part link, e.g.
`<nowiki>[[w:census town|census town]]</nowiki>`, or `<nowiki>[[w:census town|census towns]]</nowiki>` if the
placetype is given plural.
*# `"+..."`: Create a two-part link to the entry following the `+` sign. For example, if `cercle` specifies
`"+w:cercles of Mali"`, a two-part link `<nowiki>[[w:cercles of Mali|cercle]]</nowiki>` will be generated, or
`<nowiki>[[w:cercles of Mali|cercles]]</nowiki>` if plural `cercles` is specified.
*# `"separately"`: Link each word separately. For example, if `administrative territory` specifies `"separately"`, it
will be linked as `<nowiki>[[administrative]] [[territory]]</nowiki>`, or as
`<nowiki>[[administrative]] [[territory|territories]]</nowiki>` if plural `administrative territories` is given.
*# another string: Use that string directly. If the placetype is plural, `pluralize()` in [[Module:en-utilities]] is
called on the string, which will correctly pluralize most strings, including those with links in them. (If there
are multiple links, the display form of the last link is pluralized.)
*# `false`: This placetype is not allowed as an entry placetype. An error will be thrown if this placetype is given as
an entry placetype. This is specified for internal-use placetypes, especially placetypes used in conjunction with
the qualifiers `former`, `ancient`, `historical` and such.
* `plural_link`: If specified and the placetype is plural, use the value in place of generating a pluralized version of
the link spec in `link`. Most commonly, this is either a string with links in it (which is used directly) or the
value `false`, indicating that the placetype cannot occur plural. (This is used for example by `caplc`, which displays
as `<nowiki>[[capital]] and [[large]]st [[city]]</nowiki>`, where a plural version doesn't make sense.) Generally if
this is specified, `plural` also needs to be specified to give a special placetype plural; this situation occurs
especially with multiword placetypes where something other than the last word is pluralized. An example is
`town with bystatus`, whose plural is `towns with bystatus`, which needs to be explicitly given. This example uses
`link = <nowiki>"[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>` ({{m|nb|bystatus}}) is a Norwegian
Bokmål word, and template calls aren't currently permitted in link strings), along with
`plural_link = <nowiki>"[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>`.
* `category_link`: Spec indicating how to display the placetype when occurring in category descriptions. Defaults to
the value of `link`, and in turn is overridden by more specific `category_link_*` keys; see below. Category-only
placetypes (which are plural and end in `!`) usually use `category_link` in preference to `link`. The value of
`category_link` can be any of the types of specs given above, but most commonly is a plural string with links in it,
spelling out the description; in this case it is used directly. When both `category_link` and `link` are given, the
value in `category_link` is typically longer and more descriptive. For example, `polity` uses `link = true`, which
just generates a link `<nowiki>[[polity]]</nowiki>` or plural `<nowiki>[[polity|polities]]</nowiki>`, but specifies a
separate `category_link = <nowiki>"[[independent]] or [[semi-]][[independent]] [[polity|polities]]"</nowiki>`, which
clarifies in the category description what a polity is.
* `category_link_top_level`: Spec indicating how to display top-level (bare/unqualified) categories, i.e. categories
where the placetype is not followed by `in ``location`` ` or `of ``location`` `. If given, this overrides
`category_link` for this type of category.
* `category_link_before_noncity`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` does not refer to a city. If given, this overrides
`category_link` for this type of category.
* `category_link_before_city`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` refer to a city. If given, this overrides `category_link` for
this type of category. An example where this is given is `neighborhood`, which uses the following specs:<ol>
<li>`link = true`</li>
<li>`category_link = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]"</nowiki>`</li>
<li>`category_link_before_city = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions"</nowiki>`</li>
</ol> This has the effect of making the entry placetype `neighborhood` display as just
`<nowiki>[[neighborhood]]</nowiki>`, while e.g. a category like `Neighborhoods of Chicago` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[Chicago]], ...</nowiki>` and a category like
`Neighborhoods in Illinois, USA` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]] in [[Illinois]], ...</nowiki>`.
* `disallow_in_entries`: If specified, this placetype cannot occur as an entry placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
* `disallow_in_holonyms`: If specified, this placetype cannot occur as a holonym placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
2. There is currently one fallback-related property key recognized:
* `fallback`: If specified, its value is a placetype which will be used for categorization purposes if no categories
get added using the placetype itself. As an example, `branch` sets a fallback of `river` but also sets
`preposition = "of"`, meaning that {{tl|place|en|branch|riv/Mississippi}} displays as `a branch of the Mississippi`
(whereas `river` itself uses the preposition `in`), but otherwise categorizes the same as `river`. A more complex
example is `area`, which sets a fallback of `geographic and cultural area` and also sets a category handler that
checks for cities or city-like entities (e.g. boroughs) occurring as holonyms and categorizes the toponym under
[[:Category:Neighborhoods of CITY]] (for recognized cities) or otherwise [[:Category:Neighborhoods of POLDIV]] (for
the nearest containing recognized location). In addition, `area` is set as a political division of Kuwait, meaning if
`c/Kuwait` occurs as holonym, the toponym is categorized under [[:Category:Areas of Kuwait]]. If none of these
categories trigger, the fallback of `geographic and cultural area` will take effect, and the toponym will be
categorized as e.g. [[:Category:Geographic and cultural areas of England]].
3. There is currently one property to control irregular plurals of placetypes:
* `plural`: If specified, its value is the plural of the placetype. Otherwise, the default pluralization algorithm in
[[Module:en-utilities]] applies (which correctly pluralizes most words, including those ending in `-y`, `-ch`, `-sh`,
`-x`, etc.). The value of `plural` is also used when converting a pluralized placetype into its singular equivalent;
for example, since the placetype `kibbutz` has `plural = "kibbutzim"`, the placetype `kibbutzim` will be recognized
as a plural and singularized to `kibbutz`. For this reason, it's occasionally necessary to specify a `plural` value
even when the default pluralization algorithm works correctly, if the default singularization algorithm won't
correctly reverse the pluralization (as with `pass` and other terms ending in `-ss`).
4. The following property keys relate to generating categories for entry placetypes and specifying the parents of those
categories:
* `class`: The general class of placetype. This is used for various purposes: (a) to categorize placetypes preceded by
a qualifier such as `former`, `ancient`, `medieval` or `historical` (note that these placetypes are not all treated
alike); (b) to determine the parent category of bare placetype categories (e.g. [[:Category:Villages]] for placetype
`village`); (c) to determine whether to add a parent category `political divisions of specific countries` to
qualified placetype categories (e.g. [[:Category:Villages in Mali]]). The possible values are:
*# `polity`: a more-or-less sovereign/independent polity, such as a country, kingdom or empire.
*# `subpolity`: a non-sovereign division of a polity, above the level of an individual settlement.
*# `settlement`: a city or smaller equivalent, such as a village. This also includes administrative divisions of a
settlement, such as wards and barangays.
*# `non-admin settlement`: similar to a settlement but without administrative or political significance, such as an
unincorporated community, farm or neighborhood.
*# `capital`: a settlement that is a capital. A former capital is generally still in existence, just not the capital
any more.
*# `natural feature`: any non-man-made feature, such as a lake, mountain, island, ocean, etc.
*# `man-made structure`: a man-made feature below the level of a neighborhood, such as a house, airport, university,
metro station, park or the like.
*# `geographic region`: a geographic or cultural region or area that has no administrative significance. These may vary
greatly in size but typically have some sort of cultural significance (possibly historical). The `former`, `ancient`,
etc. qualifier has no effect on the category of these placetypes.
*# `generic place`: a place that isn't further qualified into any specific subtype.
* `former_type`: The class of placetype used for categorizing placetypes preceded by a qualifier such as `former`,
`ancient`, `medieval` or `historical`. The possible values are the same as for `class` but with the addition of
`dependent territory` (for colonies, protectorates and the like) and `!` (ignore the historical/former/ancient/etc.
qualifier; used e.g. with `fictional location` and `mythological location`). If not specified, the value of `class`
is used. When a qualifier such as `former`, `ancient`, `medieval` or `historical` is encountered (specifically, those
in `former_qualifiers`), it is mapped using `former_qualifiers` to the appropriate internal qualifier or qualifiers
(one or both of `ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
qualifiers), which is prepended to the value of `former_type` or `class` to form a placetype whose properties are
looked up to determine how to categorize the toponym in question. For example, if `medieval village` is given, we map
`medieval` to `ANCIENT` and `FORMER`, and `village` to its `class` of `settlement`, and enter the placetypes
`ANCIENT settlement` and `FORMER settlement` (in that order) into the list of equivalent placetypes returned by
`get_placetype_equivs`. In this case, there is an entry in `placetype_data` for `ANCIENT settlement`, so its default
category spec `Ancient settlements` is used as the category. If on the other hand `medieval kingdom` is given, where
`kingdom` has a `class` value `polity`, we first look up `ANCIENT polity`, see there is no entry in `placetype_data`
for it, and then look up `FORMER polity`, which exists and has a default category spec `Former polities`, which is
used as the category. Note that if the placetype following the "former" qualifier is recognized in `placetype_data`
but has no `former_type` or `class` and no fallback with a `former_type` or `class` specified, it is an internal
error; but if the placetype isn't recognized (e.g. something like `former greenhouse` is specified and we don't have
an entry for `greenhouse`), we just track the occurrence and end up not categorizing.
* `bare_category_parent`: This specifies the first parent category of a bare placetype category named according to the
placetype in question (e.g. [[:Category:Atolls]] for placetype `atoll`, or [[:Category:Named buildings]] for
placetype `named buildings!`). If not specified, the first parent category is determined by the value of `class`,
using the mapping `class_to_bare_category_parent` in [[Module:category tree/topic cat/data/Places]].
* `addl_bare_category_parents`: Extra parent categories to add a bare placetype category to (see `bare_category_parent`
just above).
* `bare_category_breadcrumb`: Breadcrumb for bare placetype categories. Also used as the sort key of
`bare_category_parent` if it is a string.
* `inherently_former`: If specified and the given placetype is used as an entry placetype, act as if `former` or
`ancient` (depending on the value of `inherently_former`) were prefixed to the placetype. This is for placetypes that
always refer to no-longer-existing entities, such as `satrapy` and `treaty port`. The value of `inherently_former` is
a list of internal qualifiers (one or more of `ANCIENT` and/or `FORMER`), just as for `former_qualifiers`, and the
implementation is the same.
* `cat_handler`: Handler used to generate the categories to add a given toponym to, if its entry placetype is the
placetype in question. Generally the `cat_handler` function checks the holonyms specified in order to determine which
category or categories to generate. For example, `district_neighborhood_cat_handler` handles placetypes `district`,
`neighborhood`, `subdivision`, `suburb` and the like, and either adds the toponym to a category like
`Neighborhoods of ``city`` ` (if a recognized city is given as a holonym), or otherwise a category like
`Neighborhoods in ``location`` ` (for the first recognized non-city location given as a holonym, if an unrecognized
city or city-like entity is given before the recognized non-city). The algorithm that runs the category handlers
iterates over holonyms from left to right, running the `cat_handler` function on each holonym in turn until one or
more categories are returned; see below for more specifics. (Note that countries for which e.g. a `district` is a
political division do not get the corresponding category added by the `district_neighborhood_cat_handler` function but
by `political_division_cat_handler`.) `cat_handler` functions are called with one argument, `data`, describing the
resolved entry placetype (i.e. after resolving placetype aliases and fallbacks) and the holonym being processed. The
return value should be a list of category specs (categories minus the langcode prefix, with `+++` standing for the
holonym key, or the value `true`, which stands for ` ``Placetypes`` in/of ``Holonym`` `, i.e. the pluralized placetype
with the appropriate preposition as specified in `placetype_data`). `data` contains the following fields:
** `entry_placetype`: the resolved entry placetype for the entry placetype being processed (i.e. it will always have an
entry in `placetype_data` but may not be the original placetype given by the user);
** `holonym_placetype` and `holonym_placename`: the holonym placetype and placename being processed;
** `holonym_index`: the index of the holonym being processed, or {nil} if we're handling an overriding holonym (FIXME:
we will change the overriding holonym algorithm so there will be an index even when processing overriding holonyms);
** `place_desc`: a full description of the {{tl|place}} call, as specified at the top of [[Module:place]];
** `from_demonym`: If set, we are called from [[Module:demonym]], triggered by {{tl|demonym-adj}} or
{{tl|demonym-noun}}, instead of being triggered by {{tl|place}}.
* `has_neighborhoods`: If `true`, the specified placetype is city-like. This is used in the
`district_neighborhood_cat_handler` to determine whether to add a category such as `Neighborhoods in ``location`` `;
see the section just above on `cat_handler`.
5. The following preposition-related property keys are recognized:
* `preposition`: The preposition used after this placetype when it occurs as an entry placetype. Defaults to `"in"`.
* `generic_before_non_cities`: If specified, the appropriate category description handler in
[[Module:category tree/topic cat/data/Places]] will recognize categories of the form
` ``Placetype`` in/of ``location`` ` for the specified placetype and preposition, if ``location`` is a non-city. This
is used to generate descriptions for categories added by category handlers and by explicit category specs in the
placetype data. All placetypes that specify `generic_before_non_cities` or `generic_before_cities` *MUST* also specify
a value for `class` so that the category tree code can determine whether it's a political or non-political division.
* `generic_before_cities`: Like `generic_before_non_cities` but for locations referring to cities.
6. The following property keys control the auto-addition of affixes when formatting holonyms of a particular placetype:
* `affix_type`: If specified, add the placetype as an affix before or after holonyms of this placetype. Possible values
are:
*# `"pref"` (the holonym will display as `(the) placetype of Holonym`, where `the` appears when the holonym directly
follows an entry placetype);
*# `"Pref"` (same as `"pref"` but the placetype is capitalized; each word is capitalized if there are multiple);
*# `"suf"` (the holonym will display as `Holonym placetype`);
*# `"Suf"` (the holonym will display as `Holonym Placetype`, i.e. same as `"suf"` but the placetype is capitalized).
* `suffix`: String to use in place of the placetype itself when the placetype is displayed as a suffix after a holonym.
Note that `suffix` can be used independently of `affix_type` because the user can also request a suffix explicitly
using a syntax like `adr:suf/Occitania`, which will display as `Occitania region` because the placetype
`administrative region` specifies `suffix = "region"`.
* `prefix`: Like `suffix` but for use when the placetype is displayed as a prefix before the holonym.
* `affix`: Like `suffix` and `prefix` but for use when the placetype is displayed as an affix either before or after the
holonym. If both `suffix` or `prefix` and `affix` are given for a single placetype, `suffix` or `prefix` take
precedence.
* `no_affix_strings`: String or list of strings that, if they occur in the holonym, suppress the addition of any affix
requested using `affix_type`. Defaults to the placetype itself. For example, `autonomous okrug` specifies
`affix_type = "Suf"` so that `aokr/Nenets` displays as `Nenets Autonomous Okrug`, but also specifies
`no_affix_strings = "okrug"` so that `aokr/Nenets Okrug` or `aokr/Nenets Autonomous Okrug` displays as specified,
without a redundant `Autonomous Okrug` added. Matching is case-insensitive but whole-word.
* `display_handler`: A function of two arguments, `holonym_placetype` and `holonym_placename` (specifying a holonym).
Its return value is a string specifying the display form of the holonym.
7. The following property keys control the indefinite and definite articles used before entry placetypes and/or holonyms
of the specified placetype.
* `entry_placetype_use_the`: Use `"the"` before this placetype when it occurs as an entry placetype.
* `entry_placetype_indefinite_article`: Indefinite article used before this placetype when it occurs as an entry
placetype (usually `"a"`, specifically for placetypes beginning with u- that don't take the indefinite article
`"an"`). Defaults to the appropriate indefinite article (`"a"` or `"an"` depending on whether the placetype begins
with a vowel). Overridden by `entry_placetype_use_the`, and unlike for most properties, does not apply to equivalent
placetypes (i.e. fallbacks or those formed by removing a qualifier from the beginning); only to the exact placetype
specified.
* `holonym_use_the`: Use `"the"` before holonyms of this placetype.
'''NOTE:'''
# The `link` property must be specified on all placetypes, except those ending in `!` (category-only placetypes), which
must have either `link` or `category_link` specified.
# Either the `class` or `former_type` property must be specified on all placetypes not ending in `!` that do not have a
fallback (if a placetype has a fallback and omits the `class` and `former_type` properties, they are taken from the
fallback). An internal error will result if a placetype has no `class` or `former_type` property derivable either
directly or through a fallback, if an attempt is made to categorize a former/ancient/historical/etc. entity of this
placetype.
# It is possible to have multiple levels of fallback (e.g. `frazione` falls back to `hamlet`, which falls back
to `village`). Fallback loops will cause an internal error. All placetypes specified as fallbacks must exist in
`placetype_data` or an internal error occurs.
]==]
export.placetype_data = {
--[=[
If you need to sort the following, do this (using Vim):
1. Make sure all full-line comments are within the { ... } table, or are moved after and on the same line as single-line
entries.
2. Make sure the table uses tabs everywhere for indent, and not spaces.
3. Mark the top of the table with `ma`, go to the bottom and execute the following two lines in sequence:
:'a,.s/\n/\\n/g
:s/\\n\(\t\[\)/\r\1/g
The first command converts every newline to a literal `\n` sequence, so the whole thing becomes a single line, while
the second command restores the newlines before the beginning of each entry. The effect is to convert all entries to
a single line while not losing any information. (Potentially a negative lookahead could be used to do it all in one
command.)
4. Execute the following to sort:
:'a,.!perl -pe 's/^(\t\[")(.*?)(".*)$/$2 @@@ $1$2$3/' | sort -f | perl -pe 's/.*? @@@ //'
Note that a simple `sort -f` (where `-f` means case-insensitive) would almost work, but it would sort "hill station"
before "hill" and "county borough" before "county" because the space after e.g. "hill station" sorts before the
quotation mark after e.g. "hill". The above command deals with this by extracting the key, prepending it followed by
` @@@ `, sorting, and then removing key (the classic decorate-sort-undecorate pattern).
5. Put the table back to multi-line format by marking the top of the table with `ma`, going to the bottom and executing
:'a,.s/\\n/\r/g
Note that for some reason, in order to get a match a newline in the left side of a replacement, you must use \n, but
to insert a newline in the right sode of a replacement you must use \r.
]=]
["*"] = {
link = false,
cat_handler = generic_place_cat_handler,
},
["administrative atoll"] = {
-- Maldives
link = "+w:administrative divisions of the Maldives",
preposition = "of",
class = "subpolity",
},
["administrative capital"] = {
link = "w",
fallback = "capital city",
},
["administrative center"] = {
link = "w",
fallback = "non-city capital",
},
["administrative centre"] = {
link = "w",
fallback = "administrative center",
},
["administrative county"] = {
link = "w",
fallback = "county",
},
["administrative district"] = {
link = "w",
fallback = "district",
},
["administrative headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["administrative region"] = {
link = true,
preposition = "of",
suffix = "region", -- but prefix is still "administrative region (of)"
fallback = "region",
class = "subpolity",
},
["administrative seat"] = {
link = "w",
fallback = "administrative centre",
},
["administrative territory"] = {
link = "separately",
preposition = "of",
suffix = "territory", -- but prefix is still "administrative territory (of)"
fallback = "territory",
class = "subpolity",
},
["administrative unit"] = {
-- Grrr, it's difficult to generalize about "administrative units". In Albania, "administrative unit" is an
-- official term for a city-level division of municipalities; Wikipedia renders it using the more practical term
-- "commune". In Pakistan, "administrative unit" is a collective term used to refer to all the different types
-- of first-level divisions (four provinces, one federal territory, and two "disputed territories", i.e. Azad
-- Kashmir and Gilgit-Balistan, that are variously described). For this reason, we set no fallback, but we need
-- to include this so that it can be used as a placetype for Albania, categorizing as communes.
link = "w",
class = "subpolity",
},
["administrative village"] = {
link = "w",
preposition = "of",
has_neighborhoods = true,
class = "settlement",
},
["aimag"] = {
-- used in Mongolia, Russia and China (Inner Mongolia); in Mongolia, equivalent to a province;
-- in China, equivalent to a prefecture (below a province); in Russia, equivalent to a municipal district.
link = "w",
fallback = "prefecture",
},
["airport"] = {
link = true,
class = "man-made structure",
default = {true},
},
["alliance"] = {
link = true,
fallback = "confederation",
},
["archipelago"] = {
link = true,
fallback = "island",
},
["area"] = {
link = true,
preposition = "of",
fallback = "geographic and cultural area",
-- Areas can either be administrative divisions (specifically of Kuwait) or geographic areas. Assume the former
-- when categorizing 'Areas' but the latter when handling e.g. 'historical area'.
class = "subpolity",
former_type = "geographic region",
cat_handler = district_neighborhood_cat_handler,
},
["arm"] = {
link = true,
preposition = "of",
class = "natural feature",
default = {"Seas"},
},
["arrondissement"] = {
link = true,
preposition = "of",
-- FIXME!!! Grrrrr!!! In some countries, arrondissements are divisions of cities; in others, they are divisions
-- of departments or provinces. Need to conditionalize on the country for both of the following.
class = "subpolity",
has_neighborhoods = true,
},
["associated province"] = {
link = "separately",
fallback = "province",
},
["atoll"] = {
-- FIXME! Atolls are administrative divisions of the Maldives but natural features elsewhere. Need to
-- conditionalize `class` on the country. See also `administrative atoll`.
link = true,
class = "natural feature",
bare_category_parent = "islands",
default = {true},
},
["autonomous city"] = {
link = "w",
preposition = "of",
fallback = "city",
has_neighborhoods = true,
},
["autonomous community"] = {
-- Spain; refers to regional entities, not village-like entities, as might be expected from "community"
link = true,
preposition = "of",
class = "subpolity",
},
["autonomous island"] = {
-- Comoros; seems like an administrative atoll of the Maldives.
link = "+w:autonomous islands of Comoros",
preposition = "of",
class = "subpolity",
},
["autonomous oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "oblast",
class = "subpolity",
},
["autonomous okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
no_affix_strings = "okrug",
class = "subpolity",
},
["autonomous prefecture"] = {
link = true,
fallback = "prefecture",
},
["autonomous province"] = {
link = "w",
fallback = "province",
},
["autonomous region"] = {
link = "w",
preposition = "of",
fallback = "administrative region",
-- "administrative region" sets an affix of "region" but we want to display as "Tibet Autonomous Region"
-- if the user writes 'ar:Suf/Tibet'.
affix = "autonomous region",
},
["autonomous republic"] = {
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territorial unit"] = {
-- Moldova; only two of them, one for Gagauzia and one for Transnistria.
link = "w",
preposition = "of",
class = "subpolity",
},
["autonomous territory"] = {
link = "w",
fallback = "dependent territory",
},
["bailiwick"] = {
-- Jersey, etc.
link = true,
fallback = "polity",
},
["barangay"] = {
-- Philippines
link = true,
class = "settlement",
-- Barangays are formal administrative divisions of a city rather than informal neighborhoods, but can use
-- some of the properties of a neighborhood.
fallback = "neighborhood",
},
["barrio"] = {
-- Spanish-speaking countries; Philippines
link = true,
-- FIXME: Not completely correct, in some countries barrios are formal administrative divisions of a city.
-- `class` will need to conditionalize on the country to be completely correct.
fallback = "neighborhood",
},
["basin"] = {
link = true,
fallback = "lake",
},
["bay"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["beach"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"water"},
default = {true},
},
["beach resort"] = {
link = "w",
fallback = "resort town",
},
["bishopric"] = {
link = true,
fallback = "polity",
},
["bodies of water!"] = {
-- FIXME: This is (maybe?) a type category not a name category. There should be an option for this. We need to
-- straighten out the type vs. name vs. related-to issue.
category_link = "[[body of water|bodies of water]]",
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems", "water"},
},
["borough"] = {
link = true,
preposition = "of",
display_handler = borough_display_handler,
has_neighborhoods = true,
-- "former borough" could be a former settlement or a former part of a city but seems more likely to
-- be a former subpolity, particularly in England. FIXME, we really need a handler to take care of this
-- properly.
class = "subpolity",
-- Grr, some boroughs are city-like but some (e.g. in Britain) may be larger.
},
["borough seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["branch"] = {
link = true,
preposition = "of",
fallback = "river",
},
["bridge"] = {
link = true,
class = "man-made structure",
default = {"Named bridges"},
},
["building"] = {
link = true,
class = "man-made structure",
default = {"Named buildings"},
},
["built-up area"] = {
link = "w",
fallback = "area",
},
["burgh"] = {
link = true,
fallback = "borough",
},
["business park"] = {
link = true,
fallback = "park",
},
["caliphate"] = {
link = true,
fallback = "polity",
},
["canton"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["cape"] = {
link = true,
fallback = "headland",
},
["capital"] = {
link = true,
fallback = "capital city",
},
["capital city"] = {
link = true,
category_link = "[[capital city|capital cities]]: the [[seat of government|seats of government]] for a country or [[political]] [[division]] of a country",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
bare_category_parent = "cities",
cat_handler = capital_city_cat_handler,
default = {true},
-- The following is necessary so that e.g. [[Melbourne]] defined as {{place|en|capital city|s/Victoria|c/Australia}}
-- gets categorized in the bare category [[Category:en:Melbourne]]; otherwise placetype 'capital city' wouldn't
-- match against the placetype 'city' of Melbourne.
fallback = "city",
},
["caplc"] = {
link = "[[capital]] and [[large]]st [[city]]",
plural_link = false,
fallback = "capital city",
},
["captaincy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["caravan city"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"ANCIENT", "FORMER"},
},
["castle"] = {
link = true,
fallback = "building",
},
["cathedral city"] = {
link = true,
fallback = "city",
},
["cattle station"] = {
-- Australia
link = true,
fallback = "farm",
},
["census area"] = {
link = true,
affix_type = "Suf",
has_neighborhoods = true,
class = "non-admin settlement",
},
["census-designated place"] = {
-- United States
link = true,
class = "non-admin settlement",
},
["census division"] = {
-- Canada
link = "w",
preposition = "of",
class = "subpolity",
},
["census town"] = {
link = "w",
fallback = "town",
},
["central business district"] = {
link = true,
fallback = "neighborhood",
},
["cercle"] = {
-- Mali
link = "+w:cercles of Mali",
preposition = "of",
class = "subpolity",
},
["ceremonial county"] = {
link = true,
fallback = "county",
},
["chain of islands"] = {
link = "[[chain]] of [[island]]s",
plural = "chains of islands",
plural_link = "[[chain]]s of [[island]]s",
fallback = "island",
},
["channel"] = {
link = true,
fallback = "strait",
},
["charter community"] = {
-- Northwest Territories, Canada
link = "w",
fallback = "village",
},
["city"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["city-state"] = {
link = true,
category_link = "[[sovereign]] [[microstate]]s consisting of a single [[city]] and [[w:dependent territory|dependent territories]]",
has_neighborhoods = true,
class = "settlement",
["continent/*"] = {"City-states", "Cities in +++", "Countries in +++", "National capitals"},
default = {"City-states", "Cities", "Countries", "National capitals"},
},
["civil parish"] = {
-- Mostly England; similar to municipalities
link = true,
preposition = "of",
affix_type = "suf",
has_neighborhoods = true,
class = "subpolity",
},
["claimed political division"] = {
link = "[[claim]]ed [[political]] [[division]]",
class = "subpolity",
default = {true},
},
["co-capital"] = {
link = "[[co-]][[capital]]",
fallback = "capital city",
},
["coal city"] = {
link = "+w:coal town",
fallback = "city",
},
["coal town"] = {
link = "w",
fallback = "town",
},
["collectivity"] = {
link = "w",
preposition = "of",
-- No default; these are weird one-off governmental divisions in France (esp. for overseas collectivities)
class = "subpolity",
},
["colony"] = {
link = true,
fallback = "dependent territory",
},
["comarca"] = {
-- per Wikipedia: traditional region or local administrative division found in Portugal, Spain, and some of
-- their former colonies, like Brazil, Nicaragua, and Panama. In the Valencian Community, for example, it
-- sits between municipalities and provinces, something like a county or district.
link = true,
preposition = "of",
class = "subpolity",
},
["commandery"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["commonwealth"] = {
link = true,
preposition = "of",
-- No default; applies specifically to Puerto Rico
class = "subpolity",
},
["commune"] = {
link = true,
fallback = "municipality",
},
["community"] = {
link = true,
category_link = "[[community|communities]] of all sizes",
fallback = "village",
},
["community development block"] = {
-- in India; appears to be similar to a rural municipality; groups several villages, unclear if there will be
-- neighborhoods so I'm not setting `has_neighborhoods` for now
link = "w",
affix_type = "suf",
no_affix_strings = "block",
class = "subpolity",
},
["comune"] = {
-- Italy, Switzerland
link = true,
fallback = "municipality",
},
["condominium"] = {
link = true,
fallback = "polity",
},
["confederacy"] = {
link = true,
fallback = "confederation",
},
["confederation"] = {
link = true,
fallback = "polity",
},
["constituency"] = {
-- currently we have them as political divisions of Namibia but many countries have them
link = true,
preposition = "of",
class = "subpolity",
},
["constituent country"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["constituent part"] = {
link = "separately",
preposition = "of",
class = "subpolity",
},
["constituent republic"] = {
-- Of Russia, Yugoslavia, etc.
link = "separately",
preposition = "of",
class = "subpolity",
},
["counties and county-level cities!"] = {
-- This is used when grouping counties and county-level cities under prefecture-level cities in China.
category_link = "[[county|counties]] and [[county-level city|county-level cities]]",
class = "subpolity",
},
["continent"] = {
link = true,
category_link = false, -- can't occur as a bare category
class = "natural feature",
default = {"Continents and continental regions"},
},
["continental region"] = {
link = "separately",
category_link = false, -- can't occur as a bare category
class = "geographic region",
fallback = "continent",
},
["continents and continental regions!"] = {
category_link = "[[continent]]s and [[continent]]-[[level]] [[region]]s (e.g. [[Polynesia]])",
class = "geographic region",
},
["council area"] = {
link = true,
-- in Scotland; similar to a county
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["country"] = {
link = true,
class = "polity",
["continent/*"] = {true, "Countries"},
default = {true},
},
["country-like entities!"] = {
category_link = "[[polity|polities]] not normally considered [[country|countries]] but treated similarly for categorization purposes; typically, [[unrecognized]] [[de-facto]] countries or [[w:dependent territory|dependent territories]]",
class = "polity",
},
["county"] = {
link = true,
preposition = "of",
display_handler = county_display_handler,
class = "subpolity",
},
["county borough"] = {
link = true,
-- in Wales; similar to a county
preposition = "of",
affix_type = "suf",
fallback = "borough",
class = "subpolity",
},
["county seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["county town"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
fallback = "town",
has_neighborhoods = true,
class = "capital",
},
["county-administered city"] = {
-- In Taiwan, per Wikipedia similar to a Taiwanese township or district, which is a small city.
-- NOT anything like a "county-level city" in PR China, which is a county masquerading as a city.
link = "w",
fallback = "city",
has_neighborhoods = true,
class = "settlement",
},
["county-controlled city"] = {
-- Taiwan
link = "w",
fallback = "county-administered city",
},
["county-level city"] = {
-- PR China
link = "w",
fallback = "prefecture-level city",
},
["crater lake"] = {
link = true,
fallback = "lake",
},
["creek"] = {
link = true,
fallback = "stream",
},
["Crown colony"] = {
link = "+crown colony",
fallback = "crown colony",
},
["crown colony"] = {
link = true,
fallback = "colony",
},
["Crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["cultural area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["cultural region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["delegation"] = {
-- Tunisia
link = "+w:delegations of Tunisia",
preposition = "of",
class = "subpolity",
},
["department"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["departmental capital"] = {
link = "separately",
fallback = "capital city",
},
["dependency"] = {
link = true,
fallback = "dependent territory",
},
["dependent territory"] = {
link = "w",
preposition = "of",
class = "subpolity",
former_type = "dependent territory",
bare_category_parent = "political divisions",
["country/*"] = {true},
default = {true},
},
["desert"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems"},
default = {true},
},
["deserted mediaeval village"] = {
link = "w",
fallback = "deserted medieval village",
},
["deserted medieval village"] = {
link = "w",
fallback = "ANCIENT settlement",
},
["direct-administered municipality"] = {
-- China
link = "+w:direct-administered municipalities of China",
fallback = "municipality",
},
["direct-controlled municipality"] = {
-- several countries
link = "w",
fallback = "municipality",
},
["distributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["district"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- Grrr! FIXME! Here is where we need handlers for `class`. Using similar logic to
-- district_neighborhood_cat_handler, we need to check if we're below or above a city to determine if the class
-- is "settlement" or "subpolity".
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
-- No default. Countries for which districts are political divisions will get entries.
},
["districts and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Portugal.
category_link = "[[district]]s and [[autonomous region]]s",
class = "subpolity",
},
["districts and autonomous territorial units!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Moldova.
category_link = "[[district]]s and [[w:autonomous territorial unit|autonomous territorial unit]]s",
class = "subpolity",
},
["district capital"] = {
link = "separately",
fallback = "capital city",
},
["district headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["district municipality"] = {
-- In Canada, a district municipality is equivalent to a rural municipality and won't have neighborhoods; in
-- South Africa, district municipalities group local municipalities and hence won't have neighborhoods.
link = "w",
preposition = "of",
affix_type = "suf",
no_affix_strings = {"district", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["division"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["division capital"] = {
link = "separately",
fallback = "capital city",
},
["dome"] = {
link = true,
fallback = "mountain",
},
["dormant volcano"] = {
link = true,
fallback = "volcano",
},
["duchy"] = {
link = true,
fallback = "polity",
},
["emirate"] = {
link = true,
preposition = "of",
-- FIXME: Can be subpolities (of the United Arab Emirates).
fallback = "polity",
},
["empire"] = {
link = true,
fallback = "polity",
},
["enclave"] = {
link = true,
preposition = "of",
-- Enclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["entity"] = {
-- Bosnia and Herzegovina
link = "+w:entities of Bosnia and Herzegovina",
preposition = "of",
class = "subpolity",
},
["escarpment"] = {
link = true,
fallback = "mountain",
},
["ethnographic region"] = {
-- used in Lithuania
link = "+w:ethnographic regions of Lithuania",
fallback = "geographic and cultural area",
},
["exclave"] = {
link = true,
preposition = "of",
-- exclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["external territory"] = {
link = "separately",
fallback = "dependent territory",
},
["farm"] = {
link = true,
class = "non-admin settlement",
default = {"Farms and ranches"},
},
["farms and ranches!"] = {
category_link = "[[farm]]s and [[ranch]]es",
class = "non-admin settlement",
},
["federal city"] = {
link = "w",
preposition = "of",
fallback = "city",
},
["federal district"] = {
link = true,
preposition = "of",
-- Might have neighborhoods as federal districts are often cities (e.g. Mexico City)
has_neighborhoods = true,
class = "settlement",
},
["federal subject"] = {
-- In Russia; a generic term for first-level administrative divisions (republics, oblasts, okrugs, krais,
-- autonomous okrugs and autonomous oblasts).
link = "w",
preposition = "of",
class = "subpolity",
},
["federal territory"] = {
link = "w",
fallback = "territory",
},
["fictional location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["First Nations reserve"] = {
-- Canada
link = "[[First Nations]] [[w:Indian reserve|reserve]]",
-- Wikipedia uses "Indian reserve"; presumably that is the legal term
fallback = "Indian reserve",
class = "subpolity",
},
["fjord"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["footpath"] = {
link = true,
fallback = "road",
},
["forest"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"ecosystems", "forestry"},
default = {true},
},
["fort"] = {
link = true,
fallback = "building",
},
["fortress"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- fortresses -> fortresse, so put an entry here to ensure we singularize correctly.
plural = "fortresses",
fallback = "building",
},
["frazione"] = {
link = "w",
fallback = "hamlet",
},
["freeway"] = {
link = true,
fallback = "road",
},
["French prefecture"] = {
link = "[[w:prefectures in France|prefecture]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
},
["geographic and cultural area"] = {
link = "+w:cultural area",
-- `generic_before_non_cities` is used when generating the category description of categories of the format
-- `Geographic and cultural areas of PLACE`. `preposition` is used when generating {{place}} description and
-- categories for any placetype that falls back to `geographic and cultural area`.
generic_before_non_cities = "of",
preposition = "of",
class = "geographic region",
bare_category_parent = "places",
["country/*"] = {true},
["constituent country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["geographic area"] = {
link = "+w:geographic region",
fallback = "geographic and cultural area",
},
["geographic region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geopolitical zone"] = {
-- Nigeria
link = true,
preposition = "of",
class = "subpolity",
},
["gewog"] = {
-- Bhutan
link = true,
preposition = "of",
class = "subpolity",
},
["ghost town"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
bare_category_parent = "former settlements",
cat_handler = city_type_cat_handler,
default = {true},
},
["glen"] = {
link = true,
fallback = "valley",
},
["governorate"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["greater administrative region"] = {
-- China (former division)
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["gromada"] = {
-- Poland (former division)
link = "w",
preposition = "of",
affix_type = "Pref",
class = "subpolity",
inherently_former = {"FORMER"},
},
["group of islands"] = {
link = "[[group]] of [[island]]s",
plural = "groups of islands",
plural_link = "[[group]]s of [[island]]s",
fallback = "island group",
},
["gulf"] = {
link = true,
preposition = "of",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["hamlet"] = {
link = true,
fallback = "village",
},
["harbor city"] = {
link = "separately",
fallback = "city",
},
["harbor town"] = {
link = "separately",
fallback = "town",
},
["harbour city"] = {
link = "separately",
fallback = "city",
},
["harbour town"] = {
link = "separately",
fallback = "town",
},
["headland"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["headquarters"] = {
link = "w",
fallback = "administrative centre",
},
["heath"] = {
link = true,
fallback = "moor",
},
["hemisphere"] = {
link = true,
entry_placetype_use_the = true,
fallback = "continental region",
},
["highway"] = {
link = true,
fallback = "road",
},
["hill"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["hill station"] = {
link = "w",
fallback = "town",
},
["hill town"] = {
link = "w",
fallback = "town",
},
["historic region"] = {
-- provided only for the link
link = "+w:historical region",
fallback = "FORMER geographic region",
},
["historical county"] = {
-- needed for historical counties of England/etc.
link = "+w:historic county",
fallback = "FORMER subpolity",
},
["historical region"] = {
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["home rule city"] = {
link = "w",
fallback = "city",
},
["home rule municipality"] = {
link = "w",
fallback = "municipality",
},
["hot spring"] = {
link = true,
fallback = "spring",
},
["house"] = {
link = true,
fallback = "building",
},
["housing estate"] = {
-- not the same as a housing project (i.e. public housing)
link = true,
-- not exactly the case but approximately
fallback = "neighborhood",
},
["hromada"] = {
-- Ukraine
link = "w",
disallow_in_entries = "Use placetype 'urban hromada', 'rural hromada' or 'settlement hromada' in place of bare 'hromada'",
disallow_in_holonyms = "Use placetype 'urban hromada'/'uhrom', 'rural hromada'/'rhrom' or 'settlement hromada'/'shrom' in place of bare 'hromada'",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["inactive volcano"] = {
link = "w",
fallback = "dormant volcano",
},
["independent city"] = {
link = true,
fallback = "city",
},
["independent town"] = {
link = "+independent city",
fallback = "town",
},
["Indian reservation"] = {
link = "w",
-- In the US. Also known as "Native American reservation" or "domestic dependent nation", and the reservations
-- themselves often use the term "nation" in their official name (e.g. the "Navajo Nation"). But Wikipedia puts
-- the article at [[w:Indian reservation]] and uses that term when describing e.g. what the Navajo Nation is,
-- so this must still be the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["Indian reserve"] = {
link = "w",
-- In Canada. "First Nations reserve" sounds more modern/PC but Wikipedia uses "Indian reserve"; presumably that
-- is still the legal term.
preposition = "of",
class = "subpolity",
default = {true},
},
["inland sea"] = {
-- note, we also have 'inland' as a qualifier
link = true,
fallback = "sea",
},
["inner city area"] = {
link = "[[inner city]] [[area]]",
fallback = "neighborhood",
},
["island"] = {
link = true,
preposition = "of",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["island country"] = {
-- FIXME: The following should map to both 'island' and 'country'.
link = "w",
fallback = "country",
},
["island group"] = {
link = "separately",
fallback = "island",
},
["island municipality"] = {
link = "w",
fallback = "municipality",
},
["islet"] = {
link = "w",
fallback = "island",
},
["Israeli settlement"] = {
link = "w",
class = "settlement",
default = {true},
},
["judicial capital"] = {
link = "w",
fallback = "capital city",
},
["khanate"] = {
link = true,
fallback = "polity",
},
["kibbutz"] = {
link = true,
plural = "kibbutzim",
class = "non-admin settlement",
default = {true},
},
["kingdom"] = {
link = true,
fallback = "monarchy",
},
["krai"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["lake"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["landforms!"] = {
category_link = "[[landform]]s",
bare_category_parent = "places",
addl_bare_category_parents = {"Earth"},
},
["largest city"] = {
link = "[[large]]st [[city]]",
entry_placetype_use_the = true,
fallback = "city",
has_neighborhoods = true,
},
["league"] = {
link = true,
fallback = "confederation",
},
["legislative capital"] = {
link = "separately",
fallback = "capital city",
},
["library"] = {
link = true,
fallback = "building",
},
["lieutenancy area"] = {
-- used in the United Kingdom; per Wikipedia:
-- In England, lieutenancy areas are colloquially known as the ceremonial counties, although this phrase does
-- not appear in any legislation referring to them. The lieutenancy areas of Scotland are subdivisions of
-- Scotland that are more or less based on the counties of Scotland, making use of the major cities as separate
-- entities.[2] In Wales, the lieutenancy areas are known as the preserved counties of Wales and are based on
-- those used for lieutenancy and local government between 1974 and 1996. The lieutenancy areas of Northern
-- Ireland correspond to the six counties and two former county boroughs.[3]
link = "w",
fallback = "ceremonial county",
},
["local authority district"] = {
link = "w",
fallback = "local government district",
},
["local government area"] = {
-- Australia
link = "w",
preposition = "of",
class = "subpolity",
},
["local council"] = {
-- Malta; similar to municipalities
link = "+w:local councils of Malta",
preposition = "of",
fallback = "municipality",
},
["local government district"] = {
link = "w",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local government district with borough status"] = {
link = "[[w:local government district|local government district]] with [[w:borough status|borough status]]",
plural = "local government districts with borough status",
plural_link = "[[w:local government district|local government districts]] with [[w:borough status|borough status]]",
preposition = "of",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local urban district"] = {
link = "w",
fallback = "unincorporated community",
},
["locality"] = {
link = "+w:locality (settlement)",
-- not necessarily true, but usually is the case
fallback = "village",
},
["London borough"] = {
link = "w",
preposition = "of",
affix_type = "pref",
affix = "borough",
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["macroregion"] = {
link = true,
fallback = "region",
},
["man-made structures!"] = {
category_link = "[[w:geographical feature#Engineered constructs|man-made structures]] such as [[airport]]s, [[university|universities]] and [[metro station]]s",
bare_category_parent = "places",
},
["manor"] = {
-- FIXME: or is this more like a farm?
link = true,
fallback = "building",
},
["marginal sea"] = {
link = true,
preposition = "of",
fallback = "sea",
},
["market city"] = {
link = "+market town",
fallback = "city",
},
["market town"] = {
link = true,
fallback = "town",
},
["massif"] = {
link = true,
fallback = "mountain",
},
["megacity"] = {
link = true,
fallback = "city",
},
["metro station"] = {
link = true,
class = "man-made structure",
},
["metropolitan borough"] = {
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"borough", "city"},
fallback = "local government district",
has_neighborhoods = true,
},
["metropolitan city"] = {
-- These exist e.g. in Italy and are more like municipalities or even provinces than cities.
link = true,
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"metropolitan", "city"},
class = "subpolity",
},
["metropolitan county"] = {
link = true,
fallback = "county",
},
["metropolitan municipality"] = {
-- In South Africa, metropolitan municipalities group local municipalities and are like districts, between
-- provinces and municipalities.
-- In Turkey, metropolitan municipalities are provinces-level.
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"metropolitan", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["microdistrict"] = {
-- residential complex in post-Soviet states
link = true,
fallback = "neighborhood",
},
["micronations!"] = {
-- FIXME, merge with microstate
category_link = "[[micronation]]s",
bare_category_parent = "countries",
},
["microstate"] = {
link = true,
fallback = "country",
},
["military base"] = {
link = "w",
class = "settlement", -- or "man-made structure"?
default = {true},
},
["minster town"] = {
-- England
link = "separately",
fallback = "town",
},
["monarchy"] = {
link = true,
fallback = "polity",
},
["moor"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "ecosystems"},
default = {true},
},
["moorland"] = {
link = true,
fallback = "moor",
},
["motorway"] = {
link = true,
fallback = "road",
},
["mountain"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["mountain indigenous district"] = {
-- Taiwan
link = "+w:district (Taiwan)",
fallback = "district",
},
["mountain indigenous township"] = {
-- Taiwan
link = "+w:township (Taiwan)",
fallback = "township",
},
["mountain pass"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "mountain passes",
class = "natural feature",
addl_bare_category_parents = {"mountains"},
default = {true},
},
["mountain range"] = {
link = true,
fallback = "mountain",
},
["mountainous region"] = {
link = "separately",
fallback = "region",
},
["mukim"] = {
-- Malaysia, Brunei, Indonesia, Singapore
link = true,
preposition = "of",
class = "subpolity",
},
["municipal district"] = {
link = "w",
-- meaning varies depending on the country; for now, assume no neighborhoods.
-- FIXME: has_neighborhoods might have to be a function that looks at the containing holonyms.
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "municipality",
},
["municipality"] = {
link = true,
preposition = "of",
has_neighborhoods = true,
class = "subpolity",
},
["municipality with city status"] = {
link = "[[municipality]] with [[w:city status|city status]]",
plural = "municipalities with city status",
plural_link = "[[municipality|municipalities]] with [[w:city status|city status]]",
fallback = "municipality",
},
["museum"] = {
link = true,
fallback = "building",
},
["mythological location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "places",
default = {true},
},
["named bridges!"] = {
category_link = "notable [[bridge]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"bridges"},
},
["named buildings!"] = {
category_link = "notable [[house]]s, [[library|libraries]] and other [[building]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"buildings"},
},
["named roads!"] = {
category_link = "notable [[road]]s, [[highway]]s, [[trail]]s and similar linear structures",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"roads"},
},
["national capital"] = {
link = "w",
fallback = "capital city",
},
["national park"] = {
link = true,
fallback = "park",
},
["natural features!"] = {
category_link = "[[w:geographical feature#Natural features|natural features]] such as [[lake]]s, [[mountain]]s, [[island]]s and [[ocean]]s",
bare_category_parent = "places",
},
["neighborhood"] = {
-- The majority of the properties here apply to both `neighborhoods` and `neighbourhoods`; the choice of which
-- one to use is made by district_neighborhood_cat_handler() based on the value of `british_spelling` for the
-- location (city, political division, etc.) of the holonym that follows the word "neighbo(u)hoods" in the
-- category name. It does *NOT* depend on whether the {{place}} call uses "neighborhoods" or "neighbourhoods".
-- (In general it can't, because other things like "urban areas", "districts", "subdivisions" and the like also
-- categorize as neighbo(u)rhoods.)
link = true,
-- See below. These are used by category handlers in [[Module:category tree/topic cat/data/Places]].
generic_before_non_cities = "in",
generic_before_cities = "of",
-- The following text is suitable for the top-level description of a neighborhood as well as categories of the
-- form `Neighborhoods in POLDIV` e.g. `Neighborhoods in Illinois, USA` but not for categories of the form
-- `Neighborhoods of Chicago`, where we'd get "... and other subportions of [[city|cities]] of [[Chicago]]".
category_link = "[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighborhood]]s, [[district]]s and other subportions",
-- NOTE: This setting is needed for administrative divisions like barangays that fall back to `neighborhood`,
-- when set in [[Module:place/locations]] for a specific country (e.g. the Philippines). The above settings
-- for `generic_before_non_cities` and `generic_before_cities` are used by category handlers in
-- [[Module:category tree/topic cat/data/Places]] for `Neighborhoods in POLDIV` and `Neighborhoods of CITY`
-- categories. In fact, district_neighborhood_cat_handler() does not currently pay attention to them, but
-- generates "of" before cities and "in" before non-cities regardless. (FIXME: We should change that.)
preposition = "of",
class = "non-admin settlement",
cat_handler = district_neighborhood_cat_handler,
},
["neighbourhood"] = {
link = true,
category_link = "[[neighbourhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighbourhood]]s, [[district]]s and other subportions",
fallback = "neighborhood",
},
["new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
preposition = "in",
class = "subpolity", --?
},
["new town"] = {
link = true,
fallback = "town",
},
["non-city capital"] = {
link = "[[capital]]",
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
cat_handler = function(data)
return capital_city_cat_handler(data, "non-city")
end,
-- FIXME, do we need the following?
default = {true},
},
["non-metropolitan county"] = {
link = "w",
fallback = "county",
},
["non-metropolitan district"] = {
link = "w",
fallback = "local government district",
},
["non-sovereign kingdom"] = {
-- especially in Africa and Asia
link = "+w:non-sovereign monarchy",
generic_before_non_cities = "in",
class = "subpolity",
["country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["non-sovereign monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["oblast"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["oblasts and autonomous republics!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Ukraine.
category_link = "[[oblast]]s and [[w:autonomous republic|autonomous republic]]s",
class = "subpolity",
},
["ocean"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"seas", "bodies of water"},
default = {true},
},
["okrug"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["overseas collectivity"] = {
link = "w",
fallback = "collectivity",
},
["overseas department"] = {
link = "w",
fallback = "department",
},
["overseas territory"] = {
link = "w",
fallback = "dependent territory",
},
["parish"] = {
link = true,
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["parish municipality"] = {
-- in Quebec, often similar to a rural village; the famous [[Saint-Louis-du-Ha! Ha!]] is one of them.
link = "+w:parish municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true,
},
["parish seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "of",
class = "capital",
has_neighborhoods = true,
},
["park"] = {
link = true,
class = "man-made structure",
default = {true},
},
["pass"] = {
link = "+mountain pass",
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "passes",
fallback = "mountain pass",
},
["path"] = {
link = true,
fallback = "road",
},
["peak"] = {
link = true,
fallback = "mountain",
},
["peninsula"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["periphery"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["places!"] = {
generic_before_non_cities = "in",
generic_before_cities = "in",
class = "generic place",
category_link = "[[place]]s of all sorts",
-- `category_link_top_level` control the description used in the top-level [[Category:Places]] and
-- language-specific variants such as [[Category:en:Places]]. The actual text for a language-spefic variant is
-- "{{{langname}}} names of [[geographical]] [[place]]s of all sorts; [[toponym]]s." where the "names of"
-- portion is automatically generated by the appropriate handler in
-- [[Module:category tree/topic cat/data/Places]].
category_link_top_level = "[[geographical]] [[place]]s of all sorts; [[toponym]]s",
bare_category_parent = "names",
},
["planned community"] = {
-- Include this so we don't categorize 'planned community' into villages, as 'community' does.
link = true,
class = "settlement",
has_neighborhoods = true,
},
["plateau"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
-- FIXME: Should generate both "Plateaus" and the appropriate 'geographic and cultural area' category
},
["Polish colony"] = {
link = "[[w:colony (Poland)|colony]]",
affix_type = "suf",
affix = "colony",
fallback = "village",
has_neighborhoods = true,
},
["political divisions!"] = {
category_link = "[[political]] [[division]]s and [[subdivision]]s, such as [[state]]s, [[province]]s, [[county|counties]] or [[district]]s",
bare_category_parent = "places",
},
["polity"] = {
link = true,
category_link = "[[independent]] or [[semi-]][[independent]] [[polity|polities]]",
class = "polity",
bare_category_parent = "places",
default = {true},
},
["populated place"] = {
link = "+w:populated place",
-- not necessarily true, but usually is the case
fallback = "village",
},
["port"] = {
link = true,
class = "man-made structure",
default = {true},
},
["port city"] = {
-- FIXME: should categorize into "Ports" as well as "Cities"
link = true,
fallback = "city",
},
["port town"] = {
-- FIXME: should categorize into "Ports" as well as "Towns"
link = "w",
fallback = "town",
},
["prefecture"] = {
-- FIXME! `prefecture` is like a county in Japan and elsewhere but a department capital city in France.
-- May need `has_neighborhoods` to be a function.
link = true,
preposition = "of",
display_handler = prefecture_display_handler,
class = "subpolity",
},
["prefecture-level city"] = {
-- China; they are huge entities with a central city; not cities themselves.
link = "w",
preposition = "of",
class = "subpolity",
},
["preserved county"] = {
-- In Wales; they are former counties enshrined in law; there are 8 of them and each consists of one or more
-- "principal areas" (styled as "counties" or "county boroughs"), of which there are 22.
link = "w",
preposition = "of",
class = "subpolity",
inherently_former = {"FORMER"},
},
["primary area"] = {
-- a grouping of "districts" (neighborhoods) in Gothenburg, Sweden
link = "+w:sv:primärområde",
fallback = "neighborhood",
},
["principality"] = {
link = true,
fallback = "monarchy",
},
["promontory"] = {
link = true,
fallback = "headland",
},
["protectorate"] = {
link = true,
fallback = "dependent territory",
},
["province"] = {
link = true,
preposition = "of",
display_handler = province_display_handler,
class = "subpolity",
},
["provinces and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case China.
category_link = "[[province]]s and [[autonomous region]]s",
class = "subpolity",
},
["provinces and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Canada and Pakistan.
category_link = "[[province]]s and [[territory|territories]]",
class = "subpolity",
},
["provincial capital"] = {
link = "separately",
fallback = "capital city",
},
["raion"] = {
link = true,
preposition = "of",
affix_type = "Suf",
class = "subpolity",
},
["ranch"] = {
link = true,
fallback = "farm",
},
["range"] = {
-- FIXME: Where is this used? Is it a mountain range?
link = true,
holonym_use_the = true,
class = "natural feature",
},
["regency"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["region"] = {
link = true,
preposition = "of",
-- If 'region' isn't a specific administrative division, fall back to 'geographic and cultural area'
fallback = "geographic and cultural area",
-- "former region" is a subpolity but traditional/historic(al)/ancient/medieval/etc. is a geographic region
class = "geographic region",
},
["regional capital"] = {
link = "separately",
fallback = "capital city",
},
["regional county municipality"] = {
-- Quebec
link = "w",
preposition = "of",
affix_type = "Suf",
no_affix_strings = {"municipality", "county"},
fallback = "municipality",
},
["regional district"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "district",
},
["regional municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
},
["regional unit"] = {
link = "w",
preposition = "of",
affix_type = "suf",
class = "subpolity",
},
["registration county"] = {
-- Used in Scotland for land registration purposes; formerly used in England, Wales and Ireland for statistical
-- purposes (registration of births, deaths and marriages, and for the output of census information).
link = "w",
fallback = "county",
},
["republic"] = {
-- Of Russia, Yugoslavia, etc. "Republics" in general are sovereign but we use "country" in that case.
link = true,
fallback = "constituent republic",
},
["research base"] = {
link = "+w:research station",
fallback = "research station",
},
["research station"] = {
link = "w",
class = "non-admin settlement", -- or "man-made structure"?
default = {true},
},
["reservoir"] = {
link = true,
fallback = "lake",
},
["residential area"] = {
link = "separately",
fallback = "neighborhood",
},
["resort city"] = {
link = "w",
fallback = "city",
},
["resort town"] = {
link = "w",
fallback = "town",
},
["river"] = {
link = true,
generic_before_non_cities = "in",
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
cat_handler = city_type_cat_handler,
["continent/*"] = {true},
default = {true},
},
["river island"] = {
link = "w",
fallback = "island",
},
["road"] = {
link = true,
class = "man-made structure",
default = {"Named roads"},
},
["Roman province"] = {
-- FIXME! Eliminate this in favor of 'former province|emp/Roman Empire'
link = "w",
default = {"Provinces of the Roman Empire"},
class = "subpolity",
},
["royal borough"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = {"royal", "borough"},
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["royal burgh"] = {
link = true,
fallback = "borough",
},
["royal capital"] = {
link = "w",
fallback = "capital city",
},
["rural committee"] = {
-- Hong Kong; a group of villages
link = "w",
affix_type = "Suf",
has_neighborhoods = true,
class = "settlement",
},
["rural community"] = {
-- New Brunswick
link = "+w:list of municipalities in New_Brunswick#Rural communities",
fallback = "municipality",
},
["rural hromada"] = {
link = "[[rural]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["rural municipality"] = {
link = "w",
preposition = "of",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
has_neighborhoods = true, --?
},
["rural township"] = {
-- Taiwan
link = "+w:rural township (Taiwan)",
fallback = "township",
},
["sanctuary"] = {
link = true,
fallback = "temple",
},
["satrapy"] = {
link = true,
preposition = "of",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["sea"] = {
link = true,
holonym_use_the = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["seaport"] = {
link = true,
fallback = "port",
},
["seat"] = {
link = true,
fallback = "administrative centre",
},
["self-administered area"] = {
-- Myanmar (groups self-administered divisions and zones)
link = "+w:self-administered zone",
preposition = "of",
class = "subpolity",
},
["self-administered division"] = {
-- Myanmar (only one of them: Wa Self-Administered Division)
link = "w",
fallback = "self-administered area",
},
["self-administered zone"] = {
-- Myanmar (five of them)
link = "w",
fallback = "self-administered area",
},
["separatist state"] = {
link = "separately",
fallback = "unrecognized country",
},
["settlement"] = {
link = true,
category_link = "[[settlement]]s such as [[city|cities]], [[village]]s and [[farm]]s",
bare_category_parent = "places",
-- not necessarily true, but usually is the case
fallback = "village",
},
["settlement hromada"] = {
link = "[[w:Populated places in Ukraine#Rural settlements|settlement]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["sheading"] = {
-- Isle of Man
link = true,
fallback = "district",
},
["sheep station"] = {
-- Australia
link = true,
fallback = "farm",
},
["shire"] = {
link = true,
fallback = "county",
},
["shire county"] = {
link = "w",
fallback = "county",
},
["shire town"] = {
link = true,
fallback = "county seat",
},
["ski resort city"] = {
link = "[[ski resort]] [[city]]",
fallback = "city",
},
["ski resort town"] = {
link = "[[ski resort]] [[town]]",
fallback = "town",
},
["spa city"] = {
link = "+w:spa town",
fallback = "city",
},
["spa town"] = {
link = "w",
fallback = "town",
},
["space station"] = {
link = true,
fallback = "research station",
},
["special administrative region"] = {
-- in China; in practice they are city-like (Hong Kong, Macau); also [[Oecusse]] in East Timor is formally a
-- "special administrative region"; North Korea had one such region planned (Sinuiju) but abandoned; Indonesia
-- has similar "special regions" of Jakarta, Yogyakarta and Aceh; and South Sudan has three "special
-- administrative areas"
link = "+w:special administrative regions of China",
preposition = "of",
class = "subpolity",
has_neighborhoods = true, --?
-- no suffix since places in Hong Kong or Macau are listed without China, except Hong Kong and Macau themselves
-- they also contain regions (or areas), e.g. [[Kowloon]], so it would be confusing
suffix = "",
},
["special collectivity"] = {
link = "w",
fallback = "collectivity",
},
["special municipality"] = {
-- formerly linked to the Taiwan article but there are also special municipalities of the Netherlands
link = "w",
fallback = "municipality",
},
["special ward"] = {
-- Tokyo
link = true,
fallback = "municipality",
},
["spit"] = {
link = true,
fallback = "peninsula",
},
["spring"] = {
link = true,
class = "natural feature",
default = {true},
},
["star"] = {
link = true,
class = "natural feature",
default = {true},
},
["state"] = {
link = true,
preposition = "of",
class = "subpolity",
-- 'former/historical state' could refer either to a state of a country (a division) or a state = sovereign
-- entity. The latter appears more common (e.g. in various "ancient states" of East Asia).
former_type = "polity",
},
["states and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Australia.
category_link = "[[state]]s and [[territory|territories]]",
class = "subpolity",
},
["states and union territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case India.
category_link = "[[state]]s and [[union territory|union territories]]",
class = "subpolity",
},
["state capital"] = {
link = true,
fallback = "capital city",
},
["state park"] = {
link = true,
fallback = "park",
},
["state-level new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
fallback = "new area",
},
["statistical region"] = {
-- Slovenia
link = true,
fallback = "administrative region",
},
["statutory city"] = {
link = "w",
fallback = "city",
},
["statutory town"] = {
link = "w",
fallback = "town",
},
["strait"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["stream"] = {
link = true,
fallback = "river",
},
["street"] = {
link = true,
fallback = "road",
},
["strip"] = {
link = true,
fallback = "geographic region",
},
["strip of land"] = {
link = "[[strip]] of [[land]]",
plural = "strips of land",
plural_link = "[[strip]]s of [[land]]",
fallback = "geographic region",
},
["sub-metropolitan city"] = {
link = "+w:List of cities in Nepal#Sub-metropolitan cities",
fallback = "city",
},
["sub-prefectural city"] = {
link = "w",
fallback = "subprovincial city",
},
["subdistrict"] = {
link = true,
preposition = "of",
has_neighborhoods = true, --?
-- FIXME: subdistricts can be neighborhood-like (of Jakarta) or larger (in China); need a handler
class = "subpolity",
default = {true},
},
["subdivision"] = {
link = true,
preposition = "of",
affix_type = "suf",
-- FIXME: subdivisions can be neighborhood-like or larger; need a handler
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
},
["submerged ghost town"] = {
-- FIXME: Consider just having "submerged" as a qualifier.
link = "[[submerged]] [[ghost town]]",
fallback = "ghost town",
},
["subnational kingdom"] = {
link = "+w:subnational monarchy",
fallback = "non-sovereign kingdom",
},
["subnational monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["subprefecture"] = {
link = true,
affix_type = "suf",
preposition = "of",
class = "subpolity",
},
["subprovince"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["subprovincial city"] = {
link = "w",
-- China; special status given to certain prefecture-level cities
fallback = "prefecture-level city",
},
["subprovincial district"] = {
link = "w",
-- China; special status given to Binhai New Area and Pudong New Area, which are county-level districts
preposition = "of",
class = "subpolity",
},
["subregion"] = {
link = true,
fallback = "geographic region",
},
["suburb"] = {
link = true,
-- The following text is suitable for the top-level description of a suburb as well as categories of the form
-- 'Suburbs in POLDIV' e.g. 'Suburbs in Illinois, USA' but not for categories of the form 'Suburbs of Chicago',
-- where we'd get "[[suburb]]s of [[city|cities]] of [[Chicago]]".
category_link = "[[suburb]]s of [[city|cities]]",
category_link_before_city = "[[suburb]]s",
-- See comments under "neighborhood" for the following three settings. They are used by
-- [[Module:category tree/topic cat/data/Places]] for generating the text of 'Suburbs in/of PLACE' categories
-- but currently ignored by district_neighborhood_cat_handler (which actually generates the categories for a
-- given page), which hardcodes "in" for non-cities and "of" for cities. (FIXME: Change this.)
generic_before_non_cities = "in",
generic_before_cities = "of",
preposition = "of",
has_neighborhoods = true, --?
class = "non-admin settlement", --?
cat_handler = district_neighborhood_cat_handler,
},
["suburban area"] = {
link = "w",
fallback = "suburb",
},
["subway station"] = {
link = "w",
fallback = "metro station",
},
["sum"] = {
-- In China, Mongolia, Russia; something like a county in Mongolia but a township in China (Inner Mongolia),
-- and equivalent to a [[selsoviet]] in the parts of Russia where it's in use (a rural council, below a raion).
link = "+w:sum (administrative division)",
-- This fallback is somewha arbitrary. We could use "county" but that has a display handler
-- which we don't want to be active (FIXME: If the display handler would be active, that's a bug).
fallback = "division",
},
["supercontinent"] = {
link = true,
fallback = "continent",
},
["tehsil"] = {
link = true,
affix_type = "suf",
no_affix_strings = {"tehsil", "tahsil"},
class = "subpolity",
},
["temple"] = {
link = true,
fallback = "building",
},
["territorial authority"] = {
link = "w",
fallback = "district",
},
["territory"] = {
link = true,
preposition = "of",
class = "subpolity",
},
["theme"] = {
link = "+w:theme (Byzantine district)",
preposition = "of",
class = "subpolity",
},
["town"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["town with bystatus"] = {
-- can't use templates in links currently
link = "[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]",
plural = "towns with bystatus",
plural_link = "[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]",
fallback = "town",
},
["township"] = {
link = true,
has_neighborhoods = true,
class = "settlement", --?
default = {true},
},
["township municipality"] = {
-- Quebec
link = "+w:township municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["traditional county"] = {
link = true,
fallback = "county",
},
["traditional region"] = {
-- FIXME: Verify this works. Same for 'historic(al) region'.
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["trail"] = {
link = true,
fallback = "road",
},
["treaty port"] = {
link = "w",
fallback = "city",
class = "settlement",
inherently_former = {"FORMER"},
},
["tributary"] = {
link = true,
preposition = "of",
fallback = "river",
},
["underground station"] = {
link = "w",
fallback = "metro station",
},
["unincorporated area"] = {
link = "w",
-- I don't know if this fallback makes sense everywhere.
fallback = "unincorporated community",
},
["unincorporated community"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
},
["unincorporated territory"] = {
link = "w",
fallback = "territory",
},
["union territory"] = {
-- India
link = true,
preposition = "of",
entry_placetype_indefinite_article = "a",
class = "subpolity",
},
["unitary authority"] = {
-- UK, New Zealand
link = true,
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["unitary district"] = {
link = "w",
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["united township municipality"] = {
-- Quebec
link = "+w:united township municipality (Quebec)",
entry_placetype_indefinite_article = "a",
fallback = "township municipality",
has_neighborhoods = true, --?
},
["university"] = {
link = true,
entry_placetype_indefinite_article = "a",
class = "man-made structure",
default = {true},
},
["unrecognised country"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized and nearly unrecognized countries!"] = {
category_link = "[[de facto]] [[independent]] [[state]]s with little or no {{w|international recognition}}",
bare_category_parent = "country-like entities",
},
["unrecognized country"] = {
link = "w",
class = "polity",
default = {"Unrecognized and nearly unrecognized countries"},
},
["unrecognised state"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized state"] = {
link = "w",
fallback = "unrecognized country",
},
["urban area"] = {
link = "separately",
fallback = "neighborhood",
},
["urban hromada"] = {
link = "[[urban]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["urban service area"] = {
-- A strange beast existing in Alberta; technically a type of hamlet but in practice used for much larger
-- cities and treated equivalent to a city. (There are only two of them, [[Fort McMurray]] and [[Sherwood Park]]).
link = "w",
fallback = "city",
},
["urban township"] = {
link = "w",
fallback = "township",
},
["urban-type settlement"] = {
-- appears to be a particular type of small urban settlement in post-Soviet states,
-- had an administrative function.
link = "w",
fallback = "town",
},
["valley"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "water"},
default = {true},
},
["viceroyalty"] = {
-- in essence, a type of colony
link = true,
fallback = "dependent territory",
},
["village"] = {
link = true,
generic_before_non_cities = "in",
category_link = "[[village]]s, [[hamlet]]s, and other small [[community|communities]] and [[settlement]]s",
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["village development committee"] = {
-- former administrative structure in Nepal; also exists in India but not as a formal unit
link = "+w:village development committee (Nepal)",
inherently_former = {"FORMER"},
fallback = "village",
},
["village municipality"] = {
-- Quebec
link = "+w:village municipality (Quebec)",
preposition = "of",
fallback = "municipality",
has_neighborhoods = true, --?
},
["voivodeship"] = {
-- Poland
link = true,
display_handler = voivodeship_display_handler,
preposition = "of",
class = "subpolity",
},
["volcano"] = {
link = true,
plural = "volcanoes",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true, "Mountains"},
},
["ward"] = {
link = true,
class = "settlement",
-- Wards are formal administrative divisions of a city but have some properties of neighborhoods.
fallback = "neighborhood",
},
["watercourse"] = {
link = true,
fallback = "channel",
},
["Welsh community"] = {
-- Wales
link = "[[w:community (Wales)|community]]",
preposition = "of",
affix_type = "suf",
affix = "community",
has_neighborhoods = true,
class = "settlement",
},
["zone"] = {
-- administrative division of Ethiopia, Qatar, Nepal, India
link = "+w:zone#Place names",
preposition = "of",
class = "subpolity",
},
----------------------------------------------------------------------------------------------
-- Categories for former places --
----------------------------------------------------------------------------------------------
["ANCIENT capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
-- FIXME: Consider removing 'ancient settlements' here. Ancient capitals, like former capitals, often still
-- exist but just aren't the capital any more. Maybe we should have an 'Ancient capitals' category.
default = {"Ancient settlements", "Former capitals"},
},
["ANCIENT non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "ANCIENT settlement",
},
["ANCIENT settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Ancient settlements"},
},
["ancient settlements!"] = {
category_link = "former [[city|cities]], [[town]]s and [[village]]s that existed in [[antiquity]]",
bare_category_parent = "former settlements",
},
["FORMER capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "of",
has_neighborhoods = true,
class = "capital",
default = {"Former capitals"},
},
["former capitals!"] = {
category_link = "former [[capital]] [[city|cities]] and [[town]]s",
bare_category_parent = "settlements",
},
["former counties and county-level cities!"] = {
-- For categorizing former counties and county-level cities of China
category_link = "no-longer existing [[county|counties]] and [[county-level city|county-level cities]]",
bare_category_breadcrumb = "counties and county-level cities",
bare_category_parent = "former political divisions",
},
["FORMER county"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER county-level city"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["former countries and country-like entities!"] = {
category_link = "[[country|countries]] and similar [[polity|polities]] that no longer exist",
bare_category_breadcrumb = "countries and country-like entities",
bare_category_parent = "former polities",
},
["FORMER country"] = {
link = false,
class = "polity",
default = {"Former countries and country-like entities"},
},
["former dependent territories!"] = {
category_link = "[[w:dependent territory|dependent territories]] (colonies, dependencies, protectorates, etc.) that no longer exist",
bare_category_breadcrumb = "dependent territories",
bare_category_parent = "former political divisions",
},
["FORMER dependent territory"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former dependent territories"},
},
["former districts!"] = {
-- For categorizing former districts of China
category_link = "no-longer-existing [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "former political divisions",
},
["FORMER district"] = {
-- For categorizing former districts of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER geographic region"] = {
link = false,
fallback = "geographic and cultural area",
},
["FORMER man-made structure"] = {
link = false,
class = "man-made structure",
default = {"Former man-made structures"},
},
["former man-made structures!"] = {
category_link = "man-made structures such as [[airport]]s and [[park]]s that no longer exist",
bare_category_breadcrumb = "man-made structures",
bare_category_parent = "former places",
},
["former municipalities!"] = {
-- For categorizing former municipalities of the Netherlands
category_link = "no-longer-existing [[municipality|municipalities]]",
bare_category_breadcrumb = "municipalities",
bare_category_parent = "former political divisions",
},
["FORMER municipality"] = {
-- For categorizing former municipalities of the Netherlands
link = false,
fallback = "FORMER subpolity",
},
["FORMER natural feature"] = {
link = false,
class = "natural feature",
default = {"Former natural features"},
},
["former natural features!"] = {
category_link = "natural features such as [[lake]]s, [[river]]s and [[island]]s that no longer exist",
bare_category_breadcrumb = "natural features",
bare_category_parent = "former places",
},
["FORMER non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "FORMER settlement",
},
["former places!"] = {
category_link = "[[place]]s of all sorts that no longer exist",
bare_category_breadcrumb = "former",
bare_category_parent = "places",
},
["former political divisions!"] = {
category_link = "[[political]] [[division]]s (states, provinces, counties, etc.) that no longer exist",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former places",
},
["former polities!"] = {
category_link = "[[polity|polities]] (countries, kingdoms, empires, etc.) that no longer exist",
bare_category_breadcrumb = "polities",
bare_category_parent = "former places",
},
["FORMER polity"] = {
link = false,
class = "polity",
default = {"Former polities"},
},
["former prefectures!"] = {
-- For categorizing former prefectures of China
category_link = "no-longer-existing [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "former political divisions",
},
["FORMER prefecture"] = {
-- For categorizing former prefectures of China
link = false,
fallback = "FORMER subpolity",
},
["former provinces!"] = {
-- For categorizing former provinces of China, etc.
category_link = "no-longer-existing [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "former political divisions",
},
["FORMER province"] = {
-- For categorizing ancient/historical/former provinces of the Roman Empire
link = false,
fallback = "FORMER subpolity",
},
["former region"] = {
-- A former region is considered a former political division, but not a 'historical/traditional/etc.' region.
link = "separately",
preposition = "of",
inherently_former = {"FORMER"},
class = "subpolity",
},
["FORMER settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Former settlements"},
},
["former settlements!"] = {
category_link = "[[city|cities]], [[town]]s and [[village]]s that no longer exist or have been merged or reclassified",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former political divisions",
},
["FORMER subpolity"] = {
link = false,
preposition = "of",
class = "subpolity",
default = {"Former political divisions"},
},
----------------------------------------------------------------------------------------------
-- form-of categories --
----------------------------------------------------------------------------------------------
---------- Abbreviations ----------
["abbreviations of counties!"] = {
-- For categorizing abbreviations of counties of e.g. England
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[county|counties]]",
bare_category_breadcrumb = "counties",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of places",
},
["abbreviations of departments!"] = {
-- For categorizing abbreviations of departments of e.g. France
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[department]]s",
bare_category_breadcrumb = "departments",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of districts!"] = {
-- For categorizing abbreviations of districts of e.g. ???
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of divisions!"] = {
-- For categorizing abbreviations of divisions of e.g. Bangladesh
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[division]]s",
bare_category_breadcrumb = "divisions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of former countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "abbreviations of former places",
},
["abbreviations of former places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "abbreviations of places", sort = "former"}},
},
["abbreviations of places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "places",
},
["abbreviations of political divisions!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[political]] [[division]]s",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "abbreviations of places",
},
["abbreviations of prefectures!"] = {
-- For categorizing abbreviations of prefectures of e.g. Japan
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces!"] = {
-- For categorizing abbreviations of provinces of e.g. Canada
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s and [[territory|territories]]",
bare_category_breadcrumb = "provinces and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of regions!"] = {
-- For categorizing abbreviations of regions of e.g. Italy
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[administrative region]]s",
bare_category_breadcrumb = "regions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states!"] = {
-- For categorizing abbreviations of states of e.g. the United States
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[territory|territories]]",
bare_category_breadcrumb = "states and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and union territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[union territory|union territories]]",
bare_category_breadcrumb = "states and union territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[territory|territories]]",
bare_category_breadcrumb = "territories",
bare_category_parent = "abbreviations of political divisions",
},
["ABBREVIATION_OF country"] = {
link = false,
default = {"Abbreviations of countries"},
},
["ABBREVIATION_OF county"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF department"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF district"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF division"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF FORMER country"] = {
link = false,
default = {"Abbreviations of former countries"},
},
["ABBREVIATION_OF FORMER place"] = {
link = false,
default = {"Abbreviations of former places"},
},
["ABBREVIATION_OF place"] = {
link = false,
default = {"Abbreviations of places"},
},
["ABBREVIATION_OF prefecture"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF province"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF region"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF state"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF subpolity"] = {
link = false,
default = {"Abbreviations of political divisions"},
},
["ABBREVIATION_OF territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF union territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
---------- Archaic forms ----------
["archaic forms of places!"] = {
full_category_link = "{{glossary|archaic}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "archaic forms",
bare_category_parent = "places",
},
["ARCHAIC_FORM_OF place"] = {
link = false,
default = {"Archaic forms of places"},
},
---------- Clippings ----------
["clippings of places!"] = {
full_category_link = "{{glossary|clipping}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "clippings",
bare_category_parent = "places",
},
["CLIPPING_OF place"] = {
link = false,
default = {"Clippings of places"},
},
---------- Dated forms ----------
["dated forms of places!"] = {
full_category_link = "{{glossary|dated}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "dated forms",
bare_category_parent = "places",
},
["DATED_FORM_OF place"] = {
link = false,
default = {"Dated forms of places"},
},
---------- Derogatory names ----------
["derogatory names for cities!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[city|cities]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["derogatory names for continents!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for continents"},
},
["derogatory names for countries!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for countries"},
},
["derogatory names for places!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[place]]s",
bare_category_breadcrumb = "derogatory names",
bare_category_parent = "nicknames for places",
},
["derogatory names for states!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for states"},
},
["DEROGATORY_NAME_FOR capital"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR city"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR continent"] = {
link = false,
default = {"Derogatory names for continents"},
},
["DEROGATORY_NAME_FOR country"] = {
link = false,
default = {"Derogatory names for countries"},
},
["DEROGATORY_NAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR place"] = {
link = false,
default = {"Derogatory names for places"},
},
["DEROGATORY_NAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR state"] = {
link = false,
default = {"Derogatory names for states"},
},
["DEROGATORY_NAME_FOR town"] = {
link = false,
default = {"Derogatory names for cities"},
},
---------- Ellipses ----------
["ellipses of places!"] = {
full_category_link = "{{glossary|ellipsis|ellipses}} of [[name]]s of [[place]]s",
bare_category_breadcrumb = "ellipses",
bare_category_parent = "places",
},
["ELLIPSIS_OF place"] = {
link = false,
default = {"Ellipses of places"},
},
---------- Former long-form names ----------
["former long-form names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former long-form names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "long-form"}},
},
["former long-form names of places!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form",
bare_category_parent = "former names of places",
},
["FORMER_LONG_FORM_OF country"] = {
link = false,
default = {"Former long-form names of countries"},
},
["FORMER_LONG_FORM_OF place"] = {
link = false,
default = {"Former long-form names of places"},
},
---------- Former names ----------
["former names of capitals!"] = {
full_category_link = "[[former]] [[name]]s of [[capital city|capital cities]] that generally still exist but under a different name",
bare_category_breadcrumb = "capitals",
bare_category_parent = "former names of settlements",
},
["former names of countries!"] = {
full_category_link = "[[former]] [[name]]s of [[country|countries]] that generally still exist but under a different name",
bare_category_breadcrumb = "countries",
bare_category_parent = "former names of places",
},
["former names of places!"] = {
full_category_link = "[[former]] [[name]]s of [[place]]s that generally still exist but under a different name",
bare_category_breadcrumb = "former names",
bare_category_parent = "places",
},
["former names of political divisions!"] = {
full_category_link = "[[former]] [[name]]s of [[political]] [[division]]s (states, provinces, counties, etc.) that generally still exist but under a different name",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former names of places",
},
["former names of polities!"] = {
full_category_link = "[[former]] [[name]]s of [[polity|polities]] (e.g. [[country|countries]]) that generally still exist but under a different name",
bare_category_breadcrumb = "polities",
bare_category_parent = "former names of places",
},
["former names of settlements!"] = {
full_category_link = "[[former]] [[name]]s of [[city|cities]], [[town]]s, [[village]]s, etc. that generally still exist but under a different name",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former names of political divisions",
},
["FORMER_NAME_OF capital"] = {
link = false,
default = {"Former names of capitals"},
},
["FORMER_NAME_OF country"] = {
link = false,
default = {"Former names of countries"},
},
["FORMER_NAME_OF place"] = {
link = false,
default = {"Former names of places"},
},
["FORMER_NAME_OF polity"] = {
link = false,
default = {"Former names of polities"},
},
["FORMER_NAME_OF region"] = {
link = false,
fallback = "FORMER_NAME_OF subpolity",
},
["FORMER_NAME_OF settlement"] = {
link = false,
default = {"Former names of settlements"},
},
["FORMER_NAME_OF subpolity"] = {
link = false,
default = {"Former names of political divisions"},
},
---------- Former nicknames ----------
["former nicknames for cities!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[city|cities]], e.g. the [[Eternal City]] for [[Kyoto]] during the {{w|Heian period}} ({{circa2|800–1100|short=yes}} {{AD}})",
bare_category_breadcrumb = "cities",
bare_category_parent = "former nicknames for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["former nicknames for places!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "former",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {{name = "former names of places", sort = "nicknames"}},
},
["FORMER_NICKNAME_FOR capital"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR city"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR place"] = {
link = false,
default = {"Former nicknames for places"},
},
["FORMER_NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR town"] = {
link = false,
default = {"Former nicknames for cities"},
},
---------- Former official names ----------
["former official names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "former official names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "official"}},
},
["former official names of places!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "former names of places",
},
["FORMER_OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Former official names of countries"},
},
["FORMER_OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Former official names of places"},
},
---------- Long-form names ----------
["long-form names of countries!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "long-form names of places",
},
["long-form names of places!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form names",
bare_category_parent = "places",
},
["LONG_FORM_OF country"] = {
link = false,
default = {"Long-form names of countries"},
},
["LONG_FORM_OF place"] = {
link = false,
default = {"Long-form names of places"},
},
---------- Nicknames ----------
["nicknames for cities!"] = {
full_category_link = "[[nickname]]s for [[city|cities]], e.g. the [[Big Apple]] for [[New York City]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"cities"},
},
["nicknames for continents!"] = {
full_category_link = "[[nickname]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"continents"},
},
["nicknames for countries!"] = {
full_category_link = "[[nickname]]s for [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"countries"},
},
["nicknames for places!"] = {
full_category_link = "[[nickname]]s for [[place]]s",
bare_category_breadcrumb = "places",
bare_category_parent = "nicknames",
addl_bare_category_parents = {"places"},
},
["nicknames for states!"] = {
-- For categorizing nicknames for states of e.g. the United States
full_category_link = "[[nicknames]] for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"states"},
},
["NICKNAME_FOR capital"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR city"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR continent"] = {
link = false,
default = {"Nicknames for continents"},
},
["NICKNAME_FOR country"] = {
link = false,
default = {"Nicknames for countries"},
},
["NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR place"] = {
link = false,
default = {"Nicknames for places"},
},
["NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "city" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR state"] = {
link = false,
default = {"Nicknames for states"},
},
["NICKNAME_FOR town"] = {
link = false,
default = {"Nicknames for cities"},
},
---------- Obsolete forms ----------
["obsolete forms of places!"] = {
full_category_link = "{{glossary|obsolete}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "obsolete forms",
bare_category_parent = "places",
},
["OBSOLETE_FORM_OF place"] = {
link = false,
default = {"Obsolete forms of places"},
},
---------- Official names ----------
["official names of countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of places",
},
["official names of former countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "countries",
bare_category_parent = "official names of former places",
},
["official names of former places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "official names",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "official names of places", sort = "former"}},
},
["official names of places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official names",
bare_category_parent = "places",
},
["OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Official names of countries"},
},
["OFFICIAL_NAME_OF FORMER country"] = {
link = false,
default = {"Official names of former countries"},
},
["OFFICIAL_NAME_OF FORMER place"] = {
link = false,
default = {"Official names of former places"},
},
["OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Official names of places"},
},
---------- Official nicknames ----------
["official nicknames for places!"] = {
full_category_link = "[[official]] [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for places",
},
["official nicknames for states!"] = {
-- For categorizing official nicknames for states of e.g. the United States
full_category_link = "[[official]] [[nicknames]] for [[state]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for states",
addl_bare_category_parents = {"states"},
},
["OFFICIAL_NICKNAME_FOR place"] = {
link = false,
default = {"Official nicknames for places"},
},
["OFFICIAL_NICKNAME_FOR state"] = {
link = false,
default = {"Official nicknames for states"},
},
}
export.plural_placetype_to_singular = {}
for sg_placetype, spec in pairs(export.placetype_data) do
if spec.plural then
export.plural_placetype_to_singular[spec.plural] = sg_placetype
end
end
------------------------------------------------------------------------------------------
-- ZH: Chinese localization functions --
------------------------------------------------------------------------------------------
--[==[
Get the Chinese display name for a placetype, resolving through the enwikt fallback chain.
`holonym_placetype` (optional string) provides context for placetypes like `capital city`
whose Chinese term depends on the containing administrative level (country → 首都,
province → 省會, state → 首府, etc.).
Returns two values: zh_name (string or array of regional variants), zh_suffix (string,
array, or nil). Returns nil, nil if no Chinese data is available for the placetype or
any of its fallbacks.
]==]
function export.get_zh_placetype_name(placetype, holonym_placetype)
placetype = export.resolve_placetype_aliases(placetype)
local zh_name, zh_suffix, zh_by_holonym = m_zh_data.get_zh_placetype_props(placetype, export)
if zh_name then
local resolved = m_zh_data.resolve_zh_name(zh_name, zh_by_holonym, holonym_placetype)
return resolved, zh_suffix
end
return nil, nil
end
--[==[
Get only the Chinese suffix for a placetype.
Used when rendering holonym `:pref`/`:suf` modifiers in Chinese: the suffix is appended
directly to the holonym name (e.g. `s:suf/New York` → 紐約州; `c:pref/Georgia` → 格魯吉亞國).
Returns a string, an array of regional variants, or nil if no suffix is defined.
]==]
function export.get_zh_placetype_suffix(placetype)
placetype = export.resolve_placetype_aliases(placetype)
local _, zh_suffix = m_zh_data.get_zh_placetype_props(placetype, export)
return zh_suffix
end
--[==[
Chinese placetype "pluralization" — a no-op, since Chinese has no grammatical plural.
Accepts and returns a string or an array (for multi-variant names) unchanged.
Provided so that call sites shared with the English path can call a uniform function.
]==]
function export.pluralize_zh_placetype(zh_name)
return zh_name
end
--[==[
Get the entry preposition for Chinese display: "in" or "of".
Identical to `get_placetype_entry_preposition` in semantics; the Chinese rendering
maps these to different constructions:
"in" → 位於 [holonyms] 的 [placetype]
"of" → [holonyms] 的 [placetype] (no 位於 prefix)
]==]
export.get_zh_entry_preposition = export.get_placetype_entry_preposition
-- Re-export Chinese data tables so that [[Module:place]] only needs to require
-- this module rather than both this module and [[Module:place/zh-data]] separately.
export.zh_strings = m_zh_data.zh_strings
export.zh_qualifiers = m_zh_data.zh_qualifiers
export.zh_extra_info_labels = m_zh_data.zh_extra_info_labels
export.zh_capital_label_by_holonym_type = m_zh_data.zh_capital_label_by_holonym_type
export.format_zh_name = m_zh_data.format_zh_name
return export
85tlo9kvgiprgpqrodot3c33e49rbjk
薤白
0
3437751
9758139
2026-05-13T02:02:22Z
P1ayer
5118
新詞條
9758139
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xièbái
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 百合科植物{{w|小根蒜}}({{taxlink|Allium macrostemon|species}})、{{w|蕗蕎}}({{taxlink|Allium chinense|species}})的乾燥鱗莖,作為[[藥材]]
8jh2v3s87oioebtlgzua3uiki0x9ihu
Module:Zh/data/dial-syn/走親戚
828
3437752
9758141
2026-05-13T03:13:38Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「local export = {} export.list = { ["title"] = "", ["meaning"] = "親戚間互訪", ["note"] = "", ["Classical"] = { "" }, ["Formal"] = { "走親戚", "串親戚" }, ["Taxonomic"] = { "" }, ["Beijing"] = { "" }, ["Beijing-PG"] = { "" }, ["Beijing-MY"] = { "" }, ["Beijing-HR"] = { "" }, ["Beijing-YQ"] = { "" }, ["Beijing-CP"] = { "" }, ["Beijing-MTG"] = { "" }, ["Beijing-FS"] = {…」的新頁面
9758141
Scribunto
text/plain
local export = {}
export.list = {
["title"] = "",
["meaning"] = "親戚間互訪",
["note"] = "",
["Classical"] = { "" },
["Formal"] = { "走親戚", "串親戚" },
["Taxonomic"] = { "" },
["Beijing"] = { "" },
["Beijing-PG"] = { "" },
["Beijing-MY"] = { "" },
["Beijing-HR"] = { "" },
["Beijing-YQ"] = { "" },
["Beijing-CP"] = { "" },
["Beijing-MTG"] = { "" },
["Beijing-FS"] = { "" },
["Taiwan"] = { "" },
["Tianjin-WQ"] = { "" },
["Langfang"] = { "" },
["Chengde"] = { "" },
["Ulan Hot"] = { "" },
["Tongliao"] = { "" },
["Chifeng"] = { "" },
["Hailar"] = { "" },
["Heihe"] = { "" },
["Nenjiang"] = { "" },
["Mohe"] = { "" },
["Qiqihar"] = { "" },
["Tailai"] = { "" },
["Jixian-HLJ"] = { "" },
["Lanxi-M"] = { "" },
["Boli"] = { "" },
["Jiayin"] = { "" },
["Muling"] = { "" },
["Dongning"] = { "" },
["Ning'an"] = { "" },
["Linkou"] = { "" },
["Zhaozhou"] = { "" },
["Zhaodong"] = { "" },
["Jixi-M"] = { "" },
["Mishan"] = { "" },
["Harbin"] = { "走親戚" },
["Shangzhi"] = { "" },
["Yingchengzi"] = { "" },
["Jiamusi"] = { "" },
["Tongjiang-M"] = { "" },
["Baicheng"] = { "" },
["Da'an"] = { "" },
["Songyuan"] = { "" },
["Changchun"] = { "" },
["Yushu"] = { "" },
["Jilin"] = { "" },
["Siping"] = { "" },
["Liaoyuan"] = { "" },
["Dunhua"] = { "" },
["Hunchun"] = { "" },
["Baishan"] = { "" },
["Tonghua"] = { "" },
["Shenyang"] = { "" },
["Anshan"] = { "" },
["Tieling"] = { "" },
["Jinzhou"] = { "" },
["Jingzhou-SS"] = { "" },
["Malaysia-M"] = { "" },
["Singapore-M"] = { "" },
["Taz"] = { "" },
["Tianjin"] = { "" },
["Tianjin-JZ"] = { "" },
["Tianjin-BD"] = { "" },
["Tianjin-NH"] = { "" },
["Tianjin-HG"] = { "" },
["Tianjin-TG"] = { "" },
["Tianjin-DG"] = { "" },
["Tianjin-JN"] = { "" },
["Tianjin-DL"] = { "" },
["Tianjin-JH"] = { "" },
["Tianjin-XQ"] = { "" },
["Tianjin-BC"] = { "" },
["Tangshan"] = { "" },
["Qinhuangdao"] = { "" },
["Cangzhou"] = { "" },
["Xianxian"] = { "" },
["Xianxian-XY"] = { "" },
["Baoding"] = { "" },
["Dingxing"] = { "" },
["Xiong'an"] = { "" },
["Shijiazhuang"] = { "" },
["Xingtai"] = { "" },
["Hengshui"] = { "" },
["Lijin"] = { "" },
["Binzhou"] = { "" },
["Wudi"] = { "" },
["Weicheng"] = { "" },
["Fangzi"] = { "" },
["Changle-WF"] = { "" },
["Shouguang"] = { "" },
["Rizhao"] = { "" },
["Wulian"] = { "" },
["Jinan"] = { "走親親", "走親戚" },
["Zhangqiu"] = { "" },
["Liaocheng"] = { "" },
["Dezhou"] = { "" },
["Tai'an"] = { "" },
["Xintai"] = { "" },
["Zibo"] = { "" },
["Zichuan"] = { "" },
["Boshan"] = { "" },
["Yinan"] = { "" },
["Dalian"] = { "" },
["Dandong"] = { "" },
["Yantai"] = { "" },
["Muping"] = { "" },
["Laizhou"] = { "" },
["Weihai"] = { "" },
["Rongcheng"] = { "" },
["Qingdao"] = { "" },
["Chengyang"] = { "" },
["Jimo"] = { "" },
["Laixi"] = { "" },
["Pingdu"] = { "" },
["Jiaozhou"] = { "" },
["Jiaonan"] = { "" },
["Hanting"] = { "" },
["Changyi"] = { "" },
["Gaomi"] = { "" },
["Zhucheng"] = { "" },
["Anqiu"] = { "" },
["Linqu"] = { "" },
["Qingzhou"] = { "" },
["Yishui"] = { "" },
["Hulin-XL"] = { "" },
["Linjiang"] = { "" },
["Ji'an-M"] = { "" },
["Luoyang"] = { "串親戚" },
["Luoning"] = { "" },
["Sanmenxia"] = { "" },
["Lingbao"] = { "" },
["Luohe"] = { "" },
["Zhumadian"] = { "" },
["Biyang"] = { "" },
["Zhoukou"] = { "" },
["Dancheng"] = { "" },
["Xuchang"] = { "" },
["Changge"] = { "" },
["Pingdingshan"] = { "" },
["Lushan-M"] = { "" },
["Nanyang"] = { "" },
["Xixia"] = { "" },
["Dengzhou"] = { "" },
["Zaozhuang"] = { "" },
["Ningyang"] = { "" },
["Jining-M"] = { "" },
["Linyi"] = { "" },
["Heze"] = { "" },
["Daming"] = { "" },
["Yuncheng"] = { "" },
["Wenxi"] = { "" },
["Longxing"] = { "" },
["Yongji"] = { "" },
["Wanrong"] = { "走親親" },
["Ronghe"] = { "" },
["Linfen"] = { "" },
["Jixian"] = { "" },
["Huozhou"] = { "" },
["Hongtong"] = { "" },
["Shangqiu"] = { "" },
["Yongcheng"] = { "" },
["Yuanyang"] = { "" },
["Zhengzhou"] = { "" },
["Kaifeng"] = { "" },
["Lankao"] = { "" },
["Changyuan"] = { "" },
["Xunxian"] = { "" },
["Puyang"] = { "" },
["Fanxian"] = { "" },
["Xinyang"] = { "" },
["Gushi"] = { "" },
["Shangluo"] = { "" },
["Luonan"] = { "" },
["Danfeng"] = { "" },
["Shangnan"] = { "" },
["Shanyang"] = { "" },
["Zhen'an"] = { "" },
["Hanbin"] = { "" },
["Hanbin-XH"] = { "" },
["Baihe"] = { "" },
["Baihe-MP"] = { "" },
["Pingli"] = { "" },
["Xunyang"] = { "" },
["Lueyang"] = { "" },
["Mianxian"] = { "" },
["Yangxian"] = { "" },
["Xi'an"] = { "走親親", "走親戚" },
["Weiyang"] = { "" },
["Baqiao"] = { "" },
["Yanliang"] = { "" },
["Lintong"] = { "" },
["Chang'an"] = { "" },
["Huyi"] = { "" },
["Gaoling"] = { "" },
["Zhouzhi"] = { "" },
["Lantian"] = { "" },
["Xianyang"] = { "" },
["Xingping"] = { "" },
["Wugong"] = { "" },
["Qianxian"] = { "" },
["Liquan"] = { "" },
["Jingyang"] = { "" },
["Sanyuan-M"] = { "" },
["Yongshou"] = { "" },
["Changwu"] = { "" },
["Tongchuan"] = { "" },
["Yaozhou"] = { "" },
["Yijun"] = { "" },
["Weinan"] = { "" },
["Weinan-HZ"] = { "" },
["Hancheng"] = { "" },
["Huayin"] = { "" },
["Tongguan"] = { "" },
["Dali-SX"] = { "" },
["Heyang"] = { "" },
["Chengcheng"] = { "" },
["Baishui"] = { "" },
["Pucheng-M"] = { "" },
["Fuping"] = { "" },
["Huanglong"] = { "" },
["Yichuan"] = { "" },
["Huangling"] = { "" },
["Luochuan"] = { "" },
["Fuxian"] = { "" },
["Dingbian"] = { "" },
["Baoji"] = { "" },
["Baoji-CC"] = { "" },
["Fengxiang"] = { "" },
["Qishan"] = { "" },
["Fufeng"] = { "" },
["Meixian-M"] = { "" },
["Taibai"] = { "" },
["Fengxian-SX"] = { "" },
["Qianyang"] = { "" },
["Longxian"] = { "" },
["Linyou"] = { "" },
["Tongxin"] = { "" },
["Yanchi"] = { "" },
["Guyuan"] = { "" },
["Xiji"] = { "" },
["Longde"] = { "" },
["Jingyuan"] = { "" },
["Tianshui"] = { "" },
["Hezuo"] = { "" },
["Xining"] = { "走親戚" },
["Menyuan"] = { "" },
["Yanqi"] = { "" },
["Xuzhou"] = { "走親親", "走親戚" },
["Xuzhou-JW"] = { "" },
["Pizhou"] = { "" },
["Suining"] = { "" },
["Peixian"] = { "" },
["Xinyi-M"] = { "" },
["Fengxian-M"] = { "" },
["Suqian"] = { "" },
["Ganyu"] = { "" },
["Donghai"] = { "" },
["Fuyang"] = { "" },
["Bengbu"] = { "" },
["Suzhou-M"] = { "" },
["Huaibei"] = { "" },
["Bozhou"] = { "" },
["Guangde-QC"] = { "" },
["Qimen-AL-Jun"] = { "" },
["Anji-HN"] = { "" },
["Gansu-DG"] = { "" },
["Shaanxi-DG"] = { "" },
["Yinchuan"] = { "走親親", "藏親親" },
["Najiahu"] = { "" },
["Wuzhong"] = { "" },
["Zhongwei"] = { "" },
["Bayanhot"] = { "" },
["Lanzhou"] = { "" },
["Jiuquan"] = { "" },
["Dunhuang"] = { "" },
["Shandan"] = { "" },
["Wuwei-GS"] = { "" },
["Wuwei-GS-ZY"] = { "" },
["Tianzhu"] = { "" },
["Hami"] = { "" },
["Changji"] = { "" },
["Ürümqi"] = { "走親戚", "逛親戚" },
["Dabancheng-XG"] = { "" },
["Midong-CSZ"] = { "" },
["Ürümqi-BFG"] = { "" },
["Jimsar"] = { "" },
["Chengdu"] = { "走親戚", "走人戶" },
["Xindu"] = { "" },
["Xindu-XF"] = { "" },
["Huayang"] = { "" },
["Pidu"] = { "" },
["Wenjiang"] = { "" },
["Shuangliu"] = { "" },
["Xinjin"] = { "" },
["Jintang"] = { "" },
["Pengzhou"] = { "" },
["Dujiangyan"] = { "" },
["Chongzhou"] = { "" },
["Dayi"] = { "" },
["Pujiang-M"] = { "" },
["Qionglai"] = { "" },
["Jianyang-M"] = { "" },
["Xiaojin"] = { "" },
["Jinchuan"] = { "" },
["Songpan"] = { "" },
["Maoxian"] = { "" },
["Lixian"] = { "" },
["Wenchuan"] = { "" },
["Deyang"] = { "" },
["Luojiang"] = { "" },
["Mianzhu"] = { "" },
["Shifang"] = { "" },
["Guanghan"] = { "" },
["Zhongjiang"] = { "" },
["Ziyang-SC"] = { "" },
["Anyue"] = { "" },
["Lezhi"] = { "" },
["Mianyang"] = { "" },
["Anzhou"] = { "" },
["Zitong"] = { "" },
["Jiangyou"] = { "" },
["Jiangyou-ZM"] = { "" },
["Pingwu"] = { "" },
["Beichuan"] = { "" },
["Yanting"] = { "" },
["Santai"] = { "" },
["Guangyuan"] = { "" },
["Zhaohua"] = { "" },
["Cangxi"] = { "" },
["Jiange"] = { "" },
["Meishan"] = { "" },
["Pengshan"] = { "" },
["Danling"] = { "" },
["Hongya"] = { "" },
["Qingshen"] = { "" },
["Renshou"] = { "" },
["Luzhou"] = { "" },
["Naxi"] = { "" },
["Luxian"] = { "" },
["Xuyong"] = { "" },
["Gulin"] = { "" },
["Hejiang"] = { "" },
["Yibin"] = { "" },
["Nanxi"] = { "" },
["Pingshan-M"] = { "" },
["Gaoxian"] = { "" },
["Changning-M"] = { "" },
["Gongxian"] = { "" },
["Xingwen-GS"] = { "" },
["Xingwen-BWS"] = { "" },
["Jiang'an"] = { "" },
["Junlian"] = { "" },
["Leshan"] = { "" },
["Jiajiang"] = { "" },
["Emeishan"] = { "" },
["Ebian"] = { "" },
["Qianwei"] = { "" },
["Mabian"] = { "" },
["Jingyan"] = { "" },
["Neijiang"] = { "" },
["Zizhong"] = { "" },
["Weiyuan"] = { "" },
["Longchang"] = { "" },
["Suining-SC"] = { "" },
["Pengxi"] = { "" },
["Shehong"] = { "" },
["Guang'an"] = { "" },
["Yuechi"] = { "" },
["Wusheng"] = { "" },
["Linshui"] = { "" },
["Nanchong"] = { "" },
["Nanbu"] = { "" },
["Langzhong"] = { "" },
["Yilong"] = { "" },
["Yingshan"] = { "" },
["Peng'an"] = { "" },
["Dazhou"] = { "" },
["Dazhu"] = { "" },
["Kaijiang"] = { "" },
["Wanyuan"] = { "" },
["Xuanhan"] = { "" },
["Bazhong"] = { "" },
["Tongjiang"] = { "" },
["Nanjiang"] = { "" },
["Hanyuan"] = { "" },
["Xichang"] = { "" },
["Zigong"] = { "" },
["Fushun"] = { "" },
["Rongxian-M"] = { "" },
["Muli"] = { "" },
["Leibo"] = { "" },
["Chongqing"] = { "" },
["Chongqing-JB"] = { "" },
["Chongqing-JLP"] = { "" },
["Chongqing-DDK"] = { "" },
["Chongqing-SPB"] = { "" },
["Chongqing-BN"] = { "" },
["Chongqing-NA"] = { "" },
["Chongqing-QIJ"] = { "" },
["Chongqing-QJ-WS"] = { "" },
["Chongqing-YB"] = { "" },
["Chongqing-BB"] = { "" },
["Chongqing-NC"] = { "" },
["Chongqing-WL"] = { "" },
["Chongqing-DZ"] = { "" },
["Chongqing-RC"] = { "" },
["Chongqing-YC"] = { "" },
["Chongqing-BS"] = { "" },
["Chongqing-TL"] = { "" },
["Chongqing-TN"] = { "" },
["Chongqing-HC"] = { "" },
["Chongqing-CS"] = { "" },
["Chongqing-FL"] = { "" },
["Chongqing-JJ"] = { "" },
["Chongqing-WZ"] = { "" },
["Chongqing-SZ"] = { "" },
["Chongqing-KZ"] = { "" },
["Chongqing-CK"] = { "" },
["Chongqing-DJ"] = { "" },
["Chongqing-LP"] = { "" },
["Chongqing-FD"] = { "" },
["Chongqing-ZX"] = { "" },
["Chongqing-QJ"] = { "" },
["Chongqing-PS"] = { "" },
["Chongqing-YY"] = { "" },
["Chongqing-XS"] = { "" },
["Chongqing-YNY"] = { "" },
["Chongqing-WX"] = { "" },
["Chongqing-FJ"] = { "" },
["Chongqing-WS"] = { "" },
["Wuhan"] = { "走親戚裡", "走親戚屋裡" },
["Jiangxia"] = { "" },
["Caidian"] = { "" },
["Xinzhou-HB"] = { "" },
["Huangpi"] = { "" },
["Hanchuan"] = { "" },
["Suizhou"] = { "" },
["Suixian"] = { "" },
["Yichang"] = { "" },
["Dangyang"] = { "" },
["Zhijiang"] = { "" },
["Yidu"] = { "" },
["Changyang"] = { "" },
["Xingshan"] = { "" },
["Zigui"] = { "" },
["Wufeng"] = { "" },
["Enshi"] = { "" },
["Hefeng"] = { "" },
["Badong"] = { "" },
["Xuan'en"] = { "" },
["Laifeng"] = { "" },
["Lichuan-M"] = { "" },
["Jianshi"] = { "" },
["Xianfeng"] = { "" },
["Xiangyang"] = { "" },
["Laohekou"] = { "" },
["Baokang"] = { "" },
["Nanzhang"] = { "" },
["Zaoyang"] = { "" },
["Yicheng"] = { "" },
["Gucheng"] = { "" },
["Jingzhou"] = { "" },
["Jiangling"] = { "" },
["Shishou"] = { "" },
["Gong'an"] = { "" },
["Songzi"] = { "" },
["Jingmen"] = { "" },
["Zhongxiang"] = { "" },
["Jingshan"] = { "" },
["Tianmen"] = { "" },
["Xiantao"] = { "" },
["Qianjiang"] = { "" },
["Shennongjia"] = { "" },
["Shiyan"] = { "" },
["Zhuxi"] = { "" },
["Zhushan"] = { "" },
["Yunxi"] = { "" },
["Yunyang"] = { "" },
["Danjiangkou"] = { "" },
["Fangxian"] = { "" },
["Lhasa"] = { "" },
["Guiyang"] = { "走親戚" },
["Huaxi"] = { "" },
["Zunyi"] = { "" },
["Tongzi"] = { "" },
["Renhuai"] = { "" },
["Bijie"] = { "" },
["Jinsha-M"] = { "" },
["Dafang"] = { "" },
["Weining"] = { "" },
["Liupanshui"] = { "" },
["Liuzhi"] = { "" },
["Xingyi"] = { "" },
["Anshun"] = { "" },
["Duyun"] = { "" },
["Pingtang"] = { "" },
["Fuquan"] = { "" },
["Weng'an"] = { "" },
["Kaili"] = { "" },
["Liping-GZ"] = { "" },
["Zhenyuan"] = { "" },
["Tongren"] = { "" },
["Sinan"] = { "" },
["Yuping"] = { "" },
["Liping"] = { "" },
["Zhaotong"] = { "" },
["Shuifu"] = { "" },
["Daguan"] = { "" },
["Baoshan-M"] = { "" },
["Dali"] = { "" },
["Kunming"] = { "" },
["Qujing"] = { "" },
["Wenshan"] = { "" },
["Mengzi"] = { "" },
["Lancang"] = { "" },
["Weixi"] = { "" },
["Pu'er"] = { "" },
["Lincang"] = { "" },
["Guilin"] = { "" },
["Lingui"] = { "" },
["Guanyang"] = { "" },
["Lipu"] = { "" },
["Pingle"] = { "" },
["Yangshuo"] = { "" },
["Liuzhou"] = { "走親戚" },
["Liuzhou-LR"] = { "" },
["Luzhai"] = { "" },
["Sanjiang-DZ"] = { "" },
["Nanning-M"] = { "" },
["Yongning-FJ"] = { "" },
["Wuming"] = { "" },
["Wuming-FC"] = { "" },
["Binyang-M"] = { "" },
["Shanglin"] = { "" },
["Yizhou"] = { "" },
["Jinchengjiang"] = { "" },
["Luocheng"] = { "" },
["Fengshan"] = { "" },
["Tianlin-LP"] = { "" },
["Tianlin-PT"] = { "" },
["Leye"] = { "" },
["Lingyun"] = { "" },
["Longlin"] = { "" },
["Xilin"] = { "" },
["Xiangzhou-NL"] = { "" },
["Jishou"] = { "" },
["Changde"] = { "" },
["Zhangjiajie"] = { "" },
["Yongzhou"] = { "" },
["Chenzhou"] = { "" },
["Huaihua"] = { "" },
["Huitong"] = { "" },
["Xiangtan-JN"] = { "" },
["Ganzhou-M"] = { "" },
["Shiquan"] = { "" },
["Ziyang"] = { "" },
["Ningshan"] = { "" },
["Langao"] = { "" },
["Zhenping"] = { "" },
["Hanzhong"] = { "" },
["Nanzheng"] = { "" },
["Ningqiang"] = { "" },
["Liuba"] = { "" },
["Chenggu"] = { "" },
["Foping"] = { "" },
["Xixiang"] = { "" },
["Zhenba"] = { "" },
["Anji-HB"] = { "" },
["Kokang"] = { "" },
["Dagudi"] = { "" },
["Reshuitang"] = { "" },
["Mae Salong"] = { "" },
["Mae Sai"] = { "" },
["Oudomxay"] = { "" },
["Siantar"] = { "" },
["Nanjing"] = { "走親戚" },
["Pukou"] = { "" },
["Luhe-M"] = { "" },
["Lishui-M"] = { "" },
["Yangzhou"] = { "" },
["Jiangdu"] = { "" },
["Baoying"] = { "" },
["Gaoyou"] = { "" },
["Yizheng"] = { "" },
["Taizhou-M"] = { "" },
["Taixing"] = { "" },
["Jiangyan"] = { "" },
["Jingjiang-DX"] = { "" },
["Zhenjiang"] = { "" },
["Jurong"] = { "" },
["Yangzhong"] = { "" },
["Lianyungang"] = { "" },
["Haizhou"] = { "" },
["Guanyun"] = { "" },
["Guannan"] = { "" },
["Huai'an"] = { "" },
["Huai'an-HA"] = { "" },
["Huaiyin"] = { "" },
["Hongze"] = { "" },
["Lianshui"] = { "" },
["Xuyi"] = { "" },
["Jinhu"] = { "" },
["Xinghua"] = { "" },
["Nantong"] = { "" },
["Rugao"] = { "" },
["Rudong"] = { "" },
["Hai'an"] = { "" },
["Yancheng"] = { "" },
["Dongtai"] = { "" },
["Binhai"] = { "" },
["Sheyang"] = { "" },
["Dafeng"] = { "" },
["Funing"] = { "" },
["Jianhu"] = { "" },
["Xiangshui"] = { "" },
["Shuyang"] = { "" },
["Sihong"] = { "" },
["Siyang"] = { "" },
["Anqing"] = { "" },
["Tongcheng"] = { "" },
["Zongyang"] = { "" },
["Chizhou"] = { "" },
["Qingyang"] = { "" },
["Wuhu"] = { "" },
["Wuhu-QS"] = { "" },
["Wanzhi"] = { "" },
["Jinghu"] = { "" },
["Fanchang"] = { "" },
["Wuwei"] = { "" },
["Hanshan"] = { "" },
["Hexian"] = { "" },
["Ma'anshan"] = { "" },
["Dangtu"] = { "" },
["Xuancheng"] = { "" },
["Langxi"] = { "" },
["Guangde"] = { "" },
["Tongling"] = { "" },
["Hefei"] = { "" },
["Feidong"] = { "" },
["Feixi"] = { "" },
["Chaohu"] = { "" },
["Lujiang"] = { "" },
["Changfeng"] = { "" },
["Huainan"] = { "" },
["Lu'an"] = { "" },
["Jin'an-QSH"] = { "" },
["Shucheng"] = { "" },
["Huoshan"] = { "" },
["Chuzhou"] = { "" },
["Lai'an"] = { "" },
["Quanjiao"] = { "" },
["Mingguang"] = { "" },
["Tianchang"] = { "" },
["Echeng"] = { "" },
["Huangshi"] = { "" },
["Huanggang"] = { "" },
["Hong'an"] = { "" },
["Macheng"] = { "" },
["Luotian"] = { "" },
["Yingshan-HB"] = { "" },
["Xishui"] = { "" },
["Huangmei"] = { "" },
["Wuxue"] = { "" },
["Qichun"] = { "" },
["Xiaogan"] = { "" },
["Anlu"] = { "" },
["Yingcheng"] = { "" },
["Yunmeng"] = { "" },
["Dawu"] = { "" },
["Guangshui"] = { "" },
["Zhashui"] = { "" },
["Jiujiang"] = { "" },
["Ruichang"] = { "" },
["Anji-AQ"] = { "" },
["Jinhua-M-SDJ"] = { "" },
["Dianbai-Jun"] = { "" },
["Qinzhou-M"] = { "" },
["Pinghai-Jun"] = { "" },
["Ningguo-GK"] = { "" },
["Changle-QJ"] = { "" },
["Yanping"] = { "" },
["Wuping-ZS-Jun"] = { "" },
["Jiangshan-M-NBD"] = { "" },
["Kaihua-M-HB"] = { "" },
["Yushan-M-HY"] = { "" },
["Juexi"] = { "" },
["Taiyuan"] = { "串親戚" },
["Jiancaoping"] = { "" },
["Jinyuan"] = { "" },
["Qingxu"] = { "" },
["Loufan"] = { "" },
["Taigu"] = { "" },
["Pingyao"] = { "" },
["Heshun"] = { "" },
["Qixian"] = { "" },
["Yangyuan"] = { "" },
["Datong"] = { "" },
["Yunzhou"] = { "" },
["Yunzhou-XCT"] = { "" },
["Tianzhen"] = { "" },
["Guangling"] = { "" },
["Shuozhou"] = { "" },
["Shanyin"] = { "" },
["Pinglu"] = { "" },
["Pingding"] = { "" },
["Xinzhou"] = { "走親戚" },
["Wutai"] = { "" },
["Daixian"] = { "" },
["Wuzhai"] = { "" },
["Lishi"] = { "" },
["Shilou"] = { "" },
["Fenyang"] = { "" },
["Lanxian"] = { "" },
["Linxian"] = { "" },
["Wenshui"] = { "" },
["Xiaoyi"] = { "" },
["Fenxi"] = { "" },
["Xixian"] = { "" },
["Changzhi"] = { "" },
["Tunliu"] = { "" },
["Baochang"] = { "" },
["Linhe"] = { "" },
["Pingshun"] = { "" },
["Zhangzi"] = { "" },
["Qinxian"] = { "" },
["Jincheng"] = { "" },
["Lingchuan"] = { "" },
["Yangcheng"] = { "" },
["Gaoping"] = { "" },
["Jining"] = { "" },
["Liangcheng"] = { "" },
["Hohhot"] = { "" },
["Baotou"] = { "" },
["Dongsheng"] = { "" },
["Haibowan"] = { "" },
["Erenhot"] = { "" },
["Pingshan"] = { "" },
["Zhangjiakou"] = { "" },
["Chongli"] = { "" },
["Handan"] = { "" },
["Linzhang"] = { "" },
["Anyang"] = { "" },
["Linzhou"] = { "" },
["Hebi"] = { "" },
["Xinxiang"] = { "" },
["Jiaozuo"] = { "" },
["Qinyang"] = { "" },
["Wenxian"] = { "" },
["Wuzhi"] = { "" },
["Jiyuan"] = { "" },
["Suide"] = { "" },
["Zizhou"] = { "" },
["Mizhi"] = { "" },
["Jiaxian"] = { "" },
["Wubu"] = { "" },
["Shenmu"] = { "" },
["Fugu"] = { "" },
["Yulin-J"] = { "" },
["Hengshan-J"] = { "" },
["Jingbian"] = { "" },
["Yan'an"] = { "" },
["Ansai"] = { "" },
["Ganquan"] = { "" },
["Zhidan"] = { "" },
["Wuqi-J"] = { "" },
["Qingjian"] = { "" },
["Zichang"] = { "" },
["Yanchuan"] = { "" },
["Yanchang"] = { "" },
["Shanghai"] = { "望親眷", "走親眷" },
["Yangpu"] = { "" },
["Xinzhuang"] = { "" },
["Zhenru"] = { "" },
["Songjiang"] = { "" },
["Chuansha"] = { "" },
["Nanhui"] = { "" },
["Zhoupu"] = { "" },
["Huinan"] = { "" },
["Fengxian"] = { "" },
["Jinshan"] = { "" },
["Qingpu"] = { "" },
["Jiading"] = { "" },
["Baoshan-SCD"] = { "" },
["Baoshan-LD"] = { "" },
["Baoshan-YP"] = { "" },
["Chongming"] = { "" },
["Suzhou"] = { "" },
["Shengpu"] = { "" },
["Xishan"] = { "" },
["Wujiang-SL"] = { "" },
["Wujiang-LL"] = { "" },
["Wujiang-SZ"] = { "" },
["Wuxi"] = { "" },
["Changshu"] = { "" },
["Kunshan"] = { "" },
["Taicang"] = { "" },
["Zhangjiagang"] = { "" },
["Tongzhou"] = { "" },
["Qidong"] = { "" },
["Qidong-LS"] = { "" },
["Haimen"] = { "" },
["Haimen-SJ"] = { "" },
["Rudong-W"] = { "" },
["Jiaxing"] = { "" },
["Jiashan"] = { "" },
["Pinghu"] = { "" },
["Haining-YG"] = { "" },
["Haining-XS"] = { "" },
["Tongxiang"] = { "" },
["Haiyan"] = { "" },
["Changzhou"] = { "" },
["Liyang"] = { "" },
["Jintan"] = { "" },
["Yixing"] = { "" },
["Danyang"] = { "行親眷", "行親" },
["Danyang-TJQ"] = { "" },
["Jingjiang"] = { "" },
["Jiangyin"] = { "" },
["Gaochun"] = { "" },
["Gaochun-ZB"] = { "" },
["Huzhou"] = { "" },
["Huzhou-SL"] = { "" },
["Changxing"] = { "" },
["Anji"] = { "" },
["Anji-XF"] = { "" },
["Deqing-W"] = { "" },
["Deqing-GT"] = { "" },
["Hangzhou"] = { "走親眷" },
["Yuhang"] = { "" },
["Lin'an"] = { "" },
["Lin'an-CH"] = { "" },
["Lin'an-YQ"] = { "" },
["Fuyang-W"] = { "" },
["Fuyang-XD"] = { "" },
["Xiaoshan"] = { "" },
["Tonglu"] = { "" },
["Fenshui-WS"] = { "" },
["Shaoxing"] = { "" },
["Shaoxing-KQ"] = { "" },
["Shangyu"] = { "" },
["Zhuji"] = { "" },
["Zhuji-WJJ"] = { "" },
["Shengzhou"] = { "" },
["Shengzhou-CR"] = { "" },
["Shengzhou-TP"] = { "" },
["Xinchang"] = { "" },
["Ningbo"] = { "走親眷" },
["Zhenhai"] = { "" },
["Fenghua"] = { "" },
["Beilun"] = { "" },
["Yinzhou"] = { "" },
["Yuyao"] = { "" },
["Cixi"] = { "" },
["Xiangshan"] = { "" },
["Ninghai"] = { "" },
["Zhoushan"] = { "" },
["Dinghai"] = { "" },
["Daishan"] = { "" },
["Shengsi"] = { "" },
["Jiaojiang"] = { "" },
["Huangyan"] = { "" },
["Tiantai"] = { "" },
["Xianju"] = { "" },
["Sanmen"] = { "" },
["Linhai"] = { "" },
["Wenling"] = { "" },
["Yuhuan"] = { "" },
["Yuhuan-DMY"] = { "" },
["Yuhuan-CM"] = { "" },
["Wenzhou"] = { "" },
["Yueqing"] = { "" },
["Yongjia"] = { "" },
["Yongjia-FL"] = { "" },
["Rui'an"] = { "" },
["Longgang"] = { "" },
["Dongtou"] = { "" },
["Cangnan-HS"] = { "" },
["Cangnan-JX"] = { "" },
["Cangnan-PC"] = { "" },
["Pingyang"] = { "" },
["Taishun"] = { "" },
["Wencheng"] = { "" },
["Lishui"] = { "" },
["Qingtian"] = { "" },
["Jinyun"] = { "" },
["Xuanping"] = { "" },
["Songyang-XP"] = { "" },
["Songyang-GS"] = { "" },
["Yunhe"] = { "" },
["Jingning"] = { "" },
["Qingyuan-W"] = { "" },
["Longquan"] = { "" },
["Quzhou"] = { "" },
["Qujiang-DZ"] = { "" },
["Suichang"] = { "" },
["Jiangshan"] = { "" },
["Changshan"] = { "" },
["Kaihua"] = { "" },
["Longyou"] = { "" },
["Jinhua"] = { "" },
["Tangxi"] = { "" },
["Yiwu"] = { "" },
["Yongkang"] = { "" },
["Pujiang"] = { "" },
["Dongyang"] = { "" },
["Pan'an"] = { "" },
["Wuyi"] = { "" },
["Lanxi"] = { "" },
["Shangrao"] = { "" },
["Shangrao-Rail"] = { "" },
["Shangrao-ZF"] = { "" },
["Guangfeng"] = { "" },
["Yushan"] = { "" },
["Yanshan-JC"] = { "" },
["Hengfeng-GY"] = { "" },
["Xuancheng-YC"] = { "" },
["Xuancheng-JP"] = { "" },
["Wuhu-LL"] = { "" },
["Tongling-W"] = { "" },
["Nanling"] = { "" },
["Yi'an-WS"] = { "" },
["Huangshan"] = { "" },
["Jingxian"] = { "" },
["Jingxian-ZJ"] = { "" },
["Shitai-JZ"] = { "" },
["Pucheng"] = { "" },
["Changsha"] = { "走親戚" },
["Yiyang-X"] = { "" },
["Liuyang-YA"] = { "" },
["Xiangtan"] = { "" },
["Xiangtan-CES"] = { "" },
["Miluo-CL"] = { "" },
["Xiangxiang"] = { "" },
["Xiangxiang-MQ"] = { "" },
["Loudi"] = { "" },
["Shuangfeng"] = { "" },
["Xinhua"] = { "" },
["Lianyuan"] = { "" },
["Shaoyang"] = { "" },
["Lengshuitan"] = { "" },
["Zhuzhou"] = { "" },
["Longhui"] = { "" },
["Suining-X"] = { "" },
["Dongkou-HQ"] = { "" },
["Wugang"] = { "" },
["Hengyang"] = { "" },
["Hengyang County"] = { "" },
["Hengshan"] = { "" },
["Hengshan-BG"] = { "" },
["Qiyang"] = { "" },
["Quanzhou-X"] = { "" },
["Guanyang-X"] = { "" },
["Qinglong-CL"] = { "" },
["Nanchong-CL"] = { "" },
["Nanchang"] = { "走親戚" },
["Xinjian-WC"] = { "" },
["Nanchang-TC"] = { "" },
["Anyi"] = { "" },
["Hukou"] = { "" },
["Lushan"] = { "" },
["Yongxiu"] = { "" },
["Gongqingcheng-JY"] = { "" },
["Xiushui"] = { "" },
["Pengze"] = { "" },
["Duchang"] = { "" },
["Duchang-TT"] = { "" },
["Duchang-YF"] = { "" },
["Wuning-QK"] = { "" },
["Poyang"] = { "" },
["Poyang-MT"] = { "" },
["Yugan"] = { "" },
["Wannian"] = { "" },
["Yiyang"] = { "" },
["Hengfeng"] = { "" },
["Yanshan-HK"] = { "" },
["Yanshan-YP"] = { "" },
["Shangrao-SX"] = { "" },
["Shangrao-HM"] = { "" },
["Yushan-G"] = { "" },
["Jingdezhen"] = { "" },
["Leping"] = { "" },
["Yichun"] = { "" },
["Yifeng"] = { "" },
["Gao'an"] = { "" },
["Fengxin"] = { "" },
["Shanggao"] = { "" },
["Wanzai"] = { "" },
["Fengcheng"] = { "" },
["Fengcheng-ST"] = { "" },
["Xinyu"] = { "" },
["Fuzhou-G"] = { "" },
["Linchuan-SDD"] = { "" },
["Dongxiang"] = { "" },
["Nancheng"] = { "" },
["Nanfeng"] = { "" },
["Yihuang"] = { "" },
["Lichuan"] = { "" },
["Chongren"] = { "" },
["Pingxiang"] = { "" },
["Lianhua"] = { "" },
["Luxi"] = { "" },
["Ji'an"] = { "" },
["Jishui-LT"] = { "" },
["Yongfeng"] = { "" },
["Taihe"] = { "" },
["Xiajiang"] = { "" },
["Yongxin"] = { "" },
["Yingtan"] = { "" },
["Yujiang"] = { "" },
["Guixi"] = { "" },
["Susong"] = { "" },
["Susong-HT"] = { "" },
["Susong-GL"] = { "" },
["Wangjiang"] = { "" },
["Qianshan"] = { "" },
["Huaining"] = { "" },
["Huaining-SP"] = { "" },
["Yuexi"] = { "" },
["Taihu"] = { "" },
["Dongzhi"] = { "" },
["Shitai"] = { "" },
["Yangxin"] = { "" },
["Yangxin-GH"] = { "" },
["Daye"] = { "" },
["Xianning"] = { "" },
["Xianning-MQ"] = { "" },
["Jiayu"] = { "" },
["Chongyang"] = { "" },
["Chibi"] = { "" },
["Tongshan"] = { "" },
["Tongcheng-G"] = { "" },
["Jianli"] = { "" },
["Yueyang"] = { "" },
["Yueyang-BX"] = { "" },
["Linxiang"] = { "" },
["Pingjiang-XJ"] = { "" },
["Pingjiang-NJ"] = { "" },
["Liuyang"] = { "" },
["Liuyang-DY"] = { "" },
["Liuyang-FY"] = { "" },
["Liling-BTT"] = { "" },
["Liling-BS"] = { "" },
["Youxian"] = { "" },
["Chaling"] = { "" },
["Changning"] = { "" },
["Changning-TS"] = { "" },
["Leiyang"] = { "" },
["Anren"] = { "" },
["Zixing-XN"] = { "" },
["Longhui-LDZ"] = { "" },
["Dongkou"] = { "" },
["Dongkou-SJ"] = { "" },
["Jianning"] = { "" },
["Taining"] = { "" },
["Hanbin-NT"] = { "" },
["Jinxian"] = { "" },
["Jinxi"] = { "" },
["Le'an"] = { "" },
["Guangchang"] = { "" },
["Anfu"] = { "" },
["Suichuan"] = { "" },
["Wan'an"] = { "" },
["Jing'an"] = { "" },
["Zhangshu"] = { "" },
["Xingan"] = { "" },
["Fenyi"] = { "" },
["Meixian"] = { "走親戚" },
["Xingning"] = { "" },
["Dabu"] = { "" },
["Dabu-XH"] = { "" },
["Dabu-TY"] = { "" },
["Dabu-GB"] = { "" },
["Fengshun-TK"] = { "" },
["Fengshun-LH"] = { "" },
["Fengshun-HJ"] = { "" },
["Fengshun-FL"] = { "" },
["Fengshun-PT"] = { "" },
["Huizhou"] = { "" },
["Huizhou-SK"] = { "" },
["Huizhou-HL"] = { "" },
["Huiyang"] = { "" },
["Huidong-PS"] = { "" },
["Huidong-DL"] = { "" },
["Dongguan-H"] = { "" },
["Longmen-PL"] = { "" },
["Longmen-LX"] = { "" },
["Boluo"] = { "" },
["Shenzhen-H"] = { "" },
["Shenzhen-H-LH"] = { "" },
["Shenzhen-HG"] = { "" },
["Zengcheng-ZG"] = { "" },
["Zhongshan-WGS"] = { "" },
["Zhongshan-NLHS"] = { "" },
["Wuhua-SZ"] = { "" },
["Wuhua-HC"] = { "" },
["Wuhua-CB"] = { "" },
["Wuhua-MY"] = { "" },
["Wuhua-ML"] = { "" },
["Heyuan"] = { "" },
["Zijin"] = { "" },
["Zijin-GZ"] = { "" },
["Longchuan-TC"] = { "" },
["Longchuan-SD"] = { "" },
["Heping-LZ"] = { "" },
["Lianping"] = { "" },
["Lianping-ZX"] = { "" },
["Lianping-LJ"] = { "" },
["Wengyuan"] = { "" },
["Nanxiong-ZJ"] = { "" },
["Qujiang"] = { "" },
["Lechang-MH"] = { "" },
["Xinfeng-MT"] = { "" },
["Xinfeng-DX"] = { "" },
["Xiaosanjiang"] = { "" },
["Liannan"] = { "" },
["Conghua-H"] = { "" },
["Jiexi"] = { "" },
["Jiexi-HZ"] = { "" },
["Luhe"] = { "" },
["Raoping-XF"] = { "" },
["Xiuzhuan"] = { "" },
["Pinghe-JF"] = { "" },
["Nanjing-ML"] = { "" },
["Nanjing-BL"] = { "" },
["Changting"] = { "" },
["Shanghang"] = { "" },
["Shanghang-GT"] = { "" },
["Yongding"] = { "" },
["Yongding-XY"] = { "" },
["Yongding-GB"] = { "" },
["Yongding-HK"] = { "" },
["Longyan-WA"] = { "" },
["Wuping"] = { "" },
["Wuping-ZS"] = { "" },
["Wuping-Y"] = { "" },
["Wuping-WD"] = { "" },
["Pingyu"] = { "" },
["Liancheng"] = { "" },
["Liancheng-PT"] = { "" },
["Liancheng-JX"] = { "" },
["Liancheng-ZB"] = { "" },
["Liancheng-LY"] = { "" },
["Ninghua"] = { "" },
["Qingliu"] = { "" },
["Yudu"] = { "" },
["Ningdu"] = { "" },
["Ruijin"] = { "" },
["Shicheng"] = { "" },
["Shangyou"] = { "" },
["Sandu"] = { "" },
["Ganzhou-PL"] = { "" },
["Nankang"] = { "" },
["Dayu"] = { "" },
["Quannan"] = { "" },
["Dingnan"] = { "" },
["Longnan"] = { "" },
["Xunwu"] = { "" },
["Anyuan"] = { "" },
["Huichang"] = { "" },
["Chongyi"] = { "" },
["Xingguo"] = { "" },
["Yunhe-JST"] = { "" },
["Tonggu"] = { "" },
["Fengxin-ZX"] = { "" },
["Taoyuan"] = { "" },
["Miaoli"] = { "" },
["Zaoqiao"] = { "" },
["Touwu"] = { "" },
["Nanzhuang"] = { "" },
["Shitan"] = { "" },
["Sanwan"] = { "" },
["Toufen"] = { "" },
["Gongguan"] = { "" },
["Zhuolan-SX"] = { "" },
["Guanxi"] = { "" },
["Changhua-PT"] = { "" },
["Liudui"] = { "" },
["Wuluo"] = { "" },
["Daluguan"] = { "" },
["Jiadong"] = { "" },
["Meinong"] = { "" },
["Shanlin"] = { "" },
["Hsinchu"] = { "" },
["Guanxi-DP"] = { "" },
["Guanxi-LQW"] = { "" },
["Dongshi"] = { "" },
["Raoping"] = { "" },
["Guanxi-RP"] = { "" },
["Hukou-RP"] = { "" },
["Liujia-RP"] = { "" },
["Zhongli-ZB-RP"] = { "" },
["Zhongli-XN-RP"] = { "" },
["Zhongli-GL-RP"] = { "" },
["Pingzhen-NS-RP"] = { "" },
["Xinwu-TZ-RP"] = { "" },
["Guanyin-XP-RP"] = { "" },
["Zhuolan-RP"] = { "" },
["Yunlin"] = { "" },
["Guoxing"] = { "" },
["Hong Kong-H"] = { "" },
["Tangkou"] = { "" },
["Sanjia"] = { "" },
["Sihe"] = { "" },
["Qianpai"] = { "" },
["Xindong"] = { "" },
["Shalang"] = { "" },
["Xin'an"] = { "" },
["Shijiao"] = { "" },
["Qingping"] = { "" },
["Xihe"] = { "" },
["Fumian-XS"] = { "" },
["Luchuan-LC"] = { "" },
["Luchuan-DQ"] = { "" },
["Luchuan-SH"] = { "" },
["Luchuan-WS"] = { "" },
["Bobai-SH"] = { "" },
["Bobai-LT"] = { "" },
["Bobai-LP"] = { "" },
["Bobai-LJ"] = { "" },
["Bobai-CT"] = { "" },
["Tang'an"] = { "" },
["Beiliu-GH"] = { "" },
["Beiliu-MM"] = { "" },
["Xingye-GF"] = { "" },
["Rongxian-XD"] = { "" },
["Mashan-PL"] = { "" },
["Binyang-WL"] = { "" },
["Hengxian-XY"] = { "" },
["Lingui-H-XJ"] = { "" },
["Lipu-SDT"] = { "" },
["Lipu-DSG"] = { "" },
["Pingle-H"] = { "" },
["Yangshuo-JB"] = { "" },
["Tianlin-GL"] = { "" },
["Qinzhou-H"] = { "" },
["Guidong"] = { "" },
["Rongchang-PL"] = { "" },
["Chengdu-H-LT"] = { "" },
["Longquanyi-H-SL"] = { "" },
["Qingbaijiang-H-LW"] = { "" },
["Xindu-H-SBT"] = { "" },
["Xindu-H-HXC"] = { "" },
["Xindu-H-XD"] = { "" },
["Weiyuan-H"] = { "" },
["Yilong-H"] = { "" },
["Xichang-H"] = { "" },
["Sabah-B"] = { "" },
["Sabah-L"] = { "" },
["Sabah-HY"] = { "" },
["Sabah-HP"] = { "" },
["Kuala Lumpur-H-HY"] = { "" },
["Kuala Lumpur-H"] = { "" },
["Senai"] = { "" },
["Senai-JX"] = { "" },
["Kuching"] = { "" },
["Sungai Tapang"] = { "" },
["Singkawang"] = { "" },
["Pontianak-MX"] = { "" },
["Mempawah"] = { "" },
["Metal"] = { "" },
["Singapore-MX"] = { "" },
["Singapore-DB"] = { "" },
["Belait-H"] = { "" },
["Bangkok-MX"] = { "" },
["Bangkok-FS"] = { "" },
["Bangkok-JX"] = { "" },
["Yangon-H"] = { "" },
["Ho Chi Minh City-H"] = { "" },
["Jixi"] = { "" },
["Shexian"] = { "" },
["Shexian-XG"] = { "" },
["Shexian-DGY"] = { "" },
["Shexian-SY"] = { "" },
["Tunxi"] = { "" },
["Huizhou-HZ"] = { "" },
["Xiuning"] = { "" },
["Yixian"] = { "" },
["Qimen"] = { "" },
["Qimen-AL-Min"] = { "" },
["Wuyuan"] = { "" },
["Wuyuan-QK"] = { "" },
["Wuyuan-JW"] = { "" },
["Fuliang"] = { "" },
["Fuliang-EH"] = { "" },
["Dexing"] = { "" },
["Dexing-ZC"] = { "" },
["Jingde"] = { "" },
["Zhanda"] = { "" },
["Chun'an"] = { "" },
["Sui'an"] = { "" },
["Jiande"] = { "" },
["Shouchang"] = { "" },
["Guangzhou"] = { "" },
["Hong Kong"] = { "" },
["HK Weitou"] = { "" },
["Kam Tin"] = { "" },
["Shek Pik"] = { "" },
["Ting Kok"] = { "" },
["Tung Ping Chau"] = { "" },
["Sam Mun Tsai"] = { "" },
["Macau"] = { "" },
["Macau-Tanka"] = { "" },
["Guangzhou-XJ"] = { "" },
["Guangzhou-LX"] = { "" },
["Guangzhou-HP"] = { "" },
["Luogang"] = { "" },
["Guangzhou-LH"] = { "" },
["Guangzhou-MT"] = { "" },
["Guangzhou-JS"] = { "" },
["Guangzhou-XS"] = { "" },
["Guangzhou-SJ"] = { "" },
["Guangzhou-JC"] = { "" },
["Guangzhou-LG"] = { "" },
["Guangzhou-RH"] = { "" },
["Guangzhou-ZL"] = { "" },
["Guangzhou-ZLT"] = { "" },
["Guangzhou-JF"] = { "" },
["Panyu"] = { "" },
["Huadu"] = { "" },
["Conghua"] = { "" },
["Zengcheng"] = { "" },
["Zengcheng-XT"] = { "" },
["Foshan"] = { "" },
["Nanhai"] = { "" },
["Shunde"] = { "" },
["Sanshui"] = { "" },
["Gaoming"] = { "" },
["Zhongshan"] = { "" },
["Zhongshan-HC"] = { "" },
["Zhongshan-NL"] = { "" },
["Zhongshan-CKM"] = { "" },
["Zhongshan-XL"] = { "" },
["Zhongshan-DS"] = { "" },
["Zhongshan-TB"] = { "" },
["Zhongshan-HL"] = { "" },
["Zhongshan-DF"] = { "" },
["Zhongshan-NT"] = { "" },
["Zhongshan-FS"] = { "" },
["Zhongshan-SL"] = { "" },
["Zhongshan-GK"] = { "" },
["Zhongshan-HP"] = { "" },
["Zhongshan-SJ"] = { "" },
["Zhongshan-LW"] = { "" },
["Zhongshan-MZ"] = { "" },
["Zhongshan-GZ"] = { "" },
["Zhongshan-BF"] = { "" },
["Zhongshan-TZ"] = { "" },
["Zhongshan-TG"] = { "" },
["Zhuhai"] = { "" },
["Zhuhai-TJW"] = { "" },
["Doumen-T"] = { "" },
["Doumen-S"] = { "" },
["Jiangmen"] = { "" },
["Xinhui"] = { "" },
["Taishan"] = { "" },
["Taishan-GH"] = { "" },
["Kaiping"] = { "" },
["Enping"] = { "" },
["Heshan"] = { "" },
["Heshan-SP"] = { "" },
["Malan"] = { "" },
["Malan-BTQ"] = { "" },
["Malan-MHD"] = { "" },
["Malan-SZP"] = { "" },
["Malan-BLH"] = { "" },
["Dongguan"] = { "" },
["Shenzhen-C-LH"] = { "" },
["Shenzhen-NT"] = { "" },
["Shenzhen-XX"] = { "" },
["Bao'an"] = { "" },
["Yantian"] = { "" },
["Dapeng"] = { "" },
["Shenzhen-PD"] = { "" },
["Pingshan-ZM"] = { "" },
["Ebu-ZM"] = { "" },
["Longmen"] = { "" },
["Qingyuan"] = { "" },
["Fogang"] = { "" },
["Yingde"] = { "" },
["Yangshan"] = { "" },
["Lianshan"] = { "" },
["Lianshan-YH"] = { "" },
["Lianzhou"] = { "" },
["Shaoguan"] = { "" },
["Qujiang-C"] = { "" },
["Renhua"] = { "" },
["Lechang"] = { "" },
["Gaoyao"] = { "" },
["Sihui"] = { "" },
["Guangning"] = { "" },
["Deqing"] = { "" },
["Huaiji"] = { "" },
["Huaiji-LC"] = { "" },
["Fengkai"] = { "" },
["Fengkai-JK"] = { "" },
["Fengkai-LD"] = { "" },
["Yunfu"] = { "" },
["Xinxing"] = { "" },
["Luoding"] = { "" },
["Luoding-SL"] = { "" },
["Yunan"] = { "" },
["Yangjiang"] = { "" },
["Yangdong"] = { "" },
["Yangdong-YS"] = { "" },
["Yangchun"] = { "" },
["Yangxi"] = { "" },
["Xinyi"] = { "" },
["Maoming"] = { "" },
["Maoming-YJ"] = { "" },
["Gaozhou"] = { "" },
["Huazhou"] = { "" },
["Huazhou-CQ"] = { "" },
["Zhanjiang"] = { "" },
["Lianjiang"] = { "" },
["Lianjiang-CB"] = { "" },
["Wuchuan"] = { "" },
["Wuchuan-ML"] = { "" },
["Nanning"] = { "" },
["Nanning-Tanka"] = { "" },
["Wuzhou"] = { "" },
["Wuzhou-LX"] = { "" },
["Cangwu-SQ"] = { "" },
["Cangwu-LB"] = { "" },
["Tengxian"] = { "" },
["Yulin"] = { "" },
["Rongxian"] = { "" },
["Hepu"] = { "" },
["Hepu-ST"] = { "" },
["Guiping"] = { "" },
["Guiping-JT"] = { "" },
["Guiping-JK"] = { "" },
["Guiping-MD"] = { "" },
["Guiping-ML"] = { "" },
["Pingnan-PN"] = { "" },
["Pingnan-DZ"] = { "" },
["Pingnan-GC"] = { "" },
["Mengshan"] = { "" },
["Mengshan-XX"] = { "" },
["Mengshan-CT"] = { "" },
["Guigang-GC"] = { "" },
["Guigang-NJ"] = { "" },
["Guigang-PD"] = { "" },
["Beiliu"] = { "" },
["Beiliu-TL"] = { "" },
["Beiliu-XC"] = { "" },
["Baise"] = { "" },
["Tiandong"] = { "" },
["Tiandong-LF"] = { "" },
["Tianyang"] = { "" },
["Pingguo"] = { "" },
["Pingguo-SX"] = { "" },
["Bobai"] = { "" },
["Lingshan"] = { "" },
["Pubei"] = { "" },
["Qinzhou"] = { "" },
["Qinzhou-XD"] = { "" },
["Qinzhou-CT"] = { "" },
["Qinzhou-NS"] = { "" },
["Qinzhou-XNJ"] = { "" },
["Beihai"] = { "" },
["Beihai-NK"] = { "" },
["Beihai-YP"] = { "" },
["Beihai-QG"] = { "" },
["Beihai-QG-CB"] = { "" },
["Ningming"] = { "" },
["Hengxian"] = { "" },
["Pumen"] = { "" },
["Zhaoping"] = { "" },
["Fangchenggang-FC"] = { "" },
["Dongxing"] = { "" },
["Chongzuo-LT"] = { "" },
["Fusui-QJ"] = { "" },
["Lingchuan-C-YJ"] = { "" },
["Pingle-C-MJ"] = { "" },
["Pingle-C-SS"] = { "" },
["Lipu-ZC"] = { "" },
["Danzhou"] = { "" },
["Sanya-YL"] = { "" },
["Kuala Lumpur"] = { "" },
["Penang-C"] = { "" },
["Ipoh"] = { "" },
["Sarikei-C"] = { "" },
["Singapore-C"] = { "" },
["Jakarta-C"] = { "" },
["Ho Chi Minh City"] = { "" },
["Mong Cai"] = { "" },
["Phnom Penh-C"] = { "" },
["Yangon-C"] = { "" },
["Mandalay-C"] = { "" },
["Bangkok-C"] = { "" },
["Betong"] = { "" },
["Manila-C"] = { "" },
["Nanning-P"] = { "" },
["Nanning-P-SJ"] = { "" },
["Nanning-P-GJY"] = { "" },
["Nanning-P-ZGL"] = { "" },
["Nanning-P-XXJD"] = { "" },
["Nanning-P-SL"] = { "" },
["Nanning-P-XX"] = { "" },
["Nanning-P-SC"] = { "" },
["Binyang"] = { "" },
["Binyang-XQ"] = { "" },
["Hengxian-P"] = { "" },
["Wuxuan-JJ"] = { "" },
["Chongzuo-P"] = { "" },
["Liucheng-P"] = { "" },
["Liucheng-P-GZ"] = { "" },
["Yizhou-P-DS"] = { "" },
["Luocheng-P"] = { "" },
["Guilin-P"] = { "" },
["Guilin-P-CY"] = { "" },
["Guilin-P-DBZ"] = { "" },
["Guilin-P-ZY"] = { "" },
["Guilin-P-DB"] = { "" },
["Guilin-P-YJ"] = { "" },
["Guilin-P-QJ"] = { "" },
["Lingui-P-WT"] = { "" },
["Lingui-P-HS"] = { "" },
["Lingui-P-LJ"] = { "" },
["Lingui-P-LT"] = { "" },
["Lingchuan-P"] = { "" },
["Lingchuan-P-GQ"] = { "" },
["Lingchuan-P-GD"] = { "" },
["Lingchuan-P-TX"] = { "" },
["Lingchuan-P-SZ"] = { "" },
["Lingchuan-P-GP"] = { "" },
["Lingchuan-P-LT"] = { "" },
["Guanyang-P"] = { "" },
["Quanzhou-P"] = { "" },
["Pingle-P"] = { "" },
["Pingle-P-XTM"] = { "" },
["Yangshuo-P"] = { "" },
["Yangshuo-P-PT"] = { "" },
["Yongfu-P-JX"] = { "" },
["Yongfu-P-CS"] = { "" },
["Zhongshan-GA"] = { "" },
["Xiamen"] = { "" },
["Xiamen-HS"] = { "" },
["Tong'an"] = { "" },
["Quanzhou"] = { "" },
["Jinjiang"] = { "" },
["Nan'an"] = { "" },
["Shishi"] = { "" },
["Hui'an"] = { "" },
["Anxi"] = { "" },
["Yongchun"] = { "" },
["Dehua"] = { "" },
["Zhangzhou"] = { "" },
["Longhai"] = { "" },
["Changtai"] = { "" },
["Hua'an"] = { "" },
["Nanjing-MN"] = { "" },
["Pinghe"] = { "" },
["Zhangpu"] = { "" },
["Yunxiao"] = { "" },
["Zhao'an"] = { "" },
["Zhao'an-SD"] = { "" },
["Zhao'an-TY"] = { "" },
["Zhao'an-WS"] = { "" },
["Dongshan"] = { "" },
["Taipei"] = { "" },
["Wanhua"] = { "" },
["Tamsui"] = { "" },
["Sanxia"] = { "" },
["Pingxi"] = { "" },
["Kaohsiung"] = { "" },
["Cijin"] = { "" },
["Hongmaogang"] = { "" },
["Dalinpu"] = { "" },
["Tianliao"] = { "" },
["Cieding"] = { "" },
["Yilan"] = { "" },
["Luodong"] = { "" },
["Toucheng"] = { "" },
["Lukang"] = { "" },
["Yongjing-MN"] = { "" },
["Taichung"] = { "" },
["Wuqi"] = { "" },
["Tainan"] = { "" },
["Anping"] = { "" },
["Shanhua"] = { "" },
["Taitung"] = { "" },
["Green Island"] = { "" },
["Hsinchu-MN"] = { "" },
["Miaoli-MN"] = { "" },
["Mailiao"] = { "" },
["Chiayi"] = { "" },
["Chiayi-TB"] = { "" },
["Chiayi-SS"] = { "" },
["Chiayi-ZP"] = { "" },
["Chiayi-DP"] = { "" },
["Chiayi-ZQ"] = { "" },
["Chiayi-DL"] = { "" },
["Chiayi-XK"] = { "" },
["Chiayi-MX"] = { "" },
["Chiayi-PZ"] = { "" },
["Chiayi-LJ"] = { "" },
["Chiayi-ST"] = { "" },
["Chiayi-FL"] = { "" },
["Chiayi-ALS"] = { "" },
["Chiayi-LC"] = { "" },
["Chiayi-YZ"] = { "" },
["Chiayi-XG"] = { "" },
["Chiayi-MS"] = { "" },
["Chiayi-DS"] = { "" },
["Chiayi-BD"] = { "" },
["Chiayi-WL"] = { "" },
["Baoli"] = { "" },
["Liuqiu"] = { "" },
["Kinmen"] = { "" },
["Jinsha"] = { "" },
["Magong"] = { "" },
["Pengnan"] = { "" },
["Xiyu"] = { "" },
["Huxi"] = { "" },
["Wangan"] = { "" },
["Cimei"] = { "" },
["Huayu"] = { "" },
["Zhongtun"] = { "" },
["Houliao"] = { "" },
["Tongliang"] = { "" },
["Jibei"] = { "" },
["Malaysia-MN"] = { "" },
["Melaka"] = { "" },
["Labuan"] = { "" },
["Singapore-MN"] = { "" },
["Philippine-MN"] = { "" },
["Medan"] = { "" },
["Seri Begawan"] = { "" },
["Ho Chi Minh City-MN"] = { "" },
["Yangon-MN"] = { "" },
["Longyan"] = { "" },
["Shizhong"] = { "" },
["Zhangping"] = { "" },
["Yongfu"] = { "" },
["Datian"] = { "" },
["Datian-GP"] = { "" },
["Youxi-JM"] = { "" },
["Youxi-XQ"] = { "" },
["Shunchang-PS"] = { "" },
["Xiapu-SS"] = { "" },
["Putian-MN"] = { "" },
["Pingnan"] = { "" },
["Pingnan-PT"] = { "" },
["Pingnan-SJ"] = { "" },
["Guiping-XW"] = { "" },
["Guiping-DS"] = { "" },
["Guilin-MN-BYG"] = { "" },
["Pingle-MN"] = { "" },
["Qinzhou-MN"] = { "" },
["Lechang-TT"] = { "" },
["Renhua-CSB"] = { "" },
["Yingde-YZ"] = { "" },
["Yunan-LT"] = { "" },
["Heyuan-NJ"] = { "" },
["Hangzhou-PF"] = { "" },
["Cangnan-MN"] = { "" },
["Yuhuan-KM"] = { "" },
["Wenling-RS"] = { "" },
["Yixing-SB"] = { "" },
["Guangfeng-NSD"] = { "" },
["Hengfeng-YJ"] = { "" },
["Yushan-ZH"] = { "" },
["Langxi-FL"] = { "" },
["Chaozhou"] = { "" },
["Raoping-MN-T"] = { "" },
["Shantou"] = { "" },
["Chenghai"] = { "" },
["Chenghai-DX"] = { "" },
["Chaoyang"] = { "" },
["Nan'ao-HZ"] = { "" },
["Nan'ao-YA"] = { "" },
["Jieyang"] = { "" },
["Puning"] = { "" },
["Lufeng"] = { "" },
["Haifeng"] = { "" },
["Fengshun-MN-LH"] = { "" },
["Fengshun-MN-HJ"] = { "" },
["Yuen Chau Tsai-MN"] = { "" },
["Sha Tau Kok-MN"] = { "" },
["Thailand-MN-T"] = { "" },
["Chiang Mai-MN-T"] = { "" },
["Hat Yai-MN-T"] = { "" },
["Cambodia-MN-T"] = { "" },
["Ho Chi Minh City-MN-T"] = { "" },
["Vientiane-MN-T"] = { "" },
["Johor Bahru"] = { "" },
["Penang-MN-T"] = { "" },
["Singapore-MN-T"] = { "" },
["Batam-MN-T"] = { "" },
["Pontianak-MN-T"] = { "" },
["Leizhou"] = { "" },
["Dianbai-XD"] = { "" },
["Wenchang"] = { "" },
["Haikou"] = { "" },
["Chengmai"] = { "" },
["Qionghai"] = { "" },
["Wanning"] = { "" },
["Tunchang"] = { "" },
["Singapore-MN-H"] = { "" },
["Belait-MN-H"] = { "" },
["Putian"] = { "" },
["Putian-DH"] = { "" },
["Putian-JK"] = { "" },
["Putian-NR"] = { "" },
["Xianyou"] = { "" },
["Xianyou-FT"] = { "" },
["Xianyou-YY"] = { "" },
["Fuding-AY"] = { "" },
["Shaxi"] = { "" },
["Sanxiang"] = { "" },
["Nanlang"] = { "" },
["Fuzhou"] = { "" },
["Changle"] = { "" },
["Lianjiang-MD"] = { "" },
["Minhou"] = { "" },
["Fuqing"] = { "" },
["Pingtan"] = { "" },
["Yongtai"] = { "" },
["Minqing"] = { "" },
["Gutian"] = { "" },
["Pingnan-MD"] = { "" },
["Luoyuan"] = { "" },
["Fu'an"] = { "" },
["Ningde"] = { "" },
["Xiapu"] = { "" },
["Zherong"] = { "" },
["Shouning"] = { "" },
["Zhouning"] = { "" },
["Fuding"] = { "" },
["Youxi"] = { "" },
["Youxi-XY"] = { "" },
["Youxi-YZ"] = { "" },
["Youxi-TC"] = { "" },
["Youxi-ZX"] = { "" },
["Matsu"] = { "" },
["Taishun-MD"] = { "" },
["Cangnan-MD"] = { "" },
["Guanhaiwei"] = { "" },
["Longyou-LS"] = { "" },
["Singapore-MD-FQ"] = { "" },
["Sitiawan-MD-GT"] = { "" },
["Sibu-MD-MQ"] = { "" },
["Jian'ou"] = { "" },
["Dikou"] = { "" },
["Yanping-XY"] = { "" },
["Yanping-XD"] = { "" },
["Songxi"] = { "" },
["Zhenghe"] = { "" },
["Zhenqian"] = { "" },
["Shunchang-YD"] = { "" },
["Jianyang"] = { "" },
["Huangkeng"] = { "" },
["Wuyishan"] = { "" },
["Shibei"] = { "" },
["Yong'an"] = { "" },
["Sanyuan"] = { "" },
["Shaxian"] = { "" },
["Yanping-WT"] = { "" },
["Shaowu"] = { "" },
["Guangze"] = { "" },
["Jiangle"] = { "" },
["Mingxi"] = { "" },
["Shunchang"] = { "" },
["Ningde-She"] = { "" },
["Fu'an-She"] = { "" },
["Fuding-She"] = { "" },
["Zhouning-She"] = { "" },
["Xiapu-She"] = { "" },
["Shouning-She"] = { "" },
["Gutian-She"] = { "" },
["Luoyuan-She"] = { "" },
["Sanming-She"] = { "" },
["Shunchang-She"] = { "" },
["Hua'an-She"] = { "" },
["Zhangping-She"] = { "" },
["Guixi-She"] = { "" },
["Yanshan-She"] = { "" },
["Wuning-She"] = { "" },
["Cangnan-She"] = { "" },
["Jingning-She"] = { "" },
["Jingning-ZK-She"] = { "" },
["Lishui-She"] = { "" },
["Longyou-She"] = { "" },
["Lin'an-She"] = { "" },
["Jiande-She"] = { "" },
["Jinhua-She"] = { "" },
["Ningguo-She"] = { "" },
["Chaozhou-She"] = { "" },
["Fengshun-She"] = { "" },
["Guzhang-WX"] = { "" },
["Yuanling-WX"] = { "" },
["Luxi-WX"] = { "" },
["Luxi-WX-LJT"] = { "" },
["Luxi-WX-LJT-2"] = { "" },
["Chengbu-WX"] = { "" },
["Jiande-JXYM"] = { "" },
["Jinhua-JXYM"] = { "" },
["Lanxi-JXYM"] = { "" },
["Tunxi-JXYM"] = { "" },
["Jiangyong"] = { "" },
["Dong'an"] = { "" },
["Qujiang-DC"] = { "" },
["Wujiang-XY"] = { "" },
["Zhenjiang-SB"] = { "" },
["Renhua-ZT"] = { "" },
["Renhua-ST"] = { "" },
["Ruyuan-GT"] = { "" },
["Lechang-CL"] = { "" },
["Lechang-BX"] = { "" },
["Lechang-HP"] = { "" },
["Lechang-GT"] = { "" },
["Lechang-SX"] = { "" },
["Lianzhou-XZ"] = { "" },
["Lianzhou-BA"] = { "" },
["Lianzhou-YC"] = { "" },
["Lianzhou-XA"] = { "" },
["Lianzhou-FY"] = { "" },
}
return export
1f6zshr590t97wsf8j0d7hxe2s4o7e4
keisū
0
3437753
9758143
2026-05-13T03:21:00Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|Keisu}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|けいすう}}」的新頁面
9758143
wikitext
text/x-wiki
{{also|Keisu}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|けいすう}}
sn261jhricl786hhv90qaysc0fswn6w
alternative fuel
0
3437754
9758145
2026-05-13T03:27:57Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==英語== {{swp|en:}} ===名詞=== {{en-noun}} # [[替代燃料]] {{C|en|液體}}」的新頁面
9758145
wikitext
text/x-wiki
==英語==
{{swp|en:}}
===名詞===
{{en-noun}}
# [[替代燃料]]
{{C|en|液體}}
1sj7apgngu332bsva1f3nogpv2caitn
jùnzhè
0
3437755
9758146
2026-05-13T03:39:48Z
Hiyuune
119685
[[w:WP:AES|←]]建立內容為「==官話== ===羅馬化=== {{cmn-pinyin}} # {{cmn-pinyin of|濬哲}}」的新頁面
9758146
wikitext
text/x-wiki
==官話==
===羅馬化===
{{cmn-pinyin}}
# {{cmn-pinyin of|濬哲}}
f0sqoq9hogmj3yu38vusq7vv7xk7jms
мудр
0
3437756
9758148
2026-05-13T04:12:51Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==俄語== ===發音=== * {{ru-IPA}} ===詞源1=== ====形容詞==== {{head|ru|形容詞變格形|head=мудр}} # {{inflection of|ru|му́дрый||short|m|s}} ===詞源2=== ====名詞==== {{head|ru|名詞變格形|g=f-in-p}} # {{inflection of|ru|мудра́||gen|p}}」的新頁面
9758148
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA}}
===詞源1===
====形容詞====
{{head|ru|形容詞變格形|head=мудр}}
# {{inflection of|ru|му́дрый||short|m|s}}
===詞源2===
====名詞====
{{head|ru|名詞變格形|g=f-in-p}}
# {{inflection of|ru|мудра́||gen|p}}
801fc9kp5k9123e56580wzwcbc4bhxg
мудро
0
3437757
9758149
2026-05-13T04:13:11Z
Sayonzei
40728
增加俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758149
wikitext
text/x-wiki
==馬其頓語==
===發音===
* {{mk-IPA}}
===副詞===
{{mk-adv}}
# [[英明]]地;[[智慧]]地
==俄語==
===詞源===
源自 {{af|ru|му́дрый|-о}}。
===發音===
* {{ru-IPA|му́дро}}
===副詞===
{{ru-adv|му́дро|мудре́е}}
# [[英明]]地;[[智慧]]地
===形容詞===
{{head|ru|形容詞變格形|head=му́дро}}
# {{inflection of|ru|му́дрый||short|n|s}}
==烏克蘭語==
===詞源===
源自 {{af|uk|му́дрий|-о}}。
===發音===
* {{uk-IPA|му́дро}}
===副詞===
{{uk-adv|му́дро|мудрі́ший}}
# [[英明]]地;[[智慧]]地
d24pelkuxgcgx1a7bfs3e1s394l5vzx
мудры
0
3437758
9758150
2026-05-13T04:13:25Z
Sayonzei
40728
增加俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758150
wikitext
text/x-wiki
==白俄羅斯語==
===詞源===
{{inh+|be|orv|мудръ}},{{inh+|be|sla-pro|*mǫdrъ}}。
===發音===
* {{be-IPA|му́дры}}
* {{audio|be|Be-мудры.ogg}}
===形容詞===
{{be-adj|му́дры}}
# [[英明]]的;[[智慧]]的
#: {{ant|be|дурны́}}
====變格====
{{be-adecl|му́дры}}
====派生詞彙====
* {{l|be|мудрава́ць}}
* {{l|be|мудраге́ліць}}
* {{l|be|му́драсць}}
===參考資料===
* {{R:be:slounik.org}}
==俄語==
===詞源1===
====發音====
* {{ru-IPA|мудры́|ann=y}}
* {{ru-IPA|му́дры|ann=y}}
====形容詞====
{{head|ru|形容詞變格形|head=мудры́|head2=му́дры}}
# {{inflection of|ru|му́дрый||short|p}}
===詞源2===
====發音====
* {{ru-IPA|мудры́}}
====名詞====
{{head|ru|名詞變格形|head=мудры́|g=f-in|g2=f-in-p}}
# {{inflection of|ru|мудра́||gen|s|;|nom//acc|p}}
7vu3ck9oq5cgq7qq42pxtyb7h8fx971
мудра
0
3437759
9758151
2026-05-13T04:14:18Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|мудря}} ==俄語== ===發音=== * {{ru-IPA|мудра́}} ===詞源1=== ====名詞==== {{ru-noun+|мудра́}} # {{lb|ru|佛教|印度教}} [[手印]] =====變格===== {{ru-noun-table|мудра́}} ===詞源2=== ====形容詞==== {{head|ru|形容詞變格形|head=мудра́}} # {{inflection of|ru|му́дрый||short|f|s|gloss=英明的;智慧的}} ==塞爾維亞-克羅地亞語== ===名詞=== {{sh-noun||f}} #…」的新頁面
9758151
wikitext
text/x-wiki
{{also|мудря}}
==俄語==
===發音===
* {{ru-IPA|мудра́}}
===詞源1===
====名詞====
{{ru-noun+|мудра́}}
# {{lb|ru|佛教|印度教}} [[手印]]
=====變格=====
{{ru-noun-table|мудра́}}
===詞源2===
====形容詞====
{{head|ru|形容詞變格形|head=мудра́}}
# {{inflection of|ru|му́дрый||short|f|s|gloss=英明的;智慧的}}
==塞爾維亞-克羅地亞語==
===名詞===
{{sh-noun||f}}
# {{lb|sh|佛教|印度教}} [[手印]]
k30sa5wcvevpj79e3ffyo5e08x8u4zs
мудрая
0
3437760
9758152
2026-05-13T04:14:37Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==俄語== ===發音=== * {{ru-IPA|му́драя}} ===形容詞=== {{head|ru|形容詞變格形|head=му́драя}} # {{inflection of|ru|му́дрый||nom|f|s}}」的新頁面
9758152
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́драя}}
===形容詞===
{{head|ru|形容詞變格形|head=му́драя}}
# {{inflection of|ru|му́дрый||nom|f|s}}
dowhkruyloxkwm6kqhpw9prb7q5cc11
мудрую
0
3437761
9758153
2026-05-13T04:14:57Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758153
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́друю}}
===形容詞===
{{head|ru|形容詞變格形|head=му́друю}}
# {{infl of|ru|му́дрый||acc|f|s}}
1zwfww3rihfqf5ln7cd6t9xecxag90a
мудрой
0
3437762
9758154
2026-05-13T04:15:33Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758154
wikitext
text/x-wiki
==俄語==
===詞源1===
====發音====
* {{ru-IPA|мудро́й}}
====名詞====
{{head|ru|名詞變格形|head=мудро́й|g=f-in}}
# {{inflection of|ru|мудра́||ins|s}}
===詞源2===
====發音====
* {{ru-IPA|му́дрой}}
====形容詞====
{{head|ru|形容詞變格形|head=му́дрой}}
# {{infl of|ru|му́дрый||gen//dat//ins//pre|f|s}}
rtlhn6jwbctpra19fzk6gv1zowax7rh
мудрою
0
3437763
9758155
2026-05-13T04:15:57Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758155
wikitext
text/x-wiki
==俄語==
===詞源1===
====發音====
* {{ru-IPA|мудро́ю}}
====名詞====
{{head|ru|名詞變格形|head=мудро́ю|g=f-in}}
# {{inflection of|ru|мудра́||ins|s}}
===詞源2===
====發音====
* {{ru-IPA|му́дрою}}
====形容詞====
{{head|ru|形容詞變格形|head=му́дрою}}
# {{infl of|ru|му́дрый||ins|f|s}}
loz0dnnpwpvak8e08a9hhw34ngvtdg8
мудрым
0
3437764
9758156
2026-05-13T04:24:51Z
Sayonzei
40728
增加俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758156
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́дрым}}
===形容詞===
{{head|ru|形容詞變格形|head=му́дрым}}
# {{infl of|ru|му́дрый||dat|p|;|ins|m//n|s}}
1pxvby5w14v5e177bnvthrxl3atrmbp
мудром
0
3437765
9758157
2026-05-13T04:24:55Z
Sayonzei
40728
增加俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758157
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́дром}}
===形容詞===
{{head|ru|形容詞變格形|head=му́дром}}
# {{infl of|ru|му́дрый||pre|m//n|s}}
diu9b6r5vwmc6sgjksl7vevazwdrdb0
мудрому
0
3437766
9758158
2026-05-13T04:25:03Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758158
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́дрому}}
===形容詞===
{{head|ru|形容詞變格形|head=му́дрому}}
# {{infl of|ru|му́дрый||dat|m//n|s}}
0uu2nazlkqcrwb8n6y8qgrq4fb9igxy
мудрого
0
3437767
9758159
2026-05-13T04:25:09Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758159
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́дрого}}
===形容詞===
{{head|ru|形容詞變格形|head=му́дрого|tr=múdrovo}}
# {{infl of|ru|му́дрый||gen|m//n|s|;|an|acc|m|s}}
dyzttv6pbujvx845ff57ts7bid9j3vk
мудрое
0
3437768
9758160
2026-05-13T04:26:17Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758160
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́дрое}}
===形容詞===
{{head|ru|形容詞變格形|head=му́дрое}}
# {{infl of|ru|му́дрый||nom//acc|n|s}}
ddkftqa515rytyqa1ry6t8nr4csyf2l
мудрых
0
3437769
9758161
2026-05-13T04:27:20Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758161
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́дрых}}
===形容詞===
{{head|ru|形容詞變格形|head=му́дрых}}
# {{infl of|ru|му́дрый||gen//pre|p|;|an|acc|p}}
i8pv23ce1k5at6l4k10612g69ducjlq
мудрыми
0
3437770
9758162
2026-05-13T04:27:22Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758162
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́дрыми}}
===形容詞===
{{head|ru|形容詞變格形|head=му́дрыми}}
# {{infl of|ru|му́дрый||ins|p}}
t4e5e8ga6etd6srnn0864zj2cj29exi
мудрые
0
3437771
9758163
2026-05-13T04:27:23Z
Sayonzei
40728
創建俄語「[[мудрый]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758163
wikitext
text/x-wiki
==俄語==
===發音===
* {{ru-IPA|му́дрые}}
===形容詞===
{{head|ru|形容詞變格形|head=му́дрые}}
# {{infl of|ru|му́дрый||nom|p|;|in|acc|p}}
nlcqy8x85fju9rxi7nqwb9xm4gcte0m
ensanduichar
0
3437772
9758164
2026-05-13T04:50:23Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{af|pt|en-|sanduíche|-ar}} 或 {{af|pt|en-|sanduichar}}。 ===發音=== {{pt-IPA}} ===動詞=== {{pt-verb}} # {{lb|pt|及物|or|反身}} [[夾]]在[[中間]] #: {{syn|pt|sanduichar}} ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Michaelis}} * {{R:pt:Priberam}}」的新頁面
9758164
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|en-|sanduíche|-ar}} 或 {{af|pt|en-|sanduichar}}。
===發音===
{{pt-IPA}}
===動詞===
{{pt-verb}}
# {{lb|pt|及物|or|反身}} [[夾]]在[[中間]]
#: {{syn|pt|sanduichar}}
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Michaelis}}
* {{R:pt:Priberam}}
n5zx6smxnc7ymbapxlurxk0465t89t5
sanduichar
0
3437773
9758165
2026-05-13T04:53:28Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{af|pt|sanduíche|-ar}}。 ===發音=== {{pt-IPA}} ===動詞=== {{pt-verb}} # {{syn of|pt|ensanduichar}} ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Michaelis}} * {{R:pt:Priberam}}」的新頁面
9758165
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|sanduíche|-ar}}。
===發音===
{{pt-IPA}}
===動詞===
{{pt-verb}}
# {{syn of|pt|ensanduichar}}
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Michaelis}}
* {{R:pt:Priberam}}
ss4k0pqezjsjedqsgu6nu5kd7qrcqok
engaiolar
0
3437774
9758166
2026-05-13T04:56:28Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{af|pt|en-|gaiola|-ar|t2=籠子}}。 ===發音=== {{pt-IPA}} * {{hyph|pt|en|gai|o|lar}} ===動詞=== {{pt-verb}} # {{lb|pt|及物}} 關進[[籠子]]裡 # {{lb|pt|及物|比喻}} [[關押]],[[監禁]] # {{lb|pt|reflexive}} [[獨居]];[[隱居]];把自己與外界[[隔離]] ====變位==== {{pt-conj}} ====派生詞彙==== * {{l|pt|desengaiolar}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Prib…」的新頁面
9758166
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|en-|gaiola|-ar|t2=籠子}}。
===發音===
{{pt-IPA}}
* {{hyph|pt|en|gai|o|lar}}
===動詞===
{{pt-verb}}
# {{lb|pt|及物}} 關進[[籠子]]裡
# {{lb|pt|及物|比喻}} [[關押]],[[監禁]]
# {{lb|pt|reflexive}} [[獨居]];[[隱居]];把自己與外界[[隔離]]
====變位====
{{pt-conj}}
====派生詞彙====
* {{l|pt|desengaiolar}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
ah6vnea07aa8cpu1le0pgd8x35af6v1
engabelar
0
3437775
9758168
2026-05-13T04:58:29Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===其他形式=== * {{alt|pt|engambelar}} ===發音=== {{pt-IPA}} * {{hyph|pt|en|ga|be|lar}} ===動詞=== {{pt-verb}} # [[欺騙]],[[矇騙]] ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}}」的新頁面
9758168
wikitext
text/x-wiki
==葡萄牙語==
===其他形式===
* {{alt|pt|engambelar}}
===發音===
{{pt-IPA}}
* {{hyph|pt|en|ga|be|lar}}
===動詞===
{{pt-verb}}
# [[欺騙]],[[矇騙]]
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
ha34z4y6l6q1b0y3aj47y9onhu6de7w
engambelar
0
3437776
9758169
2026-05-13T04:58:39Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===發音=== {{pt-IPA}} * {{hyph|pt|en|gam|be|lar}} ===動詞=== {{pt-verb}} # {{alternative form of|pt|engabelar}} ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}}」的新頁面
9758169
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA}}
* {{hyph|pt|en|gam|be|lar}}
===動詞===
{{pt-verb}}
# {{alternative form of|pt|engabelar}}
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
k2mfqq9v9i5hbb69sf1azed8jd4mayl
galfinhar
0
3437777
9758170
2026-05-13T04:59:00Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== {{unc|pt}}。 ===發音=== {{pt-IPA}} * {{hyphenation|pt|gal|fi|nhar}} ===動詞=== {{pt-verb}} # {{alternative form of|pt|engalfinhar}} ====變位==== {{pt-conj}}」的新頁面
9758170
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
{{unc|pt}}。
===發音===
{{pt-IPA}}
* {{hyphenation|pt|gal|fi|nhar}}
===動詞===
{{pt-verb}}
# {{alternative form of|pt|engalfinhar}}
====變位====
{{pt-conj}}
1lmzxf9wr2bdwiqewsy8f53wjjd7gdu
engabela
0
3437778
9758172
2026-05-13T05:00:38Z
TongcyBot
83009
半自動導入非詞元形式
9758172
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelada
0
3437779
9758173
2026-05-13T05:00:38Z
TongcyBot
83009
半自動導入非詞元形式
9758173
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|engabelado}}
bf4zsbekqqpekdl177popufi16rbo97
engabeladas
0
3437780
9758174
2026-05-13T05:00:40Z
TongcyBot
83009
半自動導入非詞元形式
9758174
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|engabelado}}
84etezs699wets4iryuuoxztew033eg
engabelado
0
3437781
9758175
2026-05-13T05:00:41Z
TongcyBot
83009
半自動導入非詞元形式
9758175
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{pt-pp}}
# {{past participle of|pt|engabelar}}
a90shtziigrce46w674qsotg9eedtke
engabelados
0
3437782
9758176
2026-05-13T05:00:42Z
TongcyBot
83009
半自動導入非詞元形式
9758176
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|engabelado}}
15p2bp03cxk19vnxo2x15usnob5e9m5
engabelai
0
3437783
9758177
2026-05-13T05:00:44Z
TongcyBot
83009
半自動導入非詞元形式
9758177
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelais
0
3437784
9758178
2026-05-13T05:00:45Z
TongcyBot
83009
半自動導入非詞元形式
9758178
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelam
0
3437785
9758179
2026-05-13T05:00:46Z
TongcyBot
83009
半自動導入非詞元形式
9758179
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelamos
0
3437786
9758180
2026-05-13T05:00:47Z
TongcyBot
83009
半自動導入非詞元形式
9758180
wikitext
text/x-wiki
{{also|engabelámos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
g7bfk7t5i3myg4btkqdiz0o8ib340wx
engabelando
0
3437787
9758181
2026-05-13T05:00:48Z
TongcyBot
83009
半自動導入非詞元形式
9758181
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|engabelar}}
m8odv7s95bikfpus8jrh4cx651mq31i
engabelara
0
3437788
9758182
2026-05-13T05:00:49Z
TongcyBot
83009
半自動導入非詞元形式
9758182
wikitext
text/x-wiki
{{also|engabelará}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
597wywwv9xocgx8lk5no5pirgwhv0s6
engabelaram
0
3437789
9758183
2026-05-13T05:00:50Z
TongcyBot
83009
半自動導入非詞元形式
9758183
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelaras
0
3437790
9758184
2026-05-13T05:00:52Z
TongcyBot
83009
半自動導入非詞元形式
9758184
wikitext
text/x-wiki
{{also|engabelarás}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
gasdnrimzdd6xrstgdhxmhq9n7alq3v
engabelardes
0
3437791
9758185
2026-05-13T05:00:53Z
TongcyBot
83009
半自動導入非詞元形式
9758185
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelarei
0
3437792
9758186
2026-05-13T05:00:54Z
TongcyBot
83009
半自動導入非詞元形式
9758186
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelareis
0
3437793
9758187
2026-05-13T05:00:55Z
TongcyBot
83009
半自動導入非詞元形式
9758187
wikitext
text/x-wiki
{{also|engabeláreis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
6a34i1hkaxslkmk4mjfilpcpj7i890p
engabelarem
0
3437794
9758188
2026-05-13T05:00:56Z
TongcyBot
83009
半自動導入非詞元形式
9758188
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelaremos
0
3437795
9758189
2026-05-13T05:00:58Z
TongcyBot
83009
半自動導入非詞元形式
9758189
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelares
0
3437796
9758190
2026-05-13T05:00:59Z
TongcyBot
83009
半自動導入非詞元形式
9758190
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelaria
0
3437797
9758191
2026-05-13T05:01:00Z
TongcyBot
83009
半自動導入非詞元形式
9758191
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelariam
0
3437798
9758192
2026-05-13T05:01:01Z
TongcyBot
83009
半自動導入非詞元形式
9758192
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelarias
0
3437799
9758193
2026-05-13T05:01:02Z
TongcyBot
83009
半自動導入非詞元形式
9758193
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelarmos
0
3437800
9758194
2026-05-13T05:01:04Z
TongcyBot
83009
半自動導入非詞元形式
9758194
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelará
0
3437801
9758195
2026-05-13T05:01:05Z
TongcyBot
83009
半自動導入非詞元形式
9758195
wikitext
text/x-wiki
{{also|engabelara}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
fvr5h7pbs28k09n9r5sc2kpvmond986
engabelarás
0
3437802
9758196
2026-05-13T05:01:06Z
TongcyBot
83009
半自動導入非詞元形式
9758196
wikitext
text/x-wiki
{{also|engabelaras}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
rlmydo0j4g9lv0tpl1c5yy6ef677hkb
engabelarão
0
3437803
9758197
2026-05-13T05:01:07Z
TongcyBot
83009
半自動導入非詞元形式
9758197
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelaríamos
0
3437804
9758198
2026-05-13T05:01:08Z
TongcyBot
83009
半自動導入非詞元形式
9758198
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelaríeis
0
3437805
9758199
2026-05-13T05:01:09Z
TongcyBot
83009
半自動導入非詞元形式
9758199
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelas
0
3437806
9758200
2026-05-13T05:01:10Z
TongcyBot
83009
半自動導入非詞元形式
9758200
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelasse
0
3437807
9758201
2026-05-13T05:01:12Z
TongcyBot
83009
半自動導入非詞元形式
9758201
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelassem
0
3437808
9758202
2026-05-13T05:01:13Z
TongcyBot
83009
半自動導入非詞元形式
9758202
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelasses
0
3437809
9758203
2026-05-13T05:01:14Z
TongcyBot
83009
半自動導入非詞元形式
9758203
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelaste
0
3437810
9758204
2026-05-13T05:01:15Z
TongcyBot
83009
半自動導入非詞元形式
9758204
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelastes
0
3437811
9758205
2026-05-13T05:01:16Z
TongcyBot
83009
半自動導入非詞元形式
9758205
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelava
0
3437812
9758206
2026-05-13T05:01:17Z
TongcyBot
83009
半自動導入非詞元形式
9758206
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelavam
0
3437813
9758207
2026-05-13T05:01:18Z
TongcyBot
83009
半自動導入非詞元形式
9758207
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelavas
0
3437814
9758208
2026-05-13T05:01:19Z
TongcyBot
83009
半自動導入非詞元形式
9758208
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabele
0
3437815
9758209
2026-05-13T05:01:21Z
TongcyBot
83009
半自動導入非詞元形式
9758209
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelei
0
3437816
9758210
2026-05-13T05:01:22Z
TongcyBot
83009
半自動導入非詞元形式
9758210
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabeleis
0
3437817
9758211
2026-05-13T05:01:23Z
TongcyBot
83009
半自動導入非詞元形式
9758211
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelem
0
3437818
9758212
2026-05-13T05:01:25Z
TongcyBot
83009
半自動導入非詞元形式
9758212
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelemos
0
3437819
9758213
2026-05-13T05:01:26Z
TongcyBot
83009
半自動導入非詞元形式
9758213
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabeles
0
3437820
9758214
2026-05-13T05:01:27Z
TongcyBot
83009
半自動導入非詞元形式
9758214
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelo
0
3437821
9758215
2026-05-13T05:01:28Z
TongcyBot
83009
半自動導入非詞元形式
9758215
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelou
0
3437822
9758216
2026-05-13T05:01:29Z
TongcyBot
83009
半自動導入非詞元形式
9758216
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelámos
0
3437823
9758217
2026-05-13T05:01:30Z
TongcyBot
83009
半自動導入非詞元形式
9758217
wikitext
text/x-wiki
{{also|engabelamos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
pbek6pmuhxpwzwefwrp6w9z0dv1lj67
engabeláramos
0
3437824
9758218
2026-05-13T05:01:31Z
TongcyBot
83009
半自動導入非詞元形式
9758218
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabeláreis
0
3437825
9758219
2026-05-13T05:01:32Z
TongcyBot
83009
半自動導入非詞元形式
9758219
wikitext
text/x-wiki
{{also|engabelareis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
m3s753z04o1w58dvsq9k5bvutweoavy
engabelásseis
0
3437826
9758220
2026-05-13T05:01:33Z
TongcyBot
83009
半自動導入非詞元形式
9758220
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelássemos
0
3437827
9758221
2026-05-13T05:01:34Z
TongcyBot
83009
半自動導入非詞元形式
9758221
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabelávamos
0
3437828
9758222
2026-05-13T05:01:36Z
TongcyBot
83009
半自動導入非詞元形式
9758222
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engabeláveis
0
3437829
9758223
2026-05-13T05:01:37Z
TongcyBot
83009
半自動導入非詞元形式
9758223
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engabelar}}
dsqb7gkne50f3se33jzr6135ry71p1u
engaiola
0
3437830
9758224
2026-05-13T05:01:38Z
TongcyBot
83009
半自動導入非詞元形式
9758224
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolada
0
3437831
9758225
2026-05-13T05:01:39Z
TongcyBot
83009
半自動導入非詞元形式
9758225
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|engaiolado}}
nxjph2b1lu25acqezxwrhjeuxdfexbl
engaioladas
0
3437832
9758226
2026-05-13T05:01:40Z
TongcyBot
83009
半自動導入非詞元形式
9758226
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|engaiolado}}
rv5jqtxqr57vmxfzih35pz5hcx4aaa7
engaiolado
0
3437833
9758227
2026-05-13T05:01:41Z
TongcyBot
83009
半自動導入非詞元形式
9758227
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{pt-pp}}
# {{past participle of|pt|engaiolar}}
rqoefkg58qny9uxmcysmlnr8ttttamb
engaiolados
0
3437834
9758228
2026-05-13T05:01:42Z
TongcyBot
83009
半自動導入非詞元形式
9758228
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|engaiolado}}
ky4juyzacdu8ck74yr4qbg5mnxrcxk2
engaiolai
0
3437835
9758229
2026-05-13T05:01:44Z
TongcyBot
83009
半自動導入非詞元形式
9758229
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolais
0
3437836
9758230
2026-05-13T05:01:45Z
TongcyBot
83009
半自動導入非詞元形式
9758230
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolam
0
3437837
9758231
2026-05-13T05:01:46Z
TongcyBot
83009
半自動導入非詞元形式
9758231
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolamos
0
3437838
9758232
2026-05-13T05:01:48Z
TongcyBot
83009
半自動導入非詞元形式
9758232
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolando
0
3437839
9758233
2026-05-13T05:01:49Z
TongcyBot
83009
半自動導入非詞元形式
9758233
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|engaiolar}}
fu685nouxyo03d28nzer4qix34a20x8
engaiolara
0
3437840
9758234
2026-05-13T05:01:50Z
TongcyBot
83009
半自動導入非詞元形式
9758234
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolaram
0
3437841
9758235
2026-05-13T05:01:51Z
TongcyBot
83009
半自動導入非詞元形式
9758235
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolaras
0
3437842
9758236
2026-05-13T05:01:52Z
TongcyBot
83009
半自動導入非詞元形式
9758236
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolardes
0
3437843
9758237
2026-05-13T05:01:53Z
TongcyBot
83009
半自動導入非詞元形式
9758237
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolarei
0
3437844
9758238
2026-05-13T05:01:54Z
TongcyBot
83009
半自動導入非詞元形式
9758238
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolareis
0
3437845
9758239
2026-05-13T05:01:55Z
TongcyBot
83009
半自動導入非詞元形式
9758239
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolarem
0
3437846
9758240
2026-05-13T05:01:57Z
TongcyBot
83009
半自動導入非詞元形式
9758240
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolaremos
0
3437847
9758241
2026-05-13T05:01:58Z
TongcyBot
83009
半自動導入非詞元形式
9758241
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolares
0
3437848
9758242
2026-05-13T05:01:59Z
TongcyBot
83009
半自動導入非詞元形式
9758242
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolaria
0
3437849
9758243
2026-05-13T05:02:00Z
TongcyBot
83009
半自動導入非詞元形式
9758243
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolariam
0
3437850
9758244
2026-05-13T05:02:01Z
TongcyBot
83009
半自動導入非詞元形式
9758244
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolarias
0
3437851
9758245
2026-05-13T05:02:02Z
TongcyBot
83009
半自動導入非詞元形式
9758245
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolarmos
0
3437852
9758246
2026-05-13T05:02:03Z
TongcyBot
83009
半自動導入非詞元形式
9758246
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolará
0
3437853
9758247
2026-05-13T05:02:04Z
TongcyBot
83009
半自動導入非詞元形式
9758247
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolarás
0
3437854
9758248
2026-05-13T05:02:06Z
TongcyBot
83009
半自動導入非詞元形式
9758248
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolarão
0
3437855
9758249
2026-05-13T05:02:07Z
TongcyBot
83009
半自動導入非詞元形式
9758249
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolaríamos
0
3437856
9758250
2026-05-13T05:02:08Z
TongcyBot
83009
半自動導入非詞元形式
9758250
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolaríeis
0
3437857
9758251
2026-05-13T05:02:09Z
TongcyBot
83009
半自動導入非詞元形式
9758251
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolas
0
3437858
9758252
2026-05-13T05:02:10Z
TongcyBot
83009
半自動導入非詞元形式
9758252
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolasse
0
3437859
9758253
2026-05-13T05:02:11Z
TongcyBot
83009
半自動導入非詞元形式
9758253
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolassem
0
3437860
9758254
2026-05-13T05:02:12Z
TongcyBot
83009
半自動導入非詞元形式
9758254
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolasses
0
3437861
9758255
2026-05-13T05:02:14Z
TongcyBot
83009
半自動導入非詞元形式
9758255
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolaste
0
3437862
9758256
2026-05-13T05:02:15Z
TongcyBot
83009
半自動導入非詞元形式
9758256
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolastes
0
3437863
9758257
2026-05-13T05:02:16Z
TongcyBot
83009
半自動導入非詞元形式
9758257
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolava
0
3437864
9758258
2026-05-13T05:02:17Z
TongcyBot
83009
半自動導入非詞元形式
9758258
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolavam
0
3437865
9758259
2026-05-13T05:02:18Z
TongcyBot
83009
半自動導入非詞元形式
9758259
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolavas
0
3437866
9758260
2026-05-13T05:02:19Z
TongcyBot
83009
半自動導入非詞元形式
9758260
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiole
0
3437867
9758261
2026-05-13T05:02:20Z
TongcyBot
83009
半自動導入非詞元形式
9758261
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolei
0
3437868
9758262
2026-05-13T05:02:21Z
TongcyBot
83009
半自動導入非詞元形式
9758262
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaioleis
0
3437869
9758263
2026-05-13T05:02:23Z
TongcyBot
83009
半自動導入非詞元形式
9758263
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolem
0
3437870
9758264
2026-05-13T05:02:24Z
TongcyBot
83009
半自動導入非詞元形式
9758264
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolemos
0
3437871
9758265
2026-05-13T05:02:25Z
TongcyBot
83009
半自動導入非詞元形式
9758265
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaioles
0
3437872
9758266
2026-05-13T05:02:26Z
TongcyBot
83009
半自動導入非詞元形式
9758266
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolo
0
3437873
9758267
2026-05-13T05:02:27Z
TongcyBot
83009
半自動導入非詞元形式
9758267
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolou
0
3437874
9758268
2026-05-13T05:02:28Z
TongcyBot
83009
半自動導入非詞元形式
9758268
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolámos
0
3437875
9758269
2026-05-13T05:02:29Z
TongcyBot
83009
半自動導入非詞元形式
9758269
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaioláramos
0
3437876
9758270
2026-05-13T05:02:30Z
TongcyBot
83009
半自動導入非詞元形式
9758270
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaioláreis
0
3437877
9758271
2026-05-13T05:02:31Z
TongcyBot
83009
半自動導入非詞元形式
9758271
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolásseis
0
3437878
9758272
2026-05-13T05:02:33Z
TongcyBot
83009
半自動導入非詞元形式
9758272
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolássemos
0
3437879
9758273
2026-05-13T05:02:34Z
TongcyBot
83009
半自動導入非詞元形式
9758273
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaiolávamos
0
3437880
9758274
2026-05-13T05:02:35Z
TongcyBot
83009
半自動導入非詞元形式
9758274
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engaioláveis
0
3437881
9758275
2026-05-13T05:02:36Z
TongcyBot
83009
半自動導入非詞元形式
9758275
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engaiolar}}
a6s75requk9bbfqazrvsexqsyk7zurt
engambela
0
3437882
9758276
2026-05-13T05:02:37Z
TongcyBot
83009
半自動導入非詞元形式
9758276
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelada
0
3437883
9758277
2026-05-13T05:02:38Z
TongcyBot
83009
半自動導入非詞元形式
9758277
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|engambelado}}
it723qlgdj5dpyipfg3gsgqo8xcw8m3
engambeladas
0
3437884
9758278
2026-05-13T05:02:39Z
TongcyBot
83009
半自動導入非詞元形式
9758278
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|engambelado}}
5k00wy57wdoj45z0ahcf5f3p9uggf5w
engambelado
0
3437885
9758279
2026-05-13T05:02:41Z
TongcyBot
83009
半自動導入非詞元形式
9758279
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{pt-pp}}
# {{past participle of|pt|engambelar}}
or9fh56w78n4jgc5jhq7fezatg0ki2r
engambelados
0
3437886
9758280
2026-05-13T05:02:42Z
TongcyBot
83009
半自動導入非詞元形式
9758280
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|engambelado}}
rruepyq88pszyiyiffrm2om66by7fmx
engambelai
0
3437887
9758281
2026-05-13T05:02:43Z
TongcyBot
83009
半自動導入非詞元形式
9758281
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelais
0
3437888
9758282
2026-05-13T05:02:44Z
TongcyBot
83009
半自動導入非詞元形式
9758282
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelam
0
3437889
9758283
2026-05-13T05:02:45Z
TongcyBot
83009
半自動導入非詞元形式
9758283
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelamos
0
3437890
9758284
2026-05-13T05:02:46Z
TongcyBot
83009
半自動導入非詞元形式
9758284
wikitext
text/x-wiki
{{also|engambelámos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
7hevb2ywfteexamlqgymqc8cl8rrsmv
engambelando
0
3437891
9758285
2026-05-13T05:02:47Z
TongcyBot
83009
半自動導入非詞元形式
9758285
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|engambelar}}
pv81mx9tiayrzfhfim6y2b4ovvehtae
engambelara
0
3437892
9758286
2026-05-13T05:02:49Z
TongcyBot
83009
半自動導入非詞元形式
9758286
wikitext
text/x-wiki
{{also|engambelará}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
gfjopx8igvea3qym1uxwbzhg23upaiz
engambelaram
0
3437893
9758287
2026-05-13T05:02:50Z
TongcyBot
83009
半自動導入非詞元形式
9758287
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelaras
0
3437894
9758288
2026-05-13T05:02:51Z
TongcyBot
83009
半自動導入非詞元形式
9758288
wikitext
text/x-wiki
{{also|engambelarás}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
bdqdfblnayhjxmk5cclu7hxpwydxn24
engambelardes
0
3437895
9758289
2026-05-13T05:02:52Z
TongcyBot
83009
半自動導入非詞元形式
9758289
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelarei
0
3437896
9758290
2026-05-13T05:02:53Z
TongcyBot
83009
半自動導入非詞元形式
9758290
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelareis
0
3437897
9758291
2026-05-13T05:02:54Z
TongcyBot
83009
半自動導入非詞元形式
9758291
wikitext
text/x-wiki
{{also|engambeláreis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
3so9z93xvbp1k51w0tev621jti07hlf
engambelarem
0
3437898
9758292
2026-05-13T05:02:55Z
TongcyBot
83009
半自動導入非詞元形式
9758292
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelaremos
0
3437899
9758293
2026-05-13T05:02:57Z
TongcyBot
83009
半自動導入非詞元形式
9758293
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelares
0
3437900
9758294
2026-05-13T05:02:58Z
TongcyBot
83009
半自動導入非詞元形式
9758294
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelaria
0
3437901
9758295
2026-05-13T05:02:59Z
TongcyBot
83009
半自動導入非詞元形式
9758295
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelariam
0
3437902
9758296
2026-05-13T05:03:00Z
TongcyBot
83009
半自動導入非詞元形式
9758296
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelarias
0
3437903
9758297
2026-05-13T05:03:01Z
TongcyBot
83009
半自動導入非詞元形式
9758297
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelarmos
0
3437904
9758298
2026-05-13T05:03:02Z
TongcyBot
83009
半自動導入非詞元形式
9758298
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelará
0
3437905
9758299
2026-05-13T05:03:04Z
TongcyBot
83009
半自動導入非詞元形式
9758299
wikitext
text/x-wiki
{{also|engambelara}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
qwwjqw8jc63jku93mbygdekw3scs7xd
engambelarás
0
3437906
9758300
2026-05-13T05:03:05Z
TongcyBot
83009
半自動導入非詞元形式
9758300
wikitext
text/x-wiki
{{also|engambelaras}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
tos715mmwd1lv7td18qk5gsw00t44q4
engambelarão
0
3437907
9758301
2026-05-13T05:03:06Z
TongcyBot
83009
半自動導入非詞元形式
9758301
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelaríamos
0
3437908
9758302
2026-05-13T05:03:07Z
TongcyBot
83009
半自動導入非詞元形式
9758302
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelaríeis
0
3437909
9758303
2026-05-13T05:03:08Z
TongcyBot
83009
半自動導入非詞元形式
9758303
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelas
0
3437910
9758304
2026-05-13T05:03:09Z
TongcyBot
83009
半自動導入非詞元形式
9758304
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelasse
0
3437911
9758305
2026-05-13T05:03:10Z
TongcyBot
83009
半自動導入非詞元形式
9758305
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelassem
0
3437912
9758306
2026-05-13T05:03:11Z
TongcyBot
83009
半自動導入非詞元形式
9758306
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelasses
0
3437913
9758307
2026-05-13T05:03:12Z
TongcyBot
83009
半自動導入非詞元形式
9758307
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelaste
0
3437914
9758308
2026-05-13T05:03:13Z
TongcyBot
83009
半自動導入非詞元形式
9758308
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelastes
0
3437915
9758309
2026-05-13T05:03:15Z
TongcyBot
83009
半自動導入非詞元形式
9758309
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelava
0
3437916
9758310
2026-05-13T05:03:16Z
TongcyBot
83009
半自動導入非詞元形式
9758310
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelavam
0
3437917
9758311
2026-05-13T05:03:17Z
TongcyBot
83009
半自動導入非詞元形式
9758311
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelavas
0
3437918
9758312
2026-05-13T05:03:18Z
TongcyBot
83009
半自動導入非詞元形式
9758312
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambele
0
3437919
9758313
2026-05-13T05:03:19Z
TongcyBot
83009
半自動導入非詞元形式
9758313
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelei
0
3437920
9758314
2026-05-13T05:03:20Z
TongcyBot
83009
半自動導入非詞元形式
9758314
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambeleis
0
3437921
9758315
2026-05-13T05:03:22Z
TongcyBot
83009
半自動導入非詞元形式
9758315
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelem
0
3437922
9758316
2026-05-13T05:03:23Z
TongcyBot
83009
半自動導入非詞元形式
9758316
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelemos
0
3437923
9758317
2026-05-13T05:03:24Z
TongcyBot
83009
半自動導入非詞元形式
9758317
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambeles
0
3437924
9758318
2026-05-13T05:03:25Z
TongcyBot
83009
半自動導入非詞元形式
9758318
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelo
0
3437925
9758319
2026-05-13T05:03:26Z
TongcyBot
83009
半自動導入非詞元形式
9758319
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelou
0
3437926
9758320
2026-05-13T05:03:27Z
TongcyBot
83009
半自動導入非詞元形式
9758320
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelámos
0
3437927
9758321
2026-05-13T05:03:28Z
TongcyBot
83009
半自動導入非詞元形式
9758321
wikitext
text/x-wiki
{{also|engambelamos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
3onuph1atjiuz2wsunle3e19ss1mq3z
engambeláramos
0
3437928
9758322
2026-05-13T05:03:29Z
TongcyBot
83009
半自動導入非詞元形式
9758322
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambeláreis
0
3437929
9758323
2026-05-13T05:03:30Z
TongcyBot
83009
半自動導入非詞元形式
9758323
wikitext
text/x-wiki
{{also|engambelareis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
mqvo8nnnof6rpltf9yf9mwy5lgfgr9u
engambelásseis
0
3437930
9758324
2026-05-13T05:03:32Z
TongcyBot
83009
半自動導入非詞元形式
9758324
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelássemos
0
3437931
9758325
2026-05-13T05:03:33Z
TongcyBot
83009
半自動導入非詞元形式
9758325
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambelávamos
0
3437932
9758326
2026-05-13T05:03:34Z
TongcyBot
83009
半自動導入非詞元形式
9758326
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
engambeláveis
0
3437933
9758327
2026-05-13T05:03:35Z
TongcyBot
83009
半自動導入非詞元形式
9758327
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engambelar}}
83h04vh4vx7bcpzqbnh65h9uke9om1j
ensanduicha
0
3437934
9758328
2026-05-13T05:03:36Z
TongcyBot
83009
半自動導入非詞元形式
9758328
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichada
0
3437935
9758329
2026-05-13T05:03:37Z
TongcyBot
83009
半自動導入非詞元形式
9758329
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|ensanduichado}}
7tyrwzrjklrv0u38wbo2t1g1l4ulwll
ensanduichadas
0
3437936
9758330
2026-05-13T05:03:38Z
TongcyBot
83009
半自動導入非詞元形式
9758330
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|ensanduichado}}
f0g5p2vt1grqya7ubda5budytfbbemv
ensanduichado
0
3437937
9758331
2026-05-13T05:03:40Z
TongcyBot
83009
半自動導入非詞元形式
9758331
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|ensanduichar}}
mbhyjezwzwt2rju0r6f39xeicmj95i6
ensanduichados
0
3437938
9758332
2026-05-13T05:03:41Z
TongcyBot
83009
半自動導入非詞元形式
9758332
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|ensanduichado}}
l5xaseszcz2dpgez9ykob6b63yw4dim
ensanduichai
0
3437939
9758333
2026-05-13T05:03:42Z
TongcyBot
83009
半自動導入非詞元形式
9758333
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichais
0
3437940
9758334
2026-05-13T05:03:43Z
TongcyBot
83009
半自動導入非詞元形式
9758334
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicham
0
3437941
9758335
2026-05-13T05:03:44Z
TongcyBot
83009
半自動導入非詞元形式
9758335
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichamos
0
3437942
9758336
2026-05-13T05:03:45Z
TongcyBot
83009
半自動導入非詞元形式
9758336
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichando
0
3437943
9758337
2026-05-13T05:03:46Z
TongcyBot
83009
半自動導入非詞元形式
9758337
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|ensanduichar}}
dburuh0y2itf3eurbhxufuh1xpelg64
ensanduichara
0
3437944
9758338
2026-05-13T05:03:48Z
TongcyBot
83009
半自動導入非詞元形式
9758338
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharam
0
3437945
9758339
2026-05-13T05:03:49Z
TongcyBot
83009
半自動導入非詞元形式
9758339
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharas
0
3437946
9758340
2026-05-13T05:03:50Z
TongcyBot
83009
半自動導入非詞元形式
9758340
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichardes
0
3437947
9758341
2026-05-13T05:03:51Z
TongcyBot
83009
半自動導入非詞元形式
9758341
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharei
0
3437948
9758342
2026-05-13T05:03:52Z
TongcyBot
83009
半自動導入非詞元形式
9758342
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichareis
0
3437949
9758343
2026-05-13T05:03:53Z
TongcyBot
83009
半自動導入非詞元形式
9758343
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharem
0
3437950
9758344
2026-05-13T05:03:55Z
TongcyBot
83009
半自動導入非詞元形式
9758344
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharemos
0
3437951
9758345
2026-05-13T05:03:56Z
TongcyBot
83009
半自動導入非詞元形式
9758345
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichares
0
3437952
9758346
2026-05-13T05:03:57Z
TongcyBot
83009
半自動導入非詞元形式
9758346
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharia
0
3437953
9758347
2026-05-13T05:03:58Z
TongcyBot
83009
半自動導入非詞元形式
9758347
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichariam
0
3437954
9758348
2026-05-13T05:03:59Z
TongcyBot
83009
半自動導入非詞元形式
9758348
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharias
0
3437955
9758349
2026-05-13T05:04:00Z
TongcyBot
83009
半自動導入非詞元形式
9758349
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharmos
0
3437956
9758350
2026-05-13T05:04:01Z
TongcyBot
83009
半自動導入非詞元形式
9758350
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichará
0
3437957
9758351
2026-05-13T05:04:03Z
TongcyBot
83009
半自動導入非詞元形式
9758351
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharás
0
3437958
9758352
2026-05-13T05:04:04Z
TongcyBot
83009
半自動導入非詞元形式
9758352
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharão
0
3437959
9758353
2026-05-13T05:04:05Z
TongcyBot
83009
半自動導入非詞元形式
9758353
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharíamos
0
3437960
9758354
2026-05-13T05:04:06Z
TongcyBot
83009
半自動導入非詞元形式
9758354
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicharíeis
0
3437961
9758355
2026-05-13T05:04:07Z
TongcyBot
83009
半自動導入非詞元形式
9758355
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichas
0
3437962
9758356
2026-05-13T05:04:08Z
TongcyBot
83009
半自動導入非詞元形式
9758356
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichasse
0
3437963
9758357
2026-05-13T05:04:10Z
TongcyBot
83009
半自動導入非詞元形式
9758357
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichassem
0
3437964
9758358
2026-05-13T05:04:11Z
TongcyBot
83009
半自動導入非詞元形式
9758358
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichasses
0
3437965
9758359
2026-05-13T05:04:12Z
TongcyBot
83009
半自動導入非詞元形式
9758359
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichaste
0
3437966
9758360
2026-05-13T05:04:13Z
TongcyBot
83009
半自動導入非詞元形式
9758360
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichastes
0
3437967
9758361
2026-05-13T05:04:14Z
TongcyBot
83009
半自動導入非詞元形式
9758361
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichava
0
3437968
9758362
2026-05-13T05:04:15Z
TongcyBot
83009
半自動導入非詞元形式
9758362
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichavam
0
3437969
9758363
2026-05-13T05:04:17Z
TongcyBot
83009
半自動導入非詞元形式
9758363
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichavas
0
3437970
9758364
2026-05-13T05:04:18Z
TongcyBot
83009
半自動導入非詞元形式
9758364
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduiche
0
3437971
9758365
2026-05-13T05:04:20Z
TongcyBot
83009
半自動導入非詞元形式
9758365
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichei
0
3437972
9758366
2026-05-13T05:04:21Z
TongcyBot
83009
半自動導入非詞元形式
9758366
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicheis
0
3437973
9758367
2026-05-13T05:04:22Z
TongcyBot
83009
半自動導入非詞元形式
9758367
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichem
0
3437974
9758368
2026-05-13T05:04:23Z
TongcyBot
83009
半自動導入非詞元形式
9758368
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichemos
0
3437975
9758369
2026-05-13T05:04:24Z
TongcyBot
83009
半自動導入非詞元形式
9758369
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduiches
0
3437976
9758370
2026-05-13T05:04:25Z
TongcyBot
83009
半自動導入非詞元形式
9758370
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicho
0
3437977
9758371
2026-05-13T05:04:26Z
TongcyBot
83009
半自動導入非詞元形式
9758371
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichou
0
3437978
9758372
2026-05-13T05:04:28Z
TongcyBot
83009
半自動導入非詞元形式
9758372
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichámos
0
3437979
9758373
2026-05-13T05:04:29Z
TongcyBot
83009
半自動導入非詞元形式
9758373
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicháramos
0
3437980
9758374
2026-05-13T05:04:30Z
TongcyBot
83009
半自動導入非詞元形式
9758374
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicháreis
0
3437981
9758375
2026-05-13T05:04:31Z
TongcyBot
83009
半自動導入非詞元形式
9758375
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichásseis
0
3437982
9758376
2026-05-13T05:04:32Z
TongcyBot
83009
半自動導入非詞元形式
9758376
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichássemos
0
3437983
9758377
2026-05-13T05:04:33Z
TongcyBot
83009
半自動導入非詞元形式
9758377
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduichávamos
0
3437984
9758378
2026-05-13T05:04:34Z
TongcyBot
83009
半自動導入非詞元形式
9758378
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
ensanduicháveis
0
3437985
9758379
2026-05-13T05:04:35Z
TongcyBot
83009
半自動導入非詞元形式
9758379
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|ensanduichar}}
0eq5qs94finm82dnoplcnje328pljig
galfinha
0
3437986
9758380
2026-05-13T05:04:37Z
TongcyBot
83009
半自動導入非詞元形式
9758380
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhado
0
3437987
9758381
2026-05-13T05:04:38Z
TongcyBot
83009
半自動導入非詞元形式
9758381
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|galfinhar}}
1h6n1hi835ovdvui133q0q0wd7663r6
galfinhai
0
3437988
9758382
2026-05-13T05:04:39Z
TongcyBot
83009
半自動導入非詞元形式
9758382
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhais
0
3437989
9758383
2026-05-13T05:04:40Z
TongcyBot
83009
半自動導入非詞元形式
9758383
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinham
0
3437990
9758384
2026-05-13T05:04:42Z
TongcyBot
83009
半自動導入非詞元形式
9758384
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhamos
0
3437991
9758385
2026-05-13T05:04:43Z
TongcyBot
83009
半自動導入非詞元形式
9758385
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhando
0
3437992
9758386
2026-05-13T05:04:44Z
TongcyBot
83009
半自動導入非詞元形式
9758386
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|galfinhar}}
6hwgjb1vh62obv6k3voi6u3l9mo8oke
galfinhara
0
3437993
9758387
2026-05-13T05:04:45Z
TongcyBot
83009
半自動導入非詞元形式
9758387
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharam
0
3437994
9758388
2026-05-13T05:04:46Z
TongcyBot
83009
半自動導入非詞元形式
9758388
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharas
0
3437995
9758389
2026-05-13T05:04:47Z
TongcyBot
83009
半自動導入非詞元形式
9758389
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhardes
0
3437996
9758390
2026-05-13T05:04:48Z
TongcyBot
83009
半自動導入非詞元形式
9758390
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharei
0
3437997
9758391
2026-05-13T05:04:50Z
TongcyBot
83009
半自動導入非詞元形式
9758391
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhareis
0
3437998
9758392
2026-05-13T05:04:51Z
TongcyBot
83009
半自動導入非詞元形式
9758392
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharem
0
3437999
9758393
2026-05-13T05:04:52Z
TongcyBot
83009
半自動導入非詞元形式
9758393
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharemos
0
3438000
9758394
2026-05-13T05:04:53Z
TongcyBot
83009
半自動導入非詞元形式
9758394
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhares
0
3438001
9758395
2026-05-13T05:04:55Z
TongcyBot
83009
半自動導入非詞元形式
9758395
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharia
0
3438002
9758396
2026-05-13T05:04:56Z
TongcyBot
83009
半自動導入非詞元形式
9758396
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhariam
0
3438003
9758397
2026-05-13T05:04:57Z
TongcyBot
83009
半自動導入非詞元形式
9758397
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharias
0
3438004
9758398
2026-05-13T05:04:58Z
TongcyBot
83009
半自動導入非詞元形式
9758398
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharmos
0
3438005
9758399
2026-05-13T05:04:59Z
TongcyBot
83009
半自動導入非詞元形式
9758399
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhará
0
3438006
9758400
2026-05-13T05:05:00Z
TongcyBot
83009
半自動導入非詞元形式
9758400
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharás
0
3438007
9758401
2026-05-13T05:05:01Z
TongcyBot
83009
半自動導入非詞元形式
9758401
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharão
0
3438008
9758402
2026-05-13T05:05:02Z
TongcyBot
83009
半自動導入非詞元形式
9758402
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharíamos
0
3438009
9758403
2026-05-13T05:05:03Z
TongcyBot
83009
半自動導入非詞元形式
9758403
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinharíeis
0
3438010
9758404
2026-05-13T05:05:05Z
TongcyBot
83009
半自動導入非詞元形式
9758404
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhas
0
3438011
9758405
2026-05-13T05:05:06Z
TongcyBot
83009
半自動導入非詞元形式
9758405
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhasse
0
3438012
9758406
2026-05-13T05:05:08Z
TongcyBot
83009
半自動導入非詞元形式
9758406
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhassem
0
3438013
9758407
2026-05-13T05:05:09Z
TongcyBot
83009
半自動導入非詞元形式
9758407
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhasses
0
3438014
9758408
2026-05-13T05:05:10Z
TongcyBot
83009
半自動導入非詞元形式
9758408
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhaste
0
3438015
9758409
2026-05-13T05:05:12Z
TongcyBot
83009
半自動導入非詞元形式
9758409
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhastes
0
3438016
9758410
2026-05-13T05:05:13Z
TongcyBot
83009
半自動導入非詞元形式
9758410
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhava
0
3438017
9758411
2026-05-13T05:05:14Z
TongcyBot
83009
半自動導入非詞元形式
9758411
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhavam
0
3438018
9758412
2026-05-13T05:05:15Z
TongcyBot
83009
半自動導入非詞元形式
9758412
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhavas
0
3438019
9758413
2026-05-13T05:05:16Z
TongcyBot
83009
半自動導入非詞元形式
9758413
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhe
0
3438020
9758414
2026-05-13T05:05:17Z
TongcyBot
83009
半自動導入非詞元形式
9758414
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhei
0
3438021
9758415
2026-05-13T05:05:18Z
TongcyBot
83009
半自動導入非詞元形式
9758415
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinheis
0
3438022
9758416
2026-05-13T05:05:20Z
TongcyBot
83009
半自動導入非詞元形式
9758416
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhem
0
3438023
9758417
2026-05-13T05:05:21Z
TongcyBot
83009
半自動導入非詞元形式
9758417
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhemos
0
3438024
9758418
2026-05-13T05:05:22Z
TongcyBot
83009
半自動導入非詞元形式
9758418
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhes
0
3438025
9758419
2026-05-13T05:05:23Z
TongcyBot
83009
半自動導入非詞元形式
9758419
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinho
0
3438026
9758420
2026-05-13T05:05:25Z
TongcyBot
83009
半自動導入非詞元形式
9758420
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhou
0
3438027
9758421
2026-05-13T05:05:26Z
TongcyBot
83009
半自動導入非詞元形式
9758421
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhámos
0
3438028
9758422
2026-05-13T05:05:27Z
TongcyBot
83009
半自動導入非詞元形式
9758422
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinháramos
0
3438029
9758423
2026-05-13T05:05:28Z
TongcyBot
83009
半自動導入非詞元形式
9758423
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinháreis
0
3438030
9758424
2026-05-13T05:05:29Z
TongcyBot
83009
半自動導入非詞元形式
9758424
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhásseis
0
3438031
9758425
2026-05-13T05:05:30Z
TongcyBot
83009
半自動導入非詞元形式
9758425
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhássemos
0
3438032
9758426
2026-05-13T05:05:31Z
TongcyBot
83009
半自動導入非詞元形式
9758426
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinhávamos
0
3438033
9758427
2026-05-13T05:05:33Z
TongcyBot
83009
半自動導入非詞元形式
9758427
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
galfinháveis
0
3438034
9758428
2026-05-13T05:05:34Z
TongcyBot
83009
半自動導入非詞元形式
9758428
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|galfinhar}}
fl592ge1drnzykhkp6afjztq77wbswg
quémanda
0
3438035
9758429
2026-05-13T05:05:35Z
TongcyBot
83009
半自動導入非詞元形式
9758429
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandas|quémandât}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|s|phis}}
i1ur9ft5bmh484ce7nzftj89vrisp04
quémandai
0
3438036
9758430
2026-05-13T05:05:36Z
TongcyBot
83009
半自動導入非詞元形式
9758430
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandé|quémandée|quémandées|quémander|quémandés|quémandez}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|s|phis}}
3mpjv3newfdsvm55708zzvf83xcmqre
quémandaient
0
3438037
9758431
2026-05-13T05:05:37Z
TongcyBot
83009
半自動導入非詞元形式
9758431
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandais|quémandait}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|p|impf|indc}}
4wfmdormzznqt9ptq4uzpjdrrwwenze
quémandais
0
3438038
9758432
2026-05-13T05:05:38Z
TongcyBot
83009
半自動導入非詞元形式
9758432
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandaient|quémandait}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1//2|s|impf|indc}}
qv7jc6al5ycgedec8inaq93df4e2km6
quémandait
0
3438039
9758433
2026-05-13T05:05:39Z
TongcyBot
83009
半自動導入非詞元形式
9758433
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandaient|quémandais}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|s|impf|indc}}
7dnt41uggg7yh8dfdwfrk2nzfqgbbfr
quémandant
0
3438040
9758434
2026-05-13T05:05:41Z
TongcyBot
83009
半自動導入非詞元形式
9758434
wikitext
text/x-wiki
==法語==
===分詞===
{{head|fr|現在分詞}}
# {{present participle of|fr|quémander}}
mqzoko7hqk0pm8rrn7x4zzupgt5ap5z
quémandas
0
3438041
9758435
2026-05-13T05:05:42Z
TongcyBot
83009
半自動導入非詞元形式
9758435
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanda|quémandât}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|s|phis}}
rezgiz6a2nr79boc7orck8cuqicu7mu
quémandasse
0
3438042
9758436
2026-05-13T05:05:43Z
TongcyBot
83009
半自動導入非詞元形式
9758436
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandasses|quémandassent}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|s|impf|subj}}
h3xh3o7mlwhsnm6nuxkul53k8v14070
quémandassent
0
3438043
9758437
2026-05-13T05:05:44Z
TongcyBot
83009
半自動導入非詞元形式
9758437
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandasse|quémandasses}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|p|impf|subj}}
miugiks1jw10c6lh6ku1upn5o7peads
quémandasses
0
3438044
9758438
2026-05-13T05:05:45Z
TongcyBot
83009
半自動導入非詞元形式
9758438
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandasse|quémandassent}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|s|impf|subj}}
etskt93668pgzb43f6xg8eoxdkqrsn5
quémandassiez
0
3438045
9758439
2026-05-13T05:05:46Z
TongcyBot
83009
半自動導入非詞元形式
9758439
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|p|impf|subj}}
lurv2672w27nszpd8bo54918u08a6mh
quémandassions
0
3438046
9758440
2026-05-13T05:05:47Z
TongcyBot
83009
半自動導入非詞元形式
9758440
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|p|impf|subj}}
ngrm8qz4iewt9zis8zf9tr3fubo6hpo
quémande
0
3438047
9758441
2026-05-13T05:05:49Z
TongcyBot
83009
半自動導入非詞元形式
9758441
wikitext
text/x-wiki
{{also|quémandé}}
==法語==
===發音===
* {{audio|fr|LL-Q150 (fra)-Bananax47-quémande.wav|a=<<France>> (<<Agen>>)}}
* {{homophones|fr|quémandent|quémandes}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1//3|s|pres|ind//sub|;|2|s|impr}}
0osp1z6p2nnqrr288842h94ti5m7b1c
quémandent
0
3438048
9758442
2026-05-13T05:05:50Z
TongcyBot
83009
半自動導入非詞元形式
9758442
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémande|quémandes}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|p|pres|ind//sub}}
fwu1qah54loms2wp9avxchmb3jdlhb2
quémandera
0
3438049
9758443
2026-05-13T05:05:51Z
TongcyBot
83009
半自動導入非詞元形式
9758443
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|s|simple|futr}}
onueb1brdwrbqyxm9iyiv6tx58a0zxp
quémanderai
0
3438050
9758444
2026-05-13T05:05:52Z
TongcyBot
83009
半自動導入非詞元形式
9758444
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanderez}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|s|simple|futr}}
6iiyn8poehd7qa0fp68ad16uykrlci5
quémanderaient
0
3438051
9758445
2026-05-13T05:05:53Z
TongcyBot
83009
半自動導入非詞元形式
9758445
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanderais|quémanderait}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|p|cond}}
5org6dopxfllbcgtwwfbnec36kx61ji
quémanderais
0
3438052
9758446
2026-05-13T05:05:54Z
TongcyBot
83009
半自動導入非詞元形式
9758446
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanderaient|quémanderait}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1//2|s|cond}}
caq0o53l1vw6juo4omet72zs3gqtuic
quémanderait
0
3438053
9758447
2026-05-13T05:05:56Z
TongcyBot
83009
半自動導入非詞元形式
9758447
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanderaient|quémanderais}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|s|cond}}
qrpyiwcmnzw2osmxr9xtsgvw9350bzr
quémanderas
0
3438054
9758448
2026-05-13T05:05:57Z
TongcyBot
83009
半自動導入非詞元形式
9758448
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|s|simple|futr}}
iniwjt26nflo4roffgt436lpse63vry
quémanderez
0
3438055
9758449
2026-05-13T05:05:58Z
TongcyBot
83009
半自動導入非詞元形式
9758449
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanderai}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|p|simple|futr}}
mzhan8gvjk32rwe5exx8whe4tzto41i
quémanderiez
0
3438056
9758450
2026-05-13T05:06:00Z
TongcyBot
83009
半自動導入非詞元形式
9758450
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|p|cond}}
3z7sti8rmj6dxqkge842gy7ioie3n71
quémanderions
0
3438057
9758451
2026-05-13T05:06:00Z
TongcyBot
83009
半自動導入非詞元形式
9758451
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|p|cond}}
tv271w4g4e6vse0q6igwqgtq1qdxu4m
quémanderons
0
3438058
9758452
2026-05-13T05:06:02Z
TongcyBot
83009
半自動導入非詞元形式
9758452
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanderont}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|p|simple|futr}}
2gky4uv2b8mr4spvb31ql9jvwe4rysu
quémanderont
0
3438059
9758453
2026-05-13T05:06:03Z
TongcyBot
83009
半自動導入非詞元形式
9758453
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanderons}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|p|simple|futr}}
jq1hvqp48jy46mdxqjcy66sccgibtay
quémandes
0
3438060
9758454
2026-05-13T05:06:04Z
TongcyBot
83009
半自動導入非詞元形式
9758454
wikitext
text/x-wiki
{{also|quémandés}}
==法語==
===發音===
* {{homophones|fr|quémande|quémandent}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|s|pres|ind//sub}}
c4dr3i2gi5h5sa2isgt7vprwitp294m
quémandez
0
3438061
9758455
2026-05-13T05:06:05Z
TongcyBot
83009
半自動導入非詞元形式
9758455
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémandai|quémandé|quémandée|quémandées|quémander|quémandés}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|p|pres|indc|;|2|p|impr}}
13oq00vznjcelw1ln8c2r13tx0a4yl8
quémandiez
0
3438062
9758456
2026-05-13T05:06:06Z
TongcyBot
83009
半自動導入非詞元形式
9758456
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|p|impf|indc|;|2|p|pres|subj}}
i4l8jktdsbpeafba3idt6vdklmqy8sg
quémandions
0
3438063
9758457
2026-05-13T05:06:07Z
TongcyBot
83009
半自動導入非詞元形式
9758457
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|p|impf|indc|;|1|p|pres|subj}}
oznairfupvylj0o7m3kt0szblvhx2a7
quémandons
0
3438064
9758458
2026-05-13T05:06:08Z
TongcyBot
83009
半自動導入非詞元形式
9758458
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|p|pres|indc|;|1|p|impr}}
lpdkf9ahspv0y3is3420bjpekb5ghhq
quémandâmes
0
3438065
9758459
2026-05-13T05:06:10Z
TongcyBot
83009
半自動導入非詞元形式
9758459
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||1|p|phis}}
cbl8wpg9slgbaid0moy177ed75edtxq
quémandât
0
3438066
9758460
2026-05-13T05:06:11Z
TongcyBot
83009
半自動導入非詞元形式
9758460
wikitext
text/x-wiki
==法語==
===發音===
* {{homophones|fr|quémanda|quémandas}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|s|impf|subj}}
k6yt6fjj8qlwj65cr3biejohy9lvr6r
quémandâtes
0
3438067
9758461
2026-05-13T05:06:12Z
TongcyBot
83009
半自動導入非詞元形式
9758461
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||2|p|phis}}
87oynkz65pdwb8zifa5cd89xbiy8u4q
quémandèrent
0
3438068
9758462
2026-05-13T05:06:13Z
TongcyBot
83009
半自動導入非詞元形式
9758462
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|quémander||3|p|phis}}
1s0gboquz32g83gh5i6ryo5nz0ii3hj
sanduicha
0
3438069
9758463
2026-05-13T05:06:14Z
TongcyBot
83009
半自動導入非詞元形式
9758463
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichada
0
3438070
9758464
2026-05-13T05:06:15Z
TongcyBot
83009
半自動導入非詞元形式
9758464
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|sanduichado}}
6gpno4r3zlu5pvrnfdfhrlrytoxid0y
sanduichadas
0
3438071
9758465
2026-05-13T05:06:16Z
TongcyBot
83009
半自動導入非詞元形式
9758465
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|sanduichado}}
2494punzwyrccexiq9pn5qyo8gxavcj
sanduichado
0
3438072
9758466
2026-05-13T05:06:17Z
TongcyBot
83009
半自動導入非詞元形式
9758466
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|sanduichar}}
khxno2g0hncrq19iru6104k4ihqjgz2
sanduichados
0
3438073
9758467
2026-05-13T05:06:18Z
TongcyBot
83009
半自動導入非詞元形式
9758467
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|sanduichado}}
tsp3zrp4d6bxk0oojg85mu1i3tjlzi8
sanduichai
0
3438074
9758468
2026-05-13T05:06:19Z
TongcyBot
83009
半自動導入非詞元形式
9758468
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichais
0
3438075
9758469
2026-05-13T05:06:21Z
TongcyBot
83009
半自動導入非詞元形式
9758469
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicham
0
3438076
9758470
2026-05-13T05:06:22Z
TongcyBot
83009
半自動導入非詞元形式
9758470
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichamos
0
3438077
9758471
2026-05-13T05:06:23Z
TongcyBot
83009
半自動導入非詞元形式
9758471
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichando
0
3438078
9758472
2026-05-13T05:06:24Z
TongcyBot
83009
半自動導入非詞元形式
9758472
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|sanduichar}}
77j7nj7c0waovxo8etkjh42zd6k2jat
sanduichara
0
3438079
9758473
2026-05-13T05:06:25Z
TongcyBot
83009
半自動導入非詞元形式
9758473
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharam
0
3438080
9758474
2026-05-13T05:06:26Z
TongcyBot
83009
半自動導入非詞元形式
9758474
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharas
0
3438081
9758475
2026-05-13T05:06:27Z
TongcyBot
83009
半自動導入非詞元形式
9758475
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichardes
0
3438082
9758476
2026-05-13T05:06:29Z
TongcyBot
83009
半自動導入非詞元形式
9758476
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharei
0
3438083
9758477
2026-05-13T05:06:30Z
TongcyBot
83009
半自動導入非詞元形式
9758477
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichareis
0
3438084
9758478
2026-05-13T05:06:31Z
TongcyBot
83009
半自動導入非詞元形式
9758478
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharem
0
3438085
9758479
2026-05-13T05:06:32Z
TongcyBot
83009
半自動導入非詞元形式
9758479
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharemos
0
3438086
9758480
2026-05-13T05:06:33Z
TongcyBot
83009
半自動導入非詞元形式
9758480
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichares
0
3438087
9758481
2026-05-13T05:06:34Z
TongcyBot
83009
半自動導入非詞元形式
9758481
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharia
0
3438088
9758482
2026-05-13T05:06:36Z
TongcyBot
83009
半自動導入非詞元形式
9758482
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichariam
0
3438089
9758483
2026-05-13T05:06:37Z
TongcyBot
83009
半自動導入非詞元形式
9758483
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharias
0
3438090
9758484
2026-05-13T05:06:38Z
TongcyBot
83009
半自動導入非詞元形式
9758484
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharmos
0
3438091
9758485
2026-05-13T05:06:39Z
TongcyBot
83009
半自動導入非詞元形式
9758485
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichará
0
3438092
9758486
2026-05-13T05:06:40Z
TongcyBot
83009
半自動導入非詞元形式
9758486
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharás
0
3438093
9758487
2026-05-13T05:06:41Z
TongcyBot
83009
半自動導入非詞元形式
9758487
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharão
0
3438094
9758488
2026-05-13T05:06:42Z
TongcyBot
83009
半自動導入非詞元形式
9758488
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharíamos
0
3438095
9758489
2026-05-13T05:06:43Z
TongcyBot
83009
半自動導入非詞元形式
9758489
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicharíeis
0
3438096
9758490
2026-05-13T05:06:44Z
TongcyBot
83009
半自動導入非詞元形式
9758490
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichas
0
3438097
9758491
2026-05-13T05:06:46Z
TongcyBot
83009
半自動導入非詞元形式
9758491
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichasse
0
3438098
9758492
2026-05-13T05:06:47Z
TongcyBot
83009
半自動導入非詞元形式
9758492
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichassem
0
3438099
9758493
2026-05-13T05:06:48Z
TongcyBot
83009
半自動導入非詞元形式
9758493
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichasses
0
3438100
9758494
2026-05-13T05:06:50Z
TongcyBot
83009
半自動導入非詞元形式
9758494
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichaste
0
3438101
9758495
2026-05-13T05:06:51Z
TongcyBot
83009
半自動導入非詞元形式
9758495
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichastes
0
3438102
9758496
2026-05-13T05:06:52Z
TongcyBot
83009
半自動導入非詞元形式
9758496
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichava
0
3438103
9758497
2026-05-13T05:06:53Z
TongcyBot
83009
半自動導入非詞元形式
9758497
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichavam
0
3438104
9758498
2026-05-13T05:06:54Z
TongcyBot
83009
半自動導入非詞元形式
9758498
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichavas
0
3438105
9758499
2026-05-13T05:06:55Z
TongcyBot
83009
半自動導入非詞元形式
9758499
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduiche
0
3438106
9758500
2026-05-13T05:06:56Z
TongcyBot
83009
半自動導入非詞元形式
9758500
wikitext
text/x-wiki
{{also|sanduíche}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
kvkyg83wvmsg0wkf9o4b5ntkoq7zb9n
sanduichei
0
3438107
9758501
2026-05-13T05:06:57Z
TongcyBot
83009
半自動導入非詞元形式
9758501
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicheis
0
3438108
9758502
2026-05-13T05:06:59Z
TongcyBot
83009
半自動導入非詞元形式
9758502
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichem
0
3438109
9758503
2026-05-13T05:07:00Z
TongcyBot
83009
半自動導入非詞元形式
9758503
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichemos
0
3438110
9758504
2026-05-13T05:07:01Z
TongcyBot
83009
半自動導入非詞元形式
9758504
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduiches
0
3438111
9758505
2026-05-13T05:07:03Z
TongcyBot
83009
半自動導入非詞元形式
9758505
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicho
0
3438112
9758506
2026-05-13T05:07:03Z
TongcyBot
83009
半自動導入非詞元形式
9758506
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichou
0
3438113
9758507
2026-05-13T05:07:05Z
TongcyBot
83009
半自動導入非詞元形式
9758507
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichámos
0
3438114
9758508
2026-05-13T05:07:06Z
TongcyBot
83009
半自動導入非詞元形式
9758508
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicháramos
0
3438115
9758509
2026-05-13T05:07:07Z
TongcyBot
83009
半自動導入非詞元形式
9758509
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicháreis
0
3438116
9758510
2026-05-13T05:07:08Z
TongcyBot
83009
半自動導入非詞元形式
9758510
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichásseis
0
3438117
9758511
2026-05-13T05:07:09Z
TongcyBot
83009
半自動導入非詞元形式
9758511
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichássemos
0
3438118
9758512
2026-05-13T05:07:11Z
TongcyBot
83009
半自動導入非詞元形式
9758512
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduichávamos
0
3438119
9758513
2026-05-13T05:07:12Z
TongcyBot
83009
半自動導入非詞元形式
9758513
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
sanduicháveis
0
3438120
9758514
2026-05-13T05:07:13Z
TongcyBot
83009
半自動導入非詞元形式
9758514
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|sanduichar}}
l4y0t1c1vfip0b55gslsmwxivbg6x9p
焼土
0
3438121
9758535
2026-05-13T07:50:27Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===詞源1=== {{ja-kanjitab|しょう|ど|yomi=o}} ====發音==== {{ja-pron|しょうど|acc=1|acc_ref=DJR,NKD2}} ====名詞==== {{ja-noun|しょうど|hhira=せうど}} # 為[[發揮]][[土壤]]中[[有效]][[成分]]或[[殺菌]]等而[[燒]][[燎]][[土地]] # {{alt form|ja|焦土}} ===詞源2=== {{ja-kanjitab|や|o1=き|つち|yomi=k}} {{ja-see|焼き土}} ===參考資料=== <references/>」的新頁面
9758535
wikitext
text/x-wiki
==日語==
===詞源1===
{{ja-kanjitab|しょう|ど|yomi=o}}
====發音====
{{ja-pron|しょうど|acc=1|acc_ref=DJR,NKD2}}
====名詞====
{{ja-noun|しょうど|hhira=せうど}}
# 為[[發揮]][[土壤]]中[[有效]][[成分]]或[[殺菌]]等而[[燒]][[燎]][[土地]]
# {{alt form|ja|焦土}}
===詞源2===
{{ja-kanjitab|や|o1=き|つち|yomi=k}}
{{ja-see|焼き土}}
===參考資料===
<references/>
d5srbwp7aojn3hzl6cx0s9y0gom7az7
焼き土
0
3438122
9758536
2026-05-13T07:52:10Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-kanjitab|や|つち|yomi=k|alt=焼土}} ===發音=== {{ja-pron|やきつち|acc=0|acc_ref=DJR,NHK,NKD2}} ===名詞=== {{ja-noun|やきつち}} # [[燒]]過的土 # 將[[枯草]]等和[[黏]]質土一起燒過,用作[[肥料]]的土 ===參考資料=== <references/>」的新頁面
9758536
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|や|つち|yomi=k|alt=焼土}}
===發音===
{{ja-pron|やきつち|acc=0|acc_ref=DJR,NHK,NKD2}}
===名詞===
{{ja-noun|やきつち}}
# [[燒]]過的土
# 將[[枯草]]等和[[黏]]質土一起燒過,用作[[肥料]]的土
===參考資料===
<references/>
kvdt4d63h9luu597f9hddqfjk6vcgql
きと
0
3438123
9758539
2026-05-13T07:54:37Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|企図|希図|帰途|帰都}}」的新頁面
9758539
wikitext
text/x-wiki
==日語==
{{ja-see|企図|希図|帰途|帰都}}
0sjf4ulzphtfdhfl4i0ufbe6rfvg9pu
かえりみち
0
3438124
9758541
2026-05-13T07:57:20Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-kanjitab|alt=帰り道,帰り路}} ===詞源=== {{ja-com|帰り|かえり|t1=回去,返回|道|みち|t2=道路}} ===發音=== {{ja-pron|acc=3|acc_ref=DJR}} ===名詞=== {{ja-noun|hhira=かへりみち}} # [[歸途]],[[回去]]的[[路]] #: {{syn|ja|帰路<tr:kiro>}} ===參考資料=== <references/>」的新頁面
9758541
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|alt=帰り道,帰り路}}
===詞源===
{{ja-com|帰り|かえり|t1=回去,返回|道|みち|t2=道路}}
===發音===
{{ja-pron|acc=3|acc_ref=DJR}}
===名詞===
{{ja-noun|hhira=かへりみち}}
# [[歸途]],[[回去]]的[[路]]
#: {{syn|ja|帰路<tr:kiro>}}
===參考資料===
<references/>
csky7nj2nu41xrjfw33eo1bwcltxqcp
帰り道
0
3438125
9758542
2026-05-13T07:57:22Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-kanjitab|かえ|みち|yomi=k}} {{ja-see|かえりみち}}」的新頁面
9758542
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|かえ|みち|yomi=k}}
{{ja-see|かえりみち}}
e8yz7lxyzep2dpjqezsnwo5ziv80aq5
kaerimichi
0
3438126
9758543
2026-05-13T07:57:33Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|かえりみち}}」的新頁面
9758543
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|かえりみち}}
kyhi70vzin45bzeqvbmqyq7intznpi5
kitsuen
0
3438127
9758544
2026-05-13T07:58:08Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|きつえん}}」的新頁面
9758544
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|きつえん}}
e64kk4sio47l8ts78l24tsies9csnaz
きつえん
0
3438128
9758545
2026-05-13T07:58:16Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|喫煙}}」的新頁面
9758545
wikitext
text/x-wiki
==日語==
{{ja-see|喫煙}}
skoh2qzbut2j59rvzbzpn5ps5folwbx
kōen
0
3438129
9758546
2026-05-13T07:58:44Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|koen|Koen|kön}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|こうえん}}」的新頁面
9758546
wikitext
text/x-wiki
{{also|koen|Koen|kön}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|こうえん}}
ehofgdpkm60xvcsawugaw1g78cgywlv
yosan
0
3438130
9758547
2026-05-13T07:59:13Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|よさん}}」的新頁面
9758547
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|よさん}}
gpdimzdaczj4fc75gle5ie7xjm2mzrv
よさん
0
3438131
9758548
2026-05-13T07:59:28Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|予参|預参|予算|余算}}」的新頁面
9758548
wikitext
text/x-wiki
==日語==
{{ja-see|予参|預参|予算|余算}}
fxakhkmzk7a063tpf8i33d0ywwhrm4l
ketsueki
0
3438132
9758550
2026-05-13T08:01:20Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|けつえき}}」的新頁面
9758550
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|けつえき}}
s8sxrytcxa6tfjdrmo4sy263ebmsw38
けつえき
0
3438133
9758551
2026-05-13T08:01:43Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|血液}}」的新頁面
9758551
wikitext
text/x-wiki
==日語==
{{ja-see|血液}}
ldy9ux9tza6um7m25r9pcc2s7efymx5
kokkyō
0
3438134
9758552
2026-05-13T08:01:55Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|こっきょう}}」的新頁面
9758552
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|こっきょう}}
909hejadd5ijt0j6vtrr7wd4gx9visx
こっきょう
0
3438135
9758553
2026-05-13T08:02:10Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|国教|国境|国共}}」的新頁面
9758553
wikitext
text/x-wiki
==日語==
{{ja-see|国教|国境|国共}}
99yut75x6vd98i3jup4e4kmes9ffgmj
sōsu
0
3438136
9758554
2026-05-13T08:02:59Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|sosu|šosu}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ソース}}」的新頁面
9758554
wikitext
text/x-wiki
{{also|sosu|šosu}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ソース}}
s0bw9wykej3c37c1ued5zcl41tqp5ob
raigetsu
0
3438137
9758555
2026-05-13T08:04:45Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|らいげつ}}」的新頁面
9758555
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|らいげつ}}
3fmon56xijyx86i4gwe43xhvzos0au1
らいげつ
0
3438138
9758556
2026-05-13T08:04:52Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see-kango|来月}}」的新頁面
9758556
wikitext
text/x-wiki
==日語==
{{ja-see-kango|来月}}
2ohb8dfqts2tk5cm0lalv1tmibsavs1
rainen
0
3438139
9758557
2026-05-13T08:05:05Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|らいねん}}」的新頁面
9758557
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|らいねん}}
f48ndg5kl6o1nipaic66jcinke41d76
tokei
0
3438140
9758558
2026-05-13T08:05:35Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|tōkei}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|とけい}}」的新頁面
9758558
wikitext
text/x-wiki
{{also|tōkei}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|とけい}}
95yen5bmxyo8xbuo0s26u4adcpcdoia
とけい
0
3438141
9758559
2026-05-13T08:06:03Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|とうけい|どうけい}} ==日語== {{ja-see|時計|徒刑}}」的新頁面
9758559
wikitext
text/x-wiki
{{also|とうけい|どうけい}}
==日語==
{{ja-see|時計|徒刑}}
ptbxg7jbfhaux2pjndgi4ljg1mvldjl
まほう
0
3438142
9758560
2026-05-13T08:06:34Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|魔法}}」的新頁面
9758560
wikitext
text/x-wiki
==日語==
{{ja-see|魔法}}
q4f9lffj81pgyahxugcvo5jqyz7h7ci
jōki
0
3438143
9758561
2026-05-13T08:06:48Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|Joki|joki}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|じょうき}}」的新頁面
9758561
wikitext
text/x-wiki
{{also|Joki|joki}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|じょうき}}
jq0nawjp5sktcrqdr35uspcohb9cqn1
samazama
0
3438144
9758562
2026-05-13T08:07:08Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|さまざま}}」的新頁面
9758562
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|さまざま}}
rjwtbqqycqpytjlf71uh8rzeknjxudu
bareru
0
3438145
9758563
2026-05-13T08:07:54Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==阿斯圖里亞斯語== ===發音=== {{ast-pr}} ===形容詞=== {{ast-adj|barer|fpl=bareres}} # {{lb|ast|Ayer|Llanes|Amieva}} {{alt form|ast|baleru}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ばれる}} # {{ja-romanization of|バレル}}」的新頁面
9758563
wikitext
text/x-wiki
==阿斯圖里亞斯語==
===發音===
{{ast-pr}}
===形容詞===
{{ast-adj|barer|fpl=bareres}}
# {{lb|ast|Ayer|Llanes|Amieva}} {{alt form|ast|baleru}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ばれる}}
# {{ja-romanization of|バレル}}
irbilpy4zzb9cxdod4yii6x2jde9g1s
baleru
0
3438146
9758564
2026-05-13T08:09:09Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==阿斯圖里亞斯語== ===其他形式=== * {{alt|ast|valeru||舊拼寫}} * {{alt|ast|baleiru||Western Asturias}} * {{alt|ast|valeiru||Western Asturias|舊拼寫}} * {{alt|ast|bareru||Ayer|Llanes|Amieva}} ===詞源=== 與{{cog|gl|baleiro}} 有關。 ===發音=== {{ast-pr}} ===形容詞=== {{ast-adj|baler}} # [[空]]的 #: {{syn|ast|vacíu}} #: {{uxi|ast|Esi edificiu ta '''baleru'''|那棟樓是'''空的'''}} ===延伸閱讀=== * {{R:…」的新頁面
9758564
wikitext
text/x-wiki
==阿斯圖里亞斯語==
===其他形式===
* {{alt|ast|valeru||舊拼寫}}
* {{alt|ast|baleiru||Western Asturias}}
* {{alt|ast|valeiru||Western Asturias|舊拼寫}}
* {{alt|ast|bareru||Ayer|Llanes|Amieva}}
===詞源===
與{{cog|gl|baleiro}} 有關。
===發音===
{{ast-pr}}
===形容詞===
{{ast-adj|baler}}
# [[空]]的
#: {{syn|ast|vacíu}}
#: {{uxi|ast|Esi edificiu ta '''baleru'''|那棟樓是'''空的'''}}
===延伸閱讀===
* {{R:ast:DGLA}}
* {{R:ast:DALLA}}
gkz8ng7d9rjf4cmrd50huwee2sqcpyt
shōsetsu
0
3438147
9758565
2026-05-13T08:09:48Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|shosetsu}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|しょうせつ}}」的新頁面
9758565
wikitext
text/x-wiki
{{also|shosetsu}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|しょうせつ}}
p3ny9f2krgpukr7lfwz4i44liogller
しょうせつ
0
3438148
9758566
2026-05-13T08:10:09Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|小説|勝絶|小節|小雪|章節|消雪|詳説}}」的新頁面
9758566
wikitext
text/x-wiki
==日語==
{{ja-see|小説|勝絶|小節|小雪|章節|消雪|詳説}}
pc0m678yp5elu9wcpjri163lxa4yt4u
zetchō
0
3438149
9758568
2026-05-13T08:11:22Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ぜっちょう}}」的新頁面
9758568
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ぜっちょう}}
aracom7hf6i2urabzysgmoa01ah9o7t
さんさく
0
3438150
9758569
2026-05-13T08:12:39Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see-kango|散策|三作|刪削|参錯|散作}}」的新頁面
9758569
wikitext
text/x-wiki
==日語==
{{ja-see-kango|散策|三作|刪削|参錯|散作}}
oyf9b7jlhifvskaz0bngb1ny5g0zlox
sansaku
0
3438151
9758570
2026-05-13T08:12:40Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|さんさく}}」的新頁面
9758570
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|さんさく}}
1l0p7w4d2jq59422gwgwdavmz8pc5za
eien
0
3438152
9758571
2026-05-13T08:12:59Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|えいえん}} ==中古英語== ===名詞=== {{head|enm|名詞變格形|altform=1}} # {{alt form|enm|eyen}}」的新頁面
9758571
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|えいえん}}
==中古英語==
===名詞===
{{head|enm|名詞變格形|altform=1}}
# {{alt form|enm|eyen}}
ha13l2z6kt4fd8i4dukpoolhfiw5vui
えいえん
0
3438153
9758572
2026-05-13T08:13:10Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see-kango|永遠|永延}}」的新頁面
9758572
wikitext
text/x-wiki
==日語==
{{ja-see-kango|永遠|永延}}
p7aowxit3kz47jja6d7xn0ssv3fwdr0
jidō
0
3438154
9758573
2026-05-13T08:13:29Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|jido}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|じどう}}」的新頁面
9758573
wikitext
text/x-wiki
{{also|jido}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|じどう}}
75skg9iaypc32gfdyxmyvptktotp7fi
haien
0
3438155
9758574
2026-05-13T08:14:30Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|Haien}} ==巴斯克語== ===發音=== * {{audio|eu|LL-Q8752 (eus)-Xabier Cañas-haien.wav}} {{eu-pr}} ===限定詞=== {{head|eu|限定詞變格形}} # {{inflection of|eu|hura||gen|p}} ===代詞=== {{head|eu|代詞變格形|cat2=指示代詞變格形|cat3=人稱代詞變格形}} # {{inflection of|eu|hura||gen|p|t=那個}};{{inflection of|eu|haiek||gen|t=他們}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|…」的新頁面
9758574
wikitext
text/x-wiki
{{also|Haien}}
==巴斯克語==
===發音===
* {{audio|eu|LL-Q8752 (eus)-Xabier Cañas-haien.wav}}
{{eu-pr}}
===限定詞===
{{head|eu|限定詞變格形}}
# {{inflection of|eu|hura||gen|p}}
===代詞===
{{head|eu|代詞變格形|cat2=指示代詞變格形|cat3=人稱代詞變格形}}
# {{inflection of|eu|hura||gen|p|t=那個}};{{inflection of|eu|haiek||gen|t=他們}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|はいえん}}
==書面挪威語==
===名詞===
{{head|nb|名詞變格形|g=m}}
# {{inflection of|nb|hai||definite|s}}
==新挪威語==
===名詞===
{{head|nn|名詞變格形|g=m}}
# {{inflection of|nn|hai||def|s}}
jkuiwiez2e2o4feta71ru7pp5mxcfpg
はいえん
0
3438156
9758575
2026-05-13T08:14:41Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|肺炎|廃園|排煙}}」的新頁面
9758575
wikitext
text/x-wiki
==日語==
{{ja-see|肺炎|廃園|排煙}}
44z9yhlho22yvltf66nc0ov9wwpp4xv
しんわ
0
3438157
9758576
2026-05-13T08:15:37Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|神話|親和|親話|心窩|新和}}」的新頁面
9758576
wikitext
text/x-wiki
==日語==
{{ja-see|神話|親和|親話|心窩|新和}}
7muyjq3cjqvqcv88xu85m7w0jmwijdx
Kanbojia
0
3438158
9758577
2026-05-13T08:16:29Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|カンボジア}}」的新頁面
9758577
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|カンボジア}}
508rirhrhfiaugz19e7zw9snx40id28
Raosu
0
3438159
9758578
2026-05-13T08:16:51Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ラオス}}」的新頁面
9758578
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ラオス}}
kq6n2dgwta3u6rcdgkwl3n5u0t7ni09
Marēshia
0
3438160
9758579
2026-05-13T08:17:18Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|マレーシア}}」的新頁面
9758579
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|マレーシア}}
p7k72jly38b5zv4zmf15ltaeyez5tei
Shingapōru
0
3438161
9758580
2026-05-13T08:17:43Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|シンガポール|t=新加坡}}」的新頁面
9758580
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|シンガポール|t=新加坡}}
frziaxtahwuhu6sc3jhsm7q9awmrn9v
Burunei
0
3438162
9758581
2026-05-13T08:18:35Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==夏威夷語== ===詞源=== {{bor+|haw|en|Brunei}}。 ===發音=== * {{haw-IPA}} ===專有名詞=== {{head|haw|專有名詞}} # {{place|haw|國家|r/東南亞|t=文萊|t2=汶萊}} # [[文萊]]人,[[汶萊]]人 ===動詞=== {{head|haw|動詞}} # {{lb|haw|stative}} 是[[文萊]]的,是[[汶萊]]的 ===參考資料=== * {{R:haw:Pukui:1986}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ブルネイ}}」的新頁面
9758581
wikitext
text/x-wiki
==夏威夷語==
===詞源===
{{bor+|haw|en|Brunei}}。
===發音===
* {{haw-IPA}}
===專有名詞===
{{head|haw|專有名詞}}
# {{place|haw|國家|r/東南亞|t=文萊|t2=汶萊}}
# [[文萊]]人,[[汶萊]]人
===動詞===
{{head|haw|動詞}}
# {{lb|haw|stative}} 是[[文萊]]的,是[[汶萊]]的
===參考資料===
* {{R:haw:Pukui:1986}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ブルネイ}}
d2y8nbhj8kcpqdp8m96pz5fmi3xy96p
東ティモール
0
3438163
9758582
2026-05-13T08:20:29Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-kanjitab|ひがし|yomi=k}} {{swp|ja:}} ===其他形式=== * {{ja-r|東チモール|^ひがし ^チモール}} ===發音=== {{ja-pron|ひがし ティモール|acc=5}} ===專有名詞=== {{ja-pos|proper|ひがし ティモール}} # {{place|ja|國家|r/東南亞|t=東帝汶}}」的新頁面
9758582
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|ひがし|yomi=k}}
{{swp|ja:}}
===其他形式===
* {{ja-r|東チモール|^ひがし ^チモール}}
===發音===
{{ja-pron|ひがし ティモール|acc=5}}
===專有名詞===
{{ja-pos|proper|ひがし ティモール}}
# {{place|ja|國家|r/東南亞|t=東帝汶}}
04aplisa2csq9xw36n1ycql2yfiqc6l
東チモール
0
3438164
9758583
2026-05-13T08:20:35Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-kanjitab|ひがし|yomi=o}} ===其他形式=== * {{ja-r|東ティモール|^ひがし ^ティモール}} ===發音=== {{ja-pron|ひがし チモール|acc=5}} ===專有名詞=== {{ja-pos|proper|ひがし チモール}} # {{place|ja|國家|r/東南亞|t=東帝汶}}」的新頁面
9758583
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|ひがし|yomi=o}}
===其他形式===
* {{ja-r|東ティモール|^ひがし ^ティモール}}
===發音===
{{ja-pron|ひがし チモール|acc=5}}
===專有名詞===
{{ja-pos|proper|ひがし チモール}}
# {{place|ja|國家|r/東南亞|t=東帝汶}}
mwdg2weroskbaeks7lczxys67dqan32
ウズベキスタン
0
3438165
9758584
2026-05-13T08:21:18Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{swp|ja:}} ===發音=== * {{ja-pron|ウズベキスタン|acc=4|acc_ref=NHK|dev=5}} ===專有名詞=== {{ja-pos|proper}} # {{place|ja|國家|r/中亞|t=烏茲別克斯坦|t2=烏茲別克}} ===參考資料=== <references/>」的新頁面
9758584
wikitext
text/x-wiki
==日語==
{{swp|ja:}}
===發音===
* {{ja-pron|ウズベキスタン|acc=4|acc_ref=NHK|dev=5}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|r/中亞|t=烏茲別克斯坦|t2=烏茲別克}}
===參考資料===
<references/>
8782oi0r9whmzbui9ki2zp7tcjnfzzw
バーレーン
0
3438166
9758585
2026-05-13T08:21:44Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{swp|ja:}} ===發音=== {{ja-pron|acc=3}} ===專有名詞=== {{ja-pos|proper}} # {{place|ja|國家|r/西亞|t=巴林}}」的新頁面
9758585
wikitext
text/x-wiki
==日語==
{{swp|ja:}}
===發音===
{{ja-pron|acc=3}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|r/西亞|t=巴林}}
dxgvctm1xyo9i7c7jp5xoun326glmpf
Afuganisutan
0
3438167
9758587
2026-05-13T08:22:26Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|アフガニスタン}}」的新頁面
9758587
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|アフガニスタン}}
ovcw9l47b3e2bxbvlrycsg18hvw2w8i
Arumenia
0
3438168
9758588
2026-05-13T08:22:47Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|アルメニア|t=亞美尼亞}}」的新頁面
9758588
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|アルメニア|t=亞美尼亞}}
o2pwvgxxpj649g0d1ku6d82izk5d0tm
Isuraeru
0
3438169
9758591
2026-05-13T08:24:31Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|イスラエル}}」的新頁面
9758591
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|イスラエル}}
lq3l9p3btsv31yh074bosg6yn4xoxgk
Iraku
0
3438170
9758592
2026-05-13T08:24:35Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==阿爾巴尼亞語== ===專有名詞=== {{head|sq|專有名詞變格形}} # {{inflection of|sq|Irak||def|nom|s|;|indef|gen//dat//abl|s}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|イラク}} ==波蘭語== ===發音=== {{pl-pr}} ===專有名詞=== {{head|pl|專有名詞變格形}} # {{infl of|pl|Irak||gen//loc//voc|s}}」的新頁面
9758592
wikitext
text/x-wiki
==阿爾巴尼亞語==
===專有名詞===
{{head|sq|專有名詞變格形}}
# {{inflection of|sq|Irak||def|nom|s|;|indef|gen//dat//abl|s}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|イラク}}
==波蘭語==
===發音===
{{pl-pr}}
===專有名詞===
{{head|pl|專有名詞變格形}}
# {{infl of|pl|Irak||gen//loc//voc|s}}
9nox0lns58huabj5k7cpg53pnas7z5h
Ejiputo
0
3438171
9758593
2026-05-13T08:25:02Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|エジプト}}」的新頁面
9758593
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|エジプト}}
8g2qx9ezld57300v744rzf1z7gijdq6
Omān
0
3438172
9758594
2026-05-13T08:25:14Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|オマーン}}」的新頁面
9758594
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|オマーン}}
blsdktokmd8e2kwku3rrw44vikj460n
Katāru
0
3438173
9758596
2026-05-13T08:25:55Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|カタール}}」的新頁面
9758596
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|カタール}}
crb3t9hnvtbfk253awj73f4lg166sw0
Kirugisu
0
3438174
9758597
2026-05-13T08:26:11Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|キルギス}}」的新頁面
9758597
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|キルギス}}
mk0s9eh6uneagik43no8qe48g4ymqk2
Sauji Arabia
0
3438175
9758599
2026-05-13T08:27:09Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|Sauji-Arabia}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|サウジアラビア}}」的新頁面
9758599
wikitext
text/x-wiki
{{also|Sauji-Arabia}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|サウジアラビア}}
hpjr8uph0v8eqanl2spoo1q3nhcsy2n
Jōjia
0
3438176
9758600
2026-05-13T08:27:12Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ジョージア}}」的新頁面
9758600
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ジョージア}}
ggklh39e9dbn4qwryuz4hizo1xt3eyq
Shiria
0
3438177
9758601
2026-05-13T08:27:18Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==愛爾蘭語== ===專有名詞=== {{head|ga|詞首音變專有名詞|g=f}} # {{ga-lenition of|Siria}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|シリア}}」的新頁面
9758601
wikitext
text/x-wiki
==愛爾蘭語==
===專有名詞===
{{head|ga|詞首音變專有名詞|g=f}}
# {{ga-lenition of|Siria}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|シリア}}
cy7nwvhi2tuznv35evjr34tlvvxvdga
Suri Ranka
0
3438178
9758602
2026-05-13T08:27:31Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|スリランカ}}」的新頁面
9758602
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|スリランカ}}
7399kjln41mndijl23nxvkcxquj6l46
Nepāru
0
3438179
9758603
2026-05-13T08:27:57Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ネパール}}」的新頁面
9758603
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ネパール}}
gs3jxzi33cr5fp28ao64txu2rribf4x
Pakisutan
0
3438180
9758605
2026-05-13T08:28:42Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|パキスタン}}」的新頁面
9758605
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|パキスタン}}
omcg5z384tu25efd6adenagk8ah7x78
Toruko
0
3438181
9758606
2026-05-13T08:29:00Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|トルコ}}」的新頁面
9758606
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|トルコ}}
h01m5u0s0px50l3kk3b938vvl6rdve0
Torukumenisutan
0
3438182
9758608
2026-05-13T08:30:05Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|トルクメニスタン|t=土庫曼斯坦}}」的新頁面
9758608
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|トルクメニスタン|t=土庫曼斯坦}}
6qwechswe04ocr2mppttakc3bgk1qq0
Būtan
0
3438183
9758609
2026-05-13T08:30:07Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ブータン}}」的新頁面
9758609
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ブータン}}
82m0gtimgpieawct94f975715ubduvu
ボスニア・ヘルツェゴビナ
0
3438184
9758610
2026-05-13T08:31:20Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{swp|ja:}} ===其他形式=== * {{ja-r|^ボスニア・^ヘルツェゴヴィナ}} ===詞源=== 源自 {{ja-com|ボスニア||ヘルツェゴビナ|t1=波斯尼亞,波士尼亞|t2=黑塞哥維那,赫塞哥維納}}。 ===發音=== {{ja-IPA|ボスニア ヘルツェゴビナ|acc=ボスニア+ヘルツェゴビナ 0+4|acc_ref=NHK,SMK5|acc2=8|acc2_ref=SMK5}} ===專有名詞=== {{ja-pos|proper}} # {{place|ja|國家|r/東南歐…」的新頁面
9758610
wikitext
text/x-wiki
==日語==
{{swp|ja:}}
===其他形式===
* {{ja-r|^ボスニア・^ヘルツェゴヴィナ}}
===詞源===
源自 {{ja-com|ボスニア||ヘルツェゴビナ|t1=波斯尼亞,波士尼亞|t2=黑塞哥維那,赫塞哥維納}}。
===發音===
{{ja-IPA|ボスニア ヘルツェゴビナ|acc=ボスニア+ヘルツェゴビナ 0+4|acc_ref=NHK,SMK5|acc2=8|acc2_ref=SMK5}}
===專有名詞===
{{ja-pos|proper}}
# {{place|ja|國家|r/東南歐|t=波斯尼亞和黑塞哥維那|t2=波士尼亞與赫塞哥維納}}
===參考資料===
<references/>
n8er0q1sooi17xqy6rpn83kv964ujbe
Arubania
0
3438185
9758611
2026-05-13T08:31:53Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|アルバニア}}」的新頁面
9758611
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|アルバニア}}
k2wl3dc0yuyazv59a7ipusdwrohizz0
Itaria
0
3438186
9758612
2026-05-13T08:32:03Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|Itāria|įtaria}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|イタリア}}」的新頁面
9758612
wikitext
text/x-wiki
{{also|Itāria|įtaria}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|イタリア}}
h6zcma5ws3c4iogzmq81iz9t0ekq0md
Ukuraina
0
3438187
9758613
2026-05-13T08:32:05Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ウクライナ}}」的新頁面
9758613
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ウクライナ}}
dbjxt3alzyz6u8g80nfzcnla2hnjsuf
Esutonia
0
3438188
9758614
2026-05-13T08:32:09Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|エストニア}}」的新頁面
9758614
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|エストニア}}
7qbpwn9oowk4nx4kv5sauw7zpvpbjma
Ōsutoria
0
3438189
9758615
2026-05-13T08:32:19Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|オーストリア}}」的新頁面
9758615
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|オーストリア}}
fvgfqtgq72rm3ay5cl8pb1ce4m99sl9
Oranda
0
3438190
9758616
2026-05-13T08:32:21Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|oranda}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|オランダ}}」的新頁面
9758616
wikitext
text/x-wiki
{{also|oranda}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|オランダ}}
fjkrt9ys4zufvkop5uwrpgxy2xbpv9l
Kuroachia
0
3438191
9758617
2026-05-13T08:32:53Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|クロアチア}}」的新頁面
9758617
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|クロアチア}}
1cmeu9kkk8bmba1p5sbcbrhm1y8wxil
Serubia
0
3438192
9758619
2026-05-13T08:34:43Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|セルビア}}」的新頁面
9758619
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|セルビア}}
b1nv56a9xzu8x47tspkkyanq0m3roma
Surobenia
0
3438193
9758620
2026-05-13T08:34:44Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|スロベニア}}」的新頁面
9758620
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|スロベニア}}
0yw1rgr2pmx84mu4ivohygvow8r6nlv
Surobakia
0
3438194
9758621
2026-05-13T08:34:46Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|スロバキア}}」的新頁面
9758621
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|スロバキア}}
jjk7069szhd7zeygljuq1ha2cxahf9i
Berarūshi
0
3438195
9758622
2026-05-13T08:35:07Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ベラルーシ}}」的新頁面
9758622
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ベラルーシ}}
49wunwfytlxixux3031kk4zxmirdoqo
Burugaria
0
3438196
9758625
2026-05-13T08:35:32Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ブルガリア}}」的新頁面
9758625
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ブルガリア}}
awalohpd6elt7591lb121cko9653y6t
Hangarī
0
3438197
9758627
2026-05-13T08:36:46Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ハンガリー}}」的新頁面
9758627
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ハンガリー}}
pzowjqji2zszejrlq4jn3zl72iakuid
Bachikan
0
3438198
9758628
2026-05-13T08:36:49Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|バチカン}}」的新頁面
9758628
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|バチカン}}
mlfviv9sy0o3d7il8zp8jiyya32id16
Noruwē
0
3438199
9758629
2026-05-13T08:36:51Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ノルウェー}}」的新頁面
9758629
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ノルウェー}}
h33zul2bi9hgd8iff95ju4z97ebaouj
Cheko
0
3438200
9758630
2026-05-13T08:36:56Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|checo|cheko}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|チェコ}}」的新頁面
9758630
wikitext
text/x-wiki
{{also|checo|cheko}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|チェコ}}
1ss5d8sp1njn10282e3cvbvofw1nyom
Rukusenburuku
0
3438201
9758631
2026-05-13T08:37:19Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ルクセンブルク}}」的新頁面
9758631
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ルクセンブルク}}
musmnhdb9dbh54naoyp867cmtngj12i
Rūmania
0
3438202
9758632
2026-05-13T08:37:25Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|Rumania|Rumãnia|Rumanía|Rumanìa}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ルーマニア}}」的新頁面
9758632
wikitext
text/x-wiki
{{also|Rumania|Rumãnia|Rumanía|Rumanìa}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ルーマニア}}
29qekel85staiw9ujdy7ejsmg9oe5e9
Rihitenshutain
0
3438203
9758633
2026-05-13T08:37:50Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|リヒテンシュタイン}}」的新頁面
9758633
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|リヒテンシュタイン}}
jp7nxkykhuvhs6f101xn5fkiuwaclru
Ritoania
0
3438204
9758634
2026-05-13T08:37:50Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|リトアニア}}」的新頁面
9758634
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|リトアニア}}
fhrt2z9ci1g9wsz8exjp7gvkinus119
Porutogaru
0
3438205
9758635
2026-05-13T08:38:06Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ポルトガル}}」的新頁面
9758635
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ポルトガル}}
rwrl2mnuy1sdbk3syd3mhgzikklbpi9
Monteneguro
0
3438206
9758636
2026-05-13T08:38:29Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|モンテネグロ}}」的新頁面
9758636
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|モンテネグロ}}
c2glo1plajb509y8efxbo83d3c0nk3n
Ratobia
0
3438207
9758637
2026-05-13T08:38:37Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ラトビア}}」的新頁面
9758637
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ラトビア}}
4w9mhz514bgxvk2w4exmmhanrct23gy
minkan
0
3438208
9758638
2026-05-13T08:47:05Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|みんかん}}」的新頁面
9758638
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|みんかん}}
qzmc7vcx9g9ocem98wczcjkq2lsmndo
shinkō
0
3438209
9758639
2026-05-13T08:48:18Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|しんこう}}」的新頁面
9758639
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|しんこう}}
ey8bbqhpa2sbr9tgormf483aq03y1fb
しんこう
0
3438210
9758640
2026-05-13T08:48:26Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|しんごう|じんこう|じんごう}} ==日語== {{ja-see-kango|沈考|身光|侵攻|侵寇|信仰|神工|神光|神効|神幸|振興|深交|深更|深厚|深紅|深耕|進行|進攻|進航|進貢|進講|新巧|新考|新香|新興|新講|親交|親好|親狎}}」的新頁面
9758640
wikitext
text/x-wiki
{{also|しんごう|じんこう|じんごう}}
==日語==
{{ja-see-kango|沈考|身光|侵攻|侵寇|信仰|神工|神光|神効|神幸|振興|深交|深更|深厚|深紅|深耕|進行|進攻|進航|進貢|進講|新巧|新考|新香|新興|新講|親交|親好|親狎}}
dr6avkx6elbybnv3hsx5ooqmn8ytzcj
shūkyō
0
3438211
9758641
2026-05-13T08:50:42Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|しゅうきょう}}」的新頁面
9758641
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|しゅうきょう}}
59iiz152vjf0ovol120dskcxz0utrpw