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&mdash;just a very little bit too much festivity so far&nbsp;&hellip;. 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&#39;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&#39;s spiritual and physical well-being,&nbsp;{{...}}}} # {{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