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
1718
9759294
9758167
2026-05-14T04:56:27Z
TongcyBot
83009
機器人:更新每日統計數據 (2026-05-14)
9759294
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
| 6917821 | 5918823 | 2325063 | 2180778 | 1579331
}}
* 来源:[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:維基詞典統計]]
lp8rto19j91ibuh5zvh8quyk6i9ujf1
Wiktionary:啤酒馆
4
2340
9758862
9743536
2026-05-13T18:20:08Z
TongcyDai
53191
/* Template:place */ 新章节
9758862
wikitext
text/x-wiki
{{Auto-archive
| archive_after_last_comment = 60
| archive_to_subpage = %Y档案
}}
{{/header}}
{{Easy Archive|to=Wiktionary:啤酒馆/{{CURRENTYEAR}}档案}}
<!-- 请于此线以下讨论,请不要移除上面的模板。谢谢。 -->
== Subscribe to the This Month in Education newsletter - learn from others and share your stories ==
<div lang="en" dir="ltr" class="mw-content-ltr">
Dear community members,
Greetings from the EWOC Newsletter team and the education team at Wikimedia Foundation. We are very excited to share that we on tenth years of Education Newsletter ([[m:Education/News|This Month in Education]]) invite you to join us by [[m:Global message delivery/Targets/This Month in Education|subscribing to the newsletter on your talk page]] or by [[m:Education/News/Newsroom|sharing your activities in the upcoming newsletters]]. The Wikimedia Education newsletter is a monthly newsletter that collects articles written by community members using Wikimedia projects in education around the world, and it is published by the EWOC Newsletter team in collaboration with the Education team. These stories can bring you new ideas to try, valuable insights about the success and challenges of our community members in running education programs in their context.
If your affiliate/language project is developing its own education initiatives, please remember to take advantage of this newsletter to publish your stories with the wider movement that shares your passion for education. You can submit newsletter articles in your own language or submit bilingual articles for the education newsletter. For the month of January the deadline to submit articles is on the 20th January. We look forward to reading your stories.
Older versions of this newsletter can be found in the [[outreach:Education/Newsletter/Archives|complete archive]].
More information about the newsletter can be found at [[m:Education/News/Publication Guidelines|Education/Newsletter/About]].
For more information, please contact spatnaik{{@}}wikimedia.org.
------
<div style="text-align: center;"><div style="margin-top:10px; font-size:90%; padding-left:5px; font-family:Georgia, Palatino, Palatino Linotype, Times, Times New Roman, serif;">[[m:Education/Newsletter/About|About ''This Month in Education'']] · [[m:Global message delivery/Targets/This Month in Education|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] · For the team: [[User:ZI Jony|<span style="color:#8B0000">'''ZI Jony'''</span>]] [[User talk:ZI Jony|<sup><span style="color:Green"><i>(Talk)</i></span></sup>]], {{<includeonly>subst:</includeonly>#time:l G:i, d F Y|}} (UTC)</div></div>
</div>
<!-- 信息由 User:ZI Jony@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=User:ZI_Jony/MassMessage/Awareness_of_Education_Newsletter/List_of_Village_Pumps&oldid=21244129 -->
== Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''Note: Apologies for cross-posting and sending in English.''
Hello, the '''[[m:WD4WMP|Wikidata for Wikimedia Projects]]''' team at Wikimedia Deutschland would like to hear about your experiences using Wikidata in the sibling projects. If you are interested in sharing your opinion and insights, please consider signing up for an interview with us in this '''[https://wikimedia.sslsurvey.de/Wikidata-for-Wikimedia-Interviews Registration form]'''.<br>
''Currently, we are only able to conduct interviews in English.''
The front page of the form has more details about what the conversation will be like, including how we would '''compensate''' you for your time.
For more information, visit our ''[[m:WD4WMP/AddIssue|project issue page]]'' where you can also share your experiences in written form, without an interview.<br>We look forward to speaking with you, [[m:User:Danny Benjafield (WMDE)|Danny Benjafield (WMDE)]] ([[m:User talk:Danny Benjafield (WMDE)|talk]]) 08:53, 5 January 2024 (UTC)
</div>
<!-- 信息由 User:Danny Benjafield (WMDE)@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/WD4WMP/ScreenerInvite&oldid=26027495 -->
== 重構:原始斯拉夫語/頁面 ==
通常這類重構的頁面,因為頁面名稱不同,所以沒辦法自動連結至英維,我們這裡有什麼方法能處理此問題嗎?謝謝
--[[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月26日 (四) 09:29 (UTC)
:@[[User:Chihunglu83|Chihunglu83]] 「自動連結」大概是做不到的。問題應該出在,其實很多頁面都已經連到英維了,但側邊欄並不會顯示。可能得去phab問問看?<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年3月26日 (四) 11:18 (UTC)
:[[phab:T421368]]。歡迎持續追蹤。<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年3月26日 (四) 12:51 (UTC)
::謝謝。<s>比較訝異這麼久都沒有人回報過!? </s> [[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月26日 (四) 13:07 (UTC)
== 缺失ISO693-3的語言 ==
有個語言代碼的問題想問,
諸如像是印度的[[w:en:Khortha_language|Khortha語]],或者越南的[[w:en:Mày language|Mày語]]皆有已出版的文法完整記錄,但(不清楚為何)沒有被分配到ISO693-3的代碼,我們處理這種的情況應該是先去英維詢問嗎?
還是最標準的做法就是等下一輪被給定代碼?
謝謝 --[[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月27日 (五) 03:12 (UTC)
== 台灣分會2026年3月對話時間 ==
<div style="padding: 1.2rem 1rem; background: #f8f5ff; border: 1px solid #b29bd7; margin:1em 0; font-size: 1.08em; display: flex; align-items: center;">
<div style="flex: 1;">
<div style="font-size:x-large; padding-bottom:5px;">'''社群疑難雜症找協會!'''</div>
[[m:Special:MyLanguage/Wikimedia Taiwan|台灣維基媒體協會]]2026年3月的[[m:Wikimedia Taiwan/Wikimedia Taiwan Office Time|對話時間]],訂於台灣時間'''3/29 (日) 14:00'''舉行,<br>
參與連結為 https://meet.google.com/qiv-ctih-sse 。<br>
協會到底在做什麼?如果你覺得協會存在感超低,有事都找不到人,把握這次的對話機會!這是一個定期舉辦的服務時段,由協會秘書長親自主持,有問題馬上解決。協會會分享目前進行中的專案與計劃,也邀請社群朋友分享想法、反映需求,彼此開講、一起討論。<br>
本月討論主題將討論本年度社群交流與規畫,這是將是讓你深入了解協會運作並參與交流的絕佳機會!快來一起參加!
--[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年3月28日 (六) 06:28 (UTC)
</div>
<div style="margin-left: 1rem;">
[[File:Wikimedia Taiwan.svg|160px|alt=|link=m:Special:MyLanguage/Wikimedia Taiwan]]
</div>
</div>
<!-- 信息由 User:NHC@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Wikimedia_Taiwan/Wikimedia_Taiwan_Office_Time/List&oldid=26298276 -->
== Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) ==
Hello everyone,
This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>).
'''The Change:'''<br />
Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]].
We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''.
'''What You Need To Do:'''<br />
To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search.
'''Deadline:'''<br />
We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles.
Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月3日 (五) 17:11 (UTC)
<!-- 信息由 User:ZI Jony@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 -->
== [[維基詞典:翻譯]]不充實 ==
[[維基詞典:翻譯]]是向著[[en:Translations]]的軟重定向,但[[en:Translations]]不存在著。[[維基詞典:佈局解釋]]的翻譯段落反而有詳細的說明,但它的例子翻譯順序不遵從語言的漢語名稱拼音。應當怎麽改善[[維基詞典:翻譯]]與[[維基詞典:佈局解釋]]的翻譯段落?--[[User:Intolerable situation|Intolerable situation]]([[User talk:Intolerable situation|留言]]) 2026年4月10日 (五) 08:26 (UTC)
== Request for comment (global AI policy) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English. {{int:Please-translate}}
A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}}
[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月26日 (日) 00:58 (UTC)
</bdi>
<!-- 信息由 User:Codename Noreste@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 -->
== 台灣分會2026年4月對話時間 ==
<div style="padding: 1.2rem 1rem; background: #f8f5ff; border: 1px solid #b29bd7; margin:1em 0; font-size: 1.08em; display: flex; align-items: center;">
<div style="flex: 1;">
<div style="font-size:x-large; padding-bottom:5px;">'''社群疑難雜症找協會!'''</div>
[[m:Special:MyLanguage/Wikimedia Taiwan|台灣維基媒體協會]]2026年4月的[[m:Wikimedia Taiwan/Wikimedia Taiwan Office Time|對話時間]],訂於台灣時間'''4/30 (四) 19:00'''舉行,<br>
參與連結為 https://meet.google.com/qiv-ctih-sse 。<br>
協會到底在做什麼?如果你覺得協會存在感超低,有事都找不到人,把握這次的對話機會!這是一個定期舉辦的服務時段,由協會秘書長親自主持,有問題馬上解決。協會會分享目前進行中的專案與計劃,也邀請社群朋友分享想法、反映需求,彼此開講、一起討論。<br>
本月討論主題將討論維基社群AI政策,這是將是讓你深入了解協會運作並參與交流的絕佳機會!快來一起參加!
--[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月27日 (一) 22:52 (UTC)
</div>
<div style="margin-left: 1rem;">
[[File:Wikimedia Taiwan.svg|160px|alt=|link=m:Special:MyLanguage/Wikimedia Taiwan]]
</div>
</div>
<!-- 信息由 User:NHC@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Wikimedia_Taiwan/Wikimedia_Taiwan_Office_Time/List&oldid=26298276 -->
== Template:place ==
新版的{{tl|place}}大致上已經完成部署,常和它搭配的{{tl|tcl}}也可以使用了。盡量實現了英維新版程式碼有的所有功能,並已經盡可能地讓語法接近自然,其他狀況還是只能用自定義的釋義了。有一些M岸N地用語或者分類可能還沒處理好,再麻煩各位回報。{{ping2|Fglffer|Kethyga|Sayonzei}}。<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年5月13日 (三) 18:20 (UTC)
lrfvnbe1w9g5fz4rw1ww0semqonlqi2
9758891
9758862
2026-05-14T02:09:18Z
Sayonzei
40728
/* Template:place */
9758891
wikitext
text/x-wiki
{{Auto-archive
| archive_after_last_comment = 60
| archive_to_subpage = %Y档案
}}
{{/header}}
{{Easy Archive|to=Wiktionary:啤酒馆/{{CURRENTYEAR}}档案}}
<!-- 请于此线以下讨论,请不要移除上面的模板。谢谢。 -->
== Subscribe to the This Month in Education newsletter - learn from others and share your stories ==
<div lang="en" dir="ltr" class="mw-content-ltr">
Dear community members,
Greetings from the EWOC Newsletter team and the education team at Wikimedia Foundation. We are very excited to share that we on tenth years of Education Newsletter ([[m:Education/News|This Month in Education]]) invite you to join us by [[m:Global message delivery/Targets/This Month in Education|subscribing to the newsletter on your talk page]] or by [[m:Education/News/Newsroom|sharing your activities in the upcoming newsletters]]. The Wikimedia Education newsletter is a monthly newsletter that collects articles written by community members using Wikimedia projects in education around the world, and it is published by the EWOC Newsletter team in collaboration with the Education team. These stories can bring you new ideas to try, valuable insights about the success and challenges of our community members in running education programs in their context.
If your affiliate/language project is developing its own education initiatives, please remember to take advantage of this newsletter to publish your stories with the wider movement that shares your passion for education. You can submit newsletter articles in your own language or submit bilingual articles for the education newsletter. For the month of January the deadline to submit articles is on the 20th January. We look forward to reading your stories.
Older versions of this newsletter can be found in the [[outreach:Education/Newsletter/Archives|complete archive]].
More information about the newsletter can be found at [[m:Education/News/Publication Guidelines|Education/Newsletter/About]].
For more information, please contact spatnaik{{@}}wikimedia.org.
------
<div style="text-align: center;"><div style="margin-top:10px; font-size:90%; padding-left:5px; font-family:Georgia, Palatino, Palatino Linotype, Times, Times New Roman, serif;">[[m:Education/Newsletter/About|About ''This Month in Education'']] · [[m:Global message delivery/Targets/This Month in Education|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] · For the team: [[User:ZI Jony|<span style="color:#8B0000">'''ZI Jony'''</span>]] [[User talk:ZI Jony|<sup><span style="color:Green"><i>(Talk)</i></span></sup>]], {{<includeonly>subst:</includeonly>#time:l G:i, d F Y|}} (UTC)</div></div>
</div>
<!-- 信息由 User:ZI Jony@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=User:ZI_Jony/MassMessage/Awareness_of_Education_Newsletter/List_of_Village_Pumps&oldid=21244129 -->
== Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''Note: Apologies for cross-posting and sending in English.''
Hello, the '''[[m:WD4WMP|Wikidata for Wikimedia Projects]]''' team at Wikimedia Deutschland would like to hear about your experiences using Wikidata in the sibling projects. If you are interested in sharing your opinion and insights, please consider signing up for an interview with us in this '''[https://wikimedia.sslsurvey.de/Wikidata-for-Wikimedia-Interviews Registration form]'''.<br>
''Currently, we are only able to conduct interviews in English.''
The front page of the form has more details about what the conversation will be like, including how we would '''compensate''' you for your time.
For more information, visit our ''[[m:WD4WMP/AddIssue|project issue page]]'' where you can also share your experiences in written form, without an interview.<br>We look forward to speaking with you, [[m:User:Danny Benjafield (WMDE)|Danny Benjafield (WMDE)]] ([[m:User talk:Danny Benjafield (WMDE)|talk]]) 08:53, 5 January 2024 (UTC)
</div>
<!-- 信息由 User:Danny Benjafield (WMDE)@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/WD4WMP/ScreenerInvite&oldid=26027495 -->
== 重構:原始斯拉夫語/頁面 ==
通常這類重構的頁面,因為頁面名稱不同,所以沒辦法自動連結至英維,我們這裡有什麼方法能處理此問題嗎?謝謝
--[[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月26日 (四) 09:29 (UTC)
:@[[User:Chihunglu83|Chihunglu83]] 「自動連結」大概是做不到的。問題應該出在,其實很多頁面都已經連到英維了,但側邊欄並不會顯示。可能得去phab問問看?<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年3月26日 (四) 11:18 (UTC)
:[[phab:T421368]]。歡迎持續追蹤。<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年3月26日 (四) 12:51 (UTC)
::謝謝。<s>比較訝異這麼久都沒有人回報過!? </s> [[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月26日 (四) 13:07 (UTC)
== 缺失ISO693-3的語言 ==
有個語言代碼的問題想問,
諸如像是印度的[[w:en:Khortha_language|Khortha語]],或者越南的[[w:en:Mày language|Mày語]]皆有已出版的文法完整記錄,但(不清楚為何)沒有被分配到ISO693-3的代碼,我們處理這種的情況應該是先去英維詢問嗎?
還是最標準的做法就是等下一輪被給定代碼?
謝謝 --[[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月27日 (五) 03:12 (UTC)
== 台灣分會2026年3月對話時間 ==
<div style="padding: 1.2rem 1rem; background: #f8f5ff; border: 1px solid #b29bd7; margin:1em 0; font-size: 1.08em; display: flex; align-items: center;">
<div style="flex: 1;">
<div style="font-size:x-large; padding-bottom:5px;">'''社群疑難雜症找協會!'''</div>
[[m:Special:MyLanguage/Wikimedia Taiwan|台灣維基媒體協會]]2026年3月的[[m:Wikimedia Taiwan/Wikimedia Taiwan Office Time|對話時間]],訂於台灣時間'''3/29 (日) 14:00'''舉行,<br>
參與連結為 https://meet.google.com/qiv-ctih-sse 。<br>
協會到底在做什麼?如果你覺得協會存在感超低,有事都找不到人,把握這次的對話機會!這是一個定期舉辦的服務時段,由協會秘書長親自主持,有問題馬上解決。協會會分享目前進行中的專案與計劃,也邀請社群朋友分享想法、反映需求,彼此開講、一起討論。<br>
本月討論主題將討論本年度社群交流與規畫,這是將是讓你深入了解協會運作並參與交流的絕佳機會!快來一起參加!
--[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年3月28日 (六) 06:28 (UTC)
</div>
<div style="margin-left: 1rem;">
[[File:Wikimedia Taiwan.svg|160px|alt=|link=m:Special:MyLanguage/Wikimedia Taiwan]]
</div>
</div>
<!-- 信息由 User:NHC@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Wikimedia_Taiwan/Wikimedia_Taiwan_Office_Time/List&oldid=26298276 -->
== Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) ==
Hello everyone,
This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>).
'''The Change:'''<br />
Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]].
We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''.
'''What You Need To Do:'''<br />
To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search.
'''Deadline:'''<br />
We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles.
Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月3日 (五) 17:11 (UTC)
<!-- 信息由 User:ZI Jony@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 -->
== [[維基詞典:翻譯]]不充實 ==
[[維基詞典:翻譯]]是向著[[en:Translations]]的軟重定向,但[[en:Translations]]不存在著。[[維基詞典:佈局解釋]]的翻譯段落反而有詳細的說明,但它的例子翻譯順序不遵從語言的漢語名稱拼音。應當怎麽改善[[維基詞典:翻譯]]與[[維基詞典:佈局解釋]]的翻譯段落?--[[User:Intolerable situation|Intolerable situation]]([[User talk:Intolerable situation|留言]]) 2026年4月10日 (五) 08:26 (UTC)
== Request for comment (global AI policy) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English. {{int:Please-translate}}
A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}}
[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月26日 (日) 00:58 (UTC)
</bdi>
<!-- 信息由 User:Codename Noreste@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 -->
== 台灣分會2026年4月對話時間 ==
<div style="padding: 1.2rem 1rem; background: #f8f5ff; border: 1px solid #b29bd7; margin:1em 0; font-size: 1.08em; display: flex; align-items: center;">
<div style="flex: 1;">
<div style="font-size:x-large; padding-bottom:5px;">'''社群疑難雜症找協會!'''</div>
[[m:Special:MyLanguage/Wikimedia Taiwan|台灣維基媒體協會]]2026年4月的[[m:Wikimedia Taiwan/Wikimedia Taiwan Office Time|對話時間]],訂於台灣時間'''4/30 (四) 19:00'''舉行,<br>
參與連結為 https://meet.google.com/qiv-ctih-sse 。<br>
協會到底在做什麼?如果你覺得協會存在感超低,有事都找不到人,把握這次的對話機會!這是一個定期舉辦的服務時段,由協會秘書長親自主持,有問題馬上解決。協會會分享目前進行中的專案與計劃,也邀請社群朋友分享想法、反映需求,彼此開講、一起討論。<br>
本月討論主題將討論維基社群AI政策,這是將是讓你深入了解協會運作並參與交流的絕佳機會!快來一起參加!
--[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月27日 (一) 22:52 (UTC)
</div>
<div style="margin-left: 1rem;">
[[File:Wikimedia Taiwan.svg|160px|alt=|link=m:Special:MyLanguage/Wikimedia Taiwan]]
</div>
</div>
<!-- 信息由 User:NHC@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Wikimedia_Taiwan/Wikimedia_Taiwan_Office_Time/List&oldid=26298276 -->
== Template:place ==
新版的{{tl|place}}大致上已經完成部署,常和它搭配的{{tl|tcl}}也可以使用了。盡量實現了英維新版程式碼有的所有功能,並已經盡可能地讓語法接近自然,其他狀況還是只能用自定義的釋義了。有一些M岸N地用語或者分類可能還沒處理好,再麻煩各位回報。{{ping2|Fglffer|Kethyga|Sayonzei}}。<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年5月13日 (三) 18:20 (UTC)
:產生的分類“xx的地點”以前似乎是作“xx地名”,我覺得後者或許好一些?--[[User:Sayonzei|Sayonzei]]([[User talk:Sayonzei|留言]]) 2026年5月14日 (四) 02:09 (UTC)
blzn73fzcgh0phzz77ct6npp3o4dy2x
9759300
9758891
2026-05-14T06:20:00Z
TongcyDai
53191
/* Template:place */ 回复
9759300
wikitext
text/x-wiki
{{Auto-archive
| archive_after_last_comment = 60
| archive_to_subpage = %Y档案
}}
{{/header}}
{{Easy Archive|to=Wiktionary:啤酒馆/{{CURRENTYEAR}}档案}}
<!-- 请于此线以下讨论,请不要移除上面的模板。谢谢。 -->
== Subscribe to the This Month in Education newsletter - learn from others and share your stories ==
<div lang="en" dir="ltr" class="mw-content-ltr">
Dear community members,
Greetings from the EWOC Newsletter team and the education team at Wikimedia Foundation. We are very excited to share that we on tenth years of Education Newsletter ([[m:Education/News|This Month in Education]]) invite you to join us by [[m:Global message delivery/Targets/This Month in Education|subscribing to the newsletter on your talk page]] or by [[m:Education/News/Newsroom|sharing your activities in the upcoming newsletters]]. The Wikimedia Education newsletter is a monthly newsletter that collects articles written by community members using Wikimedia projects in education around the world, and it is published by the EWOC Newsletter team in collaboration with the Education team. These stories can bring you new ideas to try, valuable insights about the success and challenges of our community members in running education programs in their context.
If your affiliate/language project is developing its own education initiatives, please remember to take advantage of this newsletter to publish your stories with the wider movement that shares your passion for education. You can submit newsletter articles in your own language or submit bilingual articles for the education newsletter. For the month of January the deadline to submit articles is on the 20th January. We look forward to reading your stories.
Older versions of this newsletter can be found in the [[outreach:Education/Newsletter/Archives|complete archive]].
More information about the newsletter can be found at [[m:Education/News/Publication Guidelines|Education/Newsletter/About]].
For more information, please contact spatnaik{{@}}wikimedia.org.
------
<div style="text-align: center;"><div style="margin-top:10px; font-size:90%; padding-left:5px; font-family:Georgia, Palatino, Palatino Linotype, Times, Times New Roman, serif;">[[m:Education/Newsletter/About|About ''This Month in Education'']] · [[m:Global message delivery/Targets/This Month in Education|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] · For the team: [[User:ZI Jony|<span style="color:#8B0000">'''ZI Jony'''</span>]] [[User talk:ZI Jony|<sup><span style="color:Green"><i>(Talk)</i></span></sup>]], {{<includeonly>subst:</includeonly>#time:l G:i, d F Y|}} (UTC)</div></div>
</div>
<!-- 信息由 User:ZI Jony@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=User:ZI_Jony/MassMessage/Awareness_of_Education_Newsletter/List_of_Village_Pumps&oldid=21244129 -->
== Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''Note: Apologies for cross-posting and sending in English.''
Hello, the '''[[m:WD4WMP|Wikidata for Wikimedia Projects]]''' team at Wikimedia Deutschland would like to hear about your experiences using Wikidata in the sibling projects. If you are interested in sharing your opinion and insights, please consider signing up for an interview with us in this '''[https://wikimedia.sslsurvey.de/Wikidata-for-Wikimedia-Interviews Registration form]'''.<br>
''Currently, we are only able to conduct interviews in English.''
The front page of the form has more details about what the conversation will be like, including how we would '''compensate''' you for your time.
For more information, visit our ''[[m:WD4WMP/AddIssue|project issue page]]'' where you can also share your experiences in written form, without an interview.<br>We look forward to speaking with you, [[m:User:Danny Benjafield (WMDE)|Danny Benjafield (WMDE)]] ([[m:User talk:Danny Benjafield (WMDE)|talk]]) 08:53, 5 January 2024 (UTC)
</div>
<!-- 信息由 User:Danny Benjafield (WMDE)@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/WD4WMP/ScreenerInvite&oldid=26027495 -->
== 重構:原始斯拉夫語/頁面 ==
通常這類重構的頁面,因為頁面名稱不同,所以沒辦法自動連結至英維,我們這裡有什麼方法能處理此問題嗎?謝謝
--[[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月26日 (四) 09:29 (UTC)
:@[[User:Chihunglu83|Chihunglu83]] 「自動連結」大概是做不到的。問題應該出在,其實很多頁面都已經連到英維了,但側邊欄並不會顯示。可能得去phab問問看?<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年3月26日 (四) 11:18 (UTC)
:[[phab:T421368]]。歡迎持續追蹤。<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年3月26日 (四) 12:51 (UTC)
::謝謝。<s>比較訝異這麼久都沒有人回報過!? </s> [[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月26日 (四) 13:07 (UTC)
== 缺失ISO693-3的語言 ==
有個語言代碼的問題想問,
諸如像是印度的[[w:en:Khortha_language|Khortha語]],或者越南的[[w:en:Mày language|Mày語]]皆有已出版的文法完整記錄,但(不清楚為何)沒有被分配到ISO693-3的代碼,我們處理這種的情況應該是先去英維詢問嗎?
還是最標準的做法就是等下一輪被給定代碼?
謝謝 --[[User:Chihunglu83|Chihunglu83]]([[User talk:Chihunglu83|留言]]) 2026年3月27日 (五) 03:12 (UTC)
== 台灣分會2026年3月對話時間 ==
<div style="padding: 1.2rem 1rem; background: #f8f5ff; border: 1px solid #b29bd7; margin:1em 0; font-size: 1.08em; display: flex; align-items: center;">
<div style="flex: 1;">
<div style="font-size:x-large; padding-bottom:5px;">'''社群疑難雜症找協會!'''</div>
[[m:Special:MyLanguage/Wikimedia Taiwan|台灣維基媒體協會]]2026年3月的[[m:Wikimedia Taiwan/Wikimedia Taiwan Office Time|對話時間]],訂於台灣時間'''3/29 (日) 14:00'''舉行,<br>
參與連結為 https://meet.google.com/qiv-ctih-sse 。<br>
協會到底在做什麼?如果你覺得協會存在感超低,有事都找不到人,把握這次的對話機會!這是一個定期舉辦的服務時段,由協會秘書長親自主持,有問題馬上解決。協會會分享目前進行中的專案與計劃,也邀請社群朋友分享想法、反映需求,彼此開講、一起討論。<br>
本月討論主題將討論本年度社群交流與規畫,這是將是讓你深入了解協會運作並參與交流的絕佳機會!快來一起參加!
--[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年3月28日 (六) 06:28 (UTC)
</div>
<div style="margin-left: 1rem;">
[[File:Wikimedia Taiwan.svg|160px|alt=|link=m:Special:MyLanguage/Wikimedia Taiwan]]
</div>
</div>
<!-- 信息由 User:NHC@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Wikimedia_Taiwan/Wikimedia_Taiwan_Office_Time/List&oldid=26298276 -->
== Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) ==
Hello everyone,
This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>).
'''The Change:'''<br />
Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]].
We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''.
'''What You Need To Do:'''<br />
To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search.
'''Deadline:'''<br />
We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles.
Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月3日 (五) 17:11 (UTC)
<!-- 信息由 User:ZI Jony@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 -->
== [[維基詞典:翻譯]]不充實 ==
[[維基詞典:翻譯]]是向著[[en:Translations]]的軟重定向,但[[en:Translations]]不存在著。[[維基詞典:佈局解釋]]的翻譯段落反而有詳細的說明,但它的例子翻譯順序不遵從語言的漢語名稱拼音。應當怎麽改善[[維基詞典:翻譯]]與[[維基詞典:佈局解釋]]的翻譯段落?--[[User:Intolerable situation|Intolerable situation]]([[User talk:Intolerable situation|留言]]) 2026年4月10日 (五) 08:26 (UTC)
== Request for comment (global AI policy) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English. {{int:Please-translate}}
A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}}
[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月26日 (日) 00:58 (UTC)
</bdi>
<!-- 信息由 User:Codename Noreste@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 -->
== 台灣分會2026年4月對話時間 ==
<div style="padding: 1.2rem 1rem; background: #f8f5ff; border: 1px solid #b29bd7; margin:1em 0; font-size: 1.08em; display: flex; align-items: center;">
<div style="flex: 1;">
<div style="font-size:x-large; padding-bottom:5px;">'''社群疑難雜症找協會!'''</div>
[[m:Special:MyLanguage/Wikimedia Taiwan|台灣維基媒體協會]]2026年4月的[[m:Wikimedia Taiwan/Wikimedia Taiwan Office Time|對話時間]],訂於台灣時間'''4/30 (四) 19:00'''舉行,<br>
參與連結為 https://meet.google.com/qiv-ctih-sse 。<br>
協會到底在做什麼?如果你覺得協會存在感超低,有事都找不到人,把握這次的對話機會!這是一個定期舉辦的服務時段,由協會秘書長親自主持,有問題馬上解決。協會會分享目前進行中的專案與計劃,也邀請社群朋友分享想法、反映需求,彼此開講、一起討論。<br>
本月討論主題將討論維基社群AI政策,這是將是讓你深入了解協會運作並參與交流的絕佳機會!快來一起參加!
--[[User:MediaWiki message delivery|MediaWiki message delivery]]([[User talk:MediaWiki message delivery|留言]]) 2026年4月27日 (一) 22:52 (UTC)
</div>
<div style="margin-left: 1rem;">
[[File:Wikimedia Taiwan.svg|160px|alt=|link=m:Special:MyLanguage/Wikimedia Taiwan]]
</div>
</div>
<!-- 信息由 User:NHC@metawiki 发送,使用的列表为 https://meta.wikimedia.org/w/index.php?title=Wikimedia_Taiwan/Wikimedia_Taiwan_Office_Time/List&oldid=26298276 -->
== Template:place ==
新版的{{tl|place}}大致上已經完成部署,常和它搭配的{{tl|tcl}}也可以使用了。盡量實現了英維新版程式碼有的所有功能,並已經盡可能地讓語法接近自然,其他狀況還是只能用自定義的釋義了。有一些M岸N地用語或者分類可能還沒處理好,再麻煩各位回報。{{ping2|Fglffer|Kethyga|Sayonzei}}。<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年5月13日 (三) 18:20 (UTC)
:產生的分類“xx的地點”以前似乎是作“xx地名”,我覺得後者或許好一些?--[[User:Sayonzei|Sayonzei]]([[User talk:Sayonzei|留言]]) 2026年5月14日 (四) 02:09 (UTC)
::@[[User:Sayonzei|Sayonzei]] 沒問題,那[[:Category:日語 地點]]是否也應作「Category:日語 地名」?<span class="nowrap" style="white-space:nowrap;">—<b>[[User:TongcyDai|<span style="color: #8F4586">'''TongcyDai'''</span>]]</b></span>  [[User talk:TongcyDai|<span style="color: #FF9224;"><span class="nowrap" style="white-space:nowrap;">ฅ • ω • ฅ</span></span>]] 2026年5月14日 (四) 06:20 (UTC)
88noomj8c6k1fsgfvos3jrbnpajq0ta
dick
0
11099
9759303
9556599
2026-05-14T07:01:47Z
~2026-28909-66
133365
9759303
wikitext
text/x-wiki
{{also|Dick}}
==英语==
===發音===
* {{enPR|dĭk}}, {{ipa|en|/dɪk/}}
* {{audio|en|en-us-dick.ogg|a=美式}}
* {{audio|en|en-uk-dick.ogg|a=英式}}
* {{rhymes|en|ɪk}}
===詞源1===
{{root|en|ine-pro|*h₃reǵ-|*kret-}}
源自{{m|en|Dick}},名字{{m|en|Richard}}的暱稱。最初意思是“普通人”、“凡夫俗子”,后来衍生出其他的含义。
====名詞====
{{wikipedia|lang=en|penis}}
{{en-noun|~}}
# {{lb|en|countable|obsolete}} [[男人]]
# {{lb|en|countable|uncountable|vulgar|slang}} [[陰莖]],[[屌]]
#: {{ux|en|He wore a condom over his '''dick'''.|他在'''阴茎'''上套了个避孕套。}}
#* {{quote-book
|en
|year=1997
|last=Carlin
|first=George
|authorlink=喬治·卡林
|title={{w|lang=en|Brain Droppings}}
|url=https://archive.org/details/isbn_9780786883219/
|location=[[New York]]
|publisher={{w|lang=en|Hyperion Books}}
|ISBN=0-7868-8321-9
|LCCN=96-52373
|OCLC=36084460
|OL=26335012M
|page=83
|pageurl=https://archive.org/details/isbn_9780786883219/page/83/
|text=THINGS YOU NEVER HEAR: "Please stop sucking my '''dick''' or I'll call the police."
|translation=你一定沒有聽過的話:“別嗦我的'''屌'''了,不然我要叫警察。”}}
# {{lb|en|countable|British|US|vulgar|slang|pejorative}} 令人[[不快]]的人
#: {{ux|en|That person is such a '''dick'''.|那个人是'''傻屄'''。}}
# {{lb|en|uncountable|US|Canada|vulgar|slang}} [[什麼]]也[[沒有]]
#: {{ux|en|Last weekend I did '''dick'''.|上周末我'''什么也没'''做。}}
# {{lb|en|uncountable|vulgar|slang}} 與男性[[性交]]
#* '''1991''', quoted in Andrew Parker, ''Nationalisms & Sexualities'', [https://books.google.com/books?id=UEsoAQAAMAAJ&q=%22get+some+dick%22&dq=%22get+some+dick%22&hl=en&sa=X&ved=0ahUKEwipv9m86KLiAhU6xosBHVupDcoQ6AEIbjAN page 309]:
#*: You better try and get some '''dick''' and take your mind off this bullshit.
=====近義詞=====
* {{sense|令人不快的人}} {{l|en|dickhead}}, {{l|en|asshole}}, {{l|en|jerk}}
* {{sense|什麼也沒有}} [[fuck all]]
=====上位詞=====
* {{l|en|genitals}}
=====派生詞=====
{{der3|en|
|baby dick|bee's dick|catch a dick|chick with a dick|coke dick|crystal dick|dick all|dickass|dickbait|dickbag|dickbrain|dickbreath|dickbutt|dickcheese|dicked|dickhead|dickface|dickfest|dickflesh|dickfuck|dickgirl|dickhole|dickitude|dick juice|dickless|dicklet|dick lit|dick-measuring contest|dick milk|dick move|dick munch|dicknut|dickology|dickpic|dick print|dickride|dicksack|dickshit|dicksicle|dickslap|dick smoker|dick snot|dicksplash|dicksplat|dickster|dicksucker|dicktionary|dickwad|dickweasel|dick weed|dickwit|dope dick|eat a dick|get one's dick wet|girldick|horse dick|limp dick|megadick|needle dick|pencil dick|pimple dick|stick one's dick in crazy|suck donkey dick|suck dick|superdick|swinging dick|whiskey dick|with one's dick in one's hand}}
=====派生語彙=====
* {{desc|fi|dikki|bor=1}} {{i|口語|幽默}}
====動詞====
{{en-verb}}
# {{lb|en|transitive|slang|vulgar|常與 ''around'' 或 ''up'' 搭配使用}} [[欺騙]],[[捉弄]],被[[佔便宜]]
#: {{ux|en|Dude, don't let them '''dick''' you around like that!|老弟,別讓他們那麼'''捉弄'''你!}}
# {{lb|en|transitive|slang|vulgar|指男人}} 與……[[性交]]
#* {{quote-book|en|year=1996|author=Clarence Major|title=Dirty bird blues|passage=Listen, this old gal we going to see probably don't like liquor and drinking, so be cool. I'm just gon borrow a few bucks off her. I ain't never '''dicked''' her or nothing.}}
=====派生詞=====
* {{l|en|dick about}}
* {{l|en|dick around}}
* {{l|en|dick down}}
* {{l|en|dick up}}
===詞源2===
[[detective|de(t)ec(tive)]] 的簡稱及變體。
====名詞====
{{en-noun}}
# {{lb|en|dated|US|slang}} [[偵探]]
#: {{syn|en|detective}}
#: {{ux|en|private '''dick''', railroad '''dick'''|私家'''偵探''',鐵道'''偵探'''}}
#* {{quote-book
|en
|date=1937-11-01
|title={{w|尼羅河謀殺案|Death on the Nile}}
|first=Agatha
|last=Christie
|authorlink=阿加莎·克里斯蒂
|passage=“I am a detective,” said {{w|lang=en|Hercule Poirot}} with the modest air of one who says “I am a king.”<br>“Good God!” The young man seemed seriously taken aback. “Do you mean that girl actually totes about a dumb '''dick'''?”
}}
=====派生詞=====
* {{l|en|private dick}}
* {{l|en|clever dick}}
===詞源3===
[[declaration|dec(laration)]] 的簡稱及變體。
====名詞====
{{en-noun}}
# {{lb|en|obsolete}} [[宣告]]
#* {{quote-book|en|year=1875|author=Mrs. George Croft Huddleston|title=Bluebell|passage="He seems to set a deal of store by her, though. There's some young 'ooman at home, where she lives, I'd take my dying '''dick'''."}}
===詞源4===
{{wikipedia|lang=en|Yan Tan Tethera}}
來自一{{der|en|xcb|-}}數詞,與{{cog|cy|deg}}有關,源自{{der|en|cel-bry-pro|*deg}}。
====數詞====
{{head|en|數詞}}
# {{lb|en|坎布里亞}} [[十]](用於[[數]][[羊]])
=====派生詞=====
{{col4|en
|methera-a-dick
|tethera-a-dick
|tyan-a-dick
|yan-a-dick
}}
=====參見=====
{{list:Borrowdale sheep counting}}
====參考資料====
* {{cite-book
|last=Wirght
|first=Peter
|title=Cumbrian Chat
|year=1995
|publisher=Dalesman Publishing Company
|isbn=185-568-092-0
|page=7
}}
* {{cite-book
|last=Deakin
|first=Michael A.B.
|editor=Leigh-Lancaster, David
|title=The Name of the Number
|year=2007
|url=http://books.google.co.uk/books?id=sSGPsbUdzuMC&printsec=frontcover&dq=The+Name+of+the+Number&client=firefox-a&sig=rltANTWrl82R7Ho4mEv0PivE698
|accessdate=2008-05-17
|publisher=Australian Council for Educational Research
|isbn=0864317573
|page=75
}}
* {{cite-book
|last=Varvogli
|first=Aliki
|title=Annie Proulx's The Shipping News: A Reader's Guide
|year=2002
|url=http://books.google.co.uk/books?id=YwW7f0jB9swC&printsec=frontcover&dq=subject:%22Proulx,+Annie%22&client=firefox-a&sig=1V4j_clhRbrJm7XnesnFDk8NU0Q
|accessdate=2008-05-17
|publisher=Continuum International Publishing Group
|isbn=0826452337
|pages=24-25
}}
===異序詞===
* {{anagrams|en|a=cdik|CDKI|cdki}}
[[Category:英語基數詞]]
[[Category:英語稱謂詞]]
[[Category:英語 人]]
[[Category:英語 性]]
[[Category:英語 十]]
==德語==
===詞源===
{{dercat|de|gem-pro|inh=1}}
來自{{inh|de|gmh|dicke}},來自{{inh|de|goh|dicki}}、{{m|goh|dicchi}}(與{{cog|osx|thikki}}同族),來自{{inh|de|gmw-pro|*þikkwī}}。
對照{{cog|nds|dick}}、{{cog|nl|dik}}、{{cog|en|thick}}、{{cog|da|tyk}}。
===發音===
* {{IPA|de|/dɪk/}}
* {{audio|de|De-dick.ogg}}
* {{rhymes|de|ɪk|s=1}}
===形容詞===
{{de-adj|comp}}
# [[厚]]的
# [[胖]]的
====變格====
{{de-adecl|comp}}
====衍生詞====
* {{l|de|dicklich}}
* {{l|de|dickstielig}}
===延伸閱讀===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
== 漢斯立克語 ==
===詞源===
{{dercat|hrx|gem-pro|inh=1}}
來自{{inh|hrx|gmh|dicke}},來自{{inh|hrx|goh|dicki}}、{{m|goh|dicchi}},來自{{inh|hrx|gmw-pro|*þikkwī}}。
===發音===
* {{IPA|hrx|/tin/}}
===形容詞===
{{head|hrx|形容詞|比較級|dicker|最高級|dickest}}
# [[厚]]的
#: {{ux|hrx|Das Brett is zweu Zentimeter '''dick'''.|這塊木板'''厚'''度2公分。}}
# [[胖]]的
#: {{ux|hrx|Sie is en '''dicke''' Fraa.|她是個'''胖'''女人}}
# [[懷孕]]的
#: {{ux|hrx|Mein Schwesder is schun nommol '''dick'''.|我妹妹已經不能再'''懷孕'''了。}}
====變格====
{{hrx-decl-adj|dick}}
===延伸閱讀===
* [https://hunsriqueanoriograndense.wordpress.com/dicionario-werterbuch/ Online Hunsrik Dictionary]
== 賓夕法尼亞德語 ==
===詞源===
來自{{inh|pdc|gmh|dicke}},來自{{inh|pdc|goh|dicchi}}。對照{{cog|de|dick}}、{{cog|nl|dik}}、{{cog|en|thick}}。
===形容詞===
{{head|pdc|形容詞}}
# [[厚]]的
# [[緊密]]的
# [[肥胖]]的
pr56pe49obavjdigd3uty0b522eonct
9759320
9759303
2026-05-14T08:11:56Z
Sayonzei
40728
取消[[Special:Contributions/~2026-28909-66|~2026-28909-66]] ([[User talk:~2026-28909-66|对话]])的编辑;更改回[[Special:Contributions/TongcyBot|TongcyBot]]的最后一个版本
9556599
wikitext
text/x-wiki
{{also|Dick}}
==英语==
===發音===
* {{enPR|dĭk}}, {{ipa|en|/dɪk/}}
* {{audio|en|en-us-dick.ogg|a=美式}}
* {{audio|en|en-uk-dick.ogg|a=英式}}
* {{rhymes|en|ɪk}}
===詞源1===
{{root|en|ine-pro|*h₃reǵ-|*kret-}}
源自{{m|en|Dick}},名字{{m|en|Richard}}的暱稱。最初意思是“普通人”、“凡夫俗子”,后来衍生出其他的含义。
====名詞====
{{wikipedia|lang=en|penis}}
{{en-noun|~}}
# {{lb|en|countable|obsolete}} [[男人]]
# {{lb|en|countable|uncountable|vulgar|slang}} [[陰莖]],[[屌]]
#: {{ux|en|He wore a condom over his '''dick'''.|他在'''阴茎'''上套了个避孕套。}}
#* {{quote-book
|en
|year=1997
|last=Carlin
|first=George
|authorlink=喬治·卡林
|title={{w|lang=en|Brain Droppings}}
|url=https://archive.org/details/isbn_9780786883219/
|location=[[New York]]
|publisher={{w|lang=en|Hyperion Books}}
|ISBN=0-7868-8321-9
|LCCN=96-52373
|OCLC=36084460
|OL=26335012M
|page=83
|pageurl=https://archive.org/details/isbn_9780786883219/page/83/
|text=THINGS YOU NEVER HEAR: "Please stop sucking my '''dick''' or I'll call the police."
|translation=你一定沒有聽過的話:“別嗦我的'''屌'''了,不然我要叫警察。”}}
# {{lb|en|countable|British|US|vulgar|slang|pejorative}} 令人[[不快]]的人
#: {{ux|en|That person is such a '''dick'''.|那个人是'''傻屄'''。}}
# {{lb|en|uncountable|US|Canada|vulgar|slang}} [[什麼]]也[[沒有]]
#: {{ux|en|Last weekend I did '''dick'''.|上周末我'''什么也没'''做。}}
# {{lb|en|uncountable|vulgar|slang}} 與男性[[性交]]
#* '''1991''', quoted in Andrew Parker, ''Nationalisms & Sexualities'', [https://books.google.com/books?id=UEsoAQAAMAAJ&q=%22get+some+dick%22&dq=%22get+some+dick%22&hl=en&sa=X&ved=0ahUKEwipv9m86KLiAhU6xosBHVupDcoQ6AEIbjAN page 309]:
#*: You better try and get some '''dick''' and take your mind off this bullshit.
=====近義詞=====
* {{sense|令人不快的人}} {{l|en|dickhead}}, {{l|en|asshole}}, {{l|en|jerk}}
* {{sense|什麼也沒有}} [[fuck all]]
=====上位詞=====
* {{l|en|genitals}}
=====派生詞=====
{{der3|en|
|baby dick|bee's dick|catch a dick|chick with a dick|coke dick|crystal dick|dick all|dickass|dickbait|dickbag|dickbrain|dickbreath|dickbutt|dickcheese|dicked|dickhead|dickface|dickfest|dickflesh|dickfuck|dickgirl|dickhole|dickitude|dick juice|dickless|dicklet|dick lit|dick-measuring contest|dick milk|dick move|dick munch|dicknut|dickology|dickpic|dick print|dickride|dicksack|dickshit|dicksicle|dickslap|dick smoker|dick snot|dicksplash|dicksplat|dickster|dicksucker|dicktionary|dickwad|dickweasel|dick weed|dickwit|dope dick|eat a dick|get one's dick wet|girldick|horse dick|limp dick|megadick|needle dick|pencil dick|pimple dick|stick one's dick in crazy|suck donkey dick|suck dick|superdick|swinging dick|whiskey dick|with one's dick in one's hand}}
=====派生語彙=====
* {{desc|fi|dikki|bor=1}} {{i|口語|幽默}}
====動詞====
{{en-verb}}
# {{lb|en|transitive|slang|vulgar|常與 ''around'' 或 ''up'' 搭配使用}} [[欺騙]],[[捉弄]],被[[佔便宜]]
#: {{ux|en|Dude, don't let them '''dick''' you around like that!|老弟,別讓他們那麼'''捉弄'''你!}}
# {{lb|en|transitive|slang|vulgar|指男人}} 與……[[性交]]
#* {{quote-book|en|year=1996|author=Clarence Major|title=Dirty bird blues|passage=Listen, this old gal we going to see probably don't like liquor and drinking, so be cool. I'm just gon borrow a few bucks off her. I ain't never '''dicked''' her or nothing.}}
=====近義詞=====
* {{sense|與……性交}} {{l|en|bone}}, {{l|en|go to bed with}}, {{l|en|schlong}}
=====派生詞=====
* {{l|en|dick about}}
* {{l|en|dick around}}
* {{l|en|dick down}}
* {{l|en|dick up}}
===詞源2===
[[detective|de(t)ec(tive)]] 的簡稱及變體。
====名詞====
{{en-noun}}
# {{lb|en|dated|US|slang}} [[偵探]]
#: {{syn|en|detective}}
#: {{ux|en|private '''dick''', railroad '''dick'''|私家'''偵探''',鐵道'''偵探'''}}
#* {{quote-book
|en
|date=1937-11-01
|title={{w|尼羅河謀殺案|Death on the Nile}}
|first=Agatha
|last=Christie
|authorlink=阿加莎·克里斯蒂
|passage=“I am a detective,” said {{w|lang=en|Hercule Poirot}} with the modest air of one who says “I am a king.”<br>“Good God!” The young man seemed seriously taken aback. “Do you mean that girl actually totes about a dumb '''dick'''?”
}}
=====派生詞=====
* {{l|en|private dick}}
* {{l|en|clever dick}}
===詞源3===
[[declaration|dec(laration)]] 的簡稱及變體。
====名詞====
{{en-noun}}
# {{lb|en|obsolete}} [[宣告]]
#* {{quote-book|en|year=1875|author=Mrs. George Croft Huddleston|title=Bluebell|passage="He seems to set a deal of store by her, though. There's some young 'ooman at home, where she lives, I'd take my dying '''dick'''."}}
===詞源4===
{{wikipedia|lang=en|Yan Tan Tethera}}
來自一{{der|en|xcb|-}}數詞,與{{cog|cy|deg}}有關,源自{{der|en|cel-bry-pro|*deg}}。
====數詞====
{{head|en|數詞}}
# {{lb|en|坎布里亞}} [[十]](用於[[數]][[羊]])
=====派生詞=====
{{col4|en
|methera-a-dick
|tethera-a-dick
|tyan-a-dick
|yan-a-dick
}}
=====參見=====
{{list:Borrowdale sheep counting}}
====參考資料====
* {{cite-book
|last=Wirght
|first=Peter
|title=Cumbrian Chat
|year=1995
|publisher=Dalesman Publishing Company
|isbn=185-568-092-0
|page=7
}}
* {{cite-book
|last=Deakin
|first=Michael A.B.
|editor=Leigh-Lancaster, David
|title=The Name of the Number
|year=2007
|url=http://books.google.co.uk/books?id=sSGPsbUdzuMC&printsec=frontcover&dq=The+Name+of+the+Number&client=firefox-a&sig=rltANTWrl82R7Ho4mEv0PivE698
|accessdate=2008-05-17
|publisher=Australian Council for Educational Research
|isbn=0864317573
|page=75
}}
* {{cite-book
|last=Varvogli
|first=Aliki
|title=Annie Proulx's The Shipping News: A Reader's Guide
|year=2002
|url=http://books.google.co.uk/books?id=YwW7f0jB9swC&printsec=frontcover&dq=subject:%22Proulx,+Annie%22&client=firefox-a&sig=1V4j_clhRbrJm7XnesnFDk8NU0Q
|accessdate=2008-05-17
|publisher=Continuum International Publishing Group
|isbn=0826452337
|pages=24-25
}}
===異序詞===
* {{anagrams|en|a=cdik|CDKI|cdki}}
[[Category:英語基數詞]]
[[Category:英語稱謂詞]]
[[Category:英語 人]]
[[Category:英語 性]]
[[Category:英語 十]]
==德語==
===詞源===
{{dercat|de|gem-pro|inh=1}}
來自{{inh|de|gmh|dicke}},來自{{inh|de|goh|dicki}}、{{m|goh|dicchi}}(與{{cog|osx|thikki}}同族),來自{{inh|de|gmw-pro|*þikkwī}}。
對照{{cog|nds|dick}}、{{cog|nl|dik}}、{{cog|en|thick}}、{{cog|da|tyk}}。
===發音===
* {{IPA|de|/dɪk/}}
* {{audio|de|De-dick.ogg}}
* {{rhymes|de|ɪk|s=1}}
===形容詞===
{{de-adj|comp}}
# [[厚]]的
# [[胖]]的
====變格====
{{de-adecl|comp}}
====衍生詞====
* {{l|de|dicklich}}
* {{l|de|dickstielig}}
===延伸閱讀===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
== 漢斯立克語 ==
===詞源===
{{dercat|hrx|gem-pro|inh=1}}
來自{{inh|hrx|gmh|dicke}},來自{{inh|hrx|goh|dicki}}、{{m|goh|dicchi}},來自{{inh|hrx|gmw-pro|*þikkwī}}。
===發音===
* {{IPA|hrx|/tin/}}
===形容詞===
{{head|hrx|形容詞|比較級|dicker|最高級|dickest}}
# [[厚]]的
#: {{ux|hrx|Das Brett is zweu Zentimeter '''dick'''.|這塊木板'''厚'''度2公分。}}
# [[胖]]的
#: {{ux|hrx|Sie is en '''dicke''' Fraa.|她是個'''胖'''女人}}
# [[懷孕]]的
#: {{ux|hrx|Mein Schwesder is schun nommol '''dick'''.|我妹妹已經不能再'''懷孕'''了。}}
====變格====
{{hrx-decl-adj|dick}}
===延伸閱讀===
* [https://hunsriqueanoriograndense.wordpress.com/dicionario-werterbuch/ Online Hunsrik Dictionary]
== 賓夕法尼亞德語 ==
===詞源===
來自{{inh|pdc|gmh|dicke}},來自{{inh|pdc|goh|dicchi}}。對照{{cog|de|dick}}、{{cog|nl|dik}}、{{cog|en|thick}}。
===形容詞===
{{head|pdc|形容詞}}
# [[厚]]的
# [[緊密]]的
# [[肥胖]]的
g5hemgbvn1l04cg4nevnb45parvriy2
você
0
11578
9759333
5053605
2026-05-14T08:56:51Z
TongcyDai
53191
9759333
wikitext
text/x-wiki
{{also|voce|voće|-voce|Voce}}
==加利西亞語==
===詞源===
{{contr|gl|vossa|mercê|lit=您的仁慈}}。
===發音===
{{rfp|gl}}
{{rfap|gl}}
* {{hyph|gl|vo|cê}}
===代詞===
{{head|gl|代詞|g=mfbysense|複數|vocês}}
# {{ng|[[第二人稱]][[單數]][[人稱代詞]]}};[[你]],[[您]]
===延伸閱讀===
* {{R:gl:Estraviz}}
==葡萄牙語==
===詞源===
{{m|pt|vosmecê}} 的詞中音省略,{{m|pt|vossemecê}} 的省略,{{der|pt|roa-opt|[[vossa]] [[mercee]]|lit=您的仁慈}}(如今為 {{m|pt|mercê}})的縮略,源自 {{der|pt|la|vostram}} + {{m|la|mercēdem}}。對照 {{cog|es|usted}}(源自 {{m|es|[[vuestra]] [[merced]]|lit=您的仁慈}})與 {{cog|ca|vostè}}。
===發音===
{{pt-IPA|vòcê}}
* {{IPA|pt|/vɔˈsɐ/|a=聖米格爾島,亞速爾}}
* {{IPA|pt|/se/|a=巴西,非正式}}
* {{audio|pt|LL-Q5146 (por)-JnpoJuwan-você.wav|a=<<Brazil>> (<<São Paulo>>)}}
* {{audio|pt|LL-Q5146 (por)-Santamarcanda-você.wav|a=<<Portugal>> (<<Porto>>)}}
** {{homophones|pt|cê|sê}}
** {{homophones|pt|ser}} {{qualifier|省略 -r}}
* {{rhymes|pt|e|s=2}}
* {{hyphenation|pt|vo|cê}}
===代詞===
{{pt-pron|mfbysense|pl=vocês}}
# {{sid|pt|第二人稱單數代詞}} {{n-g|[[第二人稱]][[單數]][[人稱代詞]],在巴西為正式或非正式用法,在葡萄牙為正式或半正式用法}};[[你]],[[您]]
#: {{syn|pt|tu|o senhor|a senhora}}
#* {{quote-book|pt|year=2003|author=w:en:J. K. Rowling; w:en:Lia Wyler|title=Harry Potter e a Ordem da Fênix|publisher=Rocco|page=227
|passage=Pensei que '''você''' tivesse dito que ela estava só mandando '''você''' escrever!
|t=我還以為'''你'''說過她只是在命令'''你'''寫字呢!}}
# {{sid|pt|不定代詞}} {{non-gloss|[[不定代詞]]}};[[你]],[[人們]],[[有人]]
#: {{ux|pt|'''Você''' pode levar um cavalo até a água, mas não pode fazê-lo beber.|'''你'''可以把馬牽到水邊,但不能強迫牠喝水。}}
====用法說明====
* 在葡萄牙和巴西的部分地區,{{m|pt||você}} 的正式程度介於 {{m|pt|tu}}(親密)和 {{m|pt|o senhor}}(非常正式)之間,通常用於不太親密的場合。
* 在巴西的大部分地區(特別是在東南部,部分城市除外),{{m|pt||você}} 已經取代 {{m|pt|tu}} 成為非正式的第二人稱單數代詞,而 {{m|pt|tu}} 則退居於古舊、詩歌和宗教的用法,就像英語的 {{m|en|thou}} 一樣。在[[南里奧格蘭德州]]、[[里約熱內盧]]、[[聖卡塔琳娜州]]、[[巴西利亞]]和大多數東北部州,{{m|pt|tu}} 用於非常非正式的場合,儘管它通常使用動詞的第三人稱單數變位,類似於許多使用 {{m|es|voseo}} 的西班牙語國家。
* 在不使用 {{m|pt||tu}} 的巴西特有方言中,{{m|pt|teu|Teu}}、{{m|pt|te}}(以及較少使用的 {{m|pt|ti}} 和 {{m|pt|contigo}})常與 {{m|pt||você}} 搭配使用。
* 其複數形式 {{m|pt|vós}} 在現代葡萄牙語中大多已經古舊,被 {{m|pt||vocês}} 所取代,只有一些葡萄牙北部方言例外。
* 儘管 {{m|pt||Você}} 和 {{m|pt|vocês}} 是第二人稱代詞,但它們始終遵循第三人稱的動詞變位。
====其他形式====
* {{alt|pt|vossa mercê|vossemecê|vosmecê||古舊}}
* {{alt|pt|voncê||古舊|巴西|鄉村}}
* {{alt|pt|vossuncê|vassuncê||巴西|鄉村}}
* {{alt|pt|vancê|vacê||巴西|鄉村}}
* {{alt|pt|mecê||巴西|鄉村}}
* {{alt|pt|suncê||巴西|鄉村}}
* {{alt|pt|sossemecê||棄用}}
* {{alt|pt|ocê||巴西|鄉村|視覺方言}}
* {{alt|pt|cê|'cê||巴西|非正式}}
** {{alt|pt|c||簡訊}}
** {{alt|pt|se||非標準|簡訊}}
* {{alt|pt|vc||巴西|簡訊}}
====派生語彙====
* {{desc|abs|ose|bor=1}}
====參見====
{{pt-personal pronouns}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
1f1gfxbfhsw0cvhx32jf2ghbh1c3g7k
nós
0
11587
9759337
6694494
2026-05-14T09:01:39Z
TongcyDai
53191
9759337
wikitext
text/x-wiki
{{also|Appendix:"nos"的變體}}
==阿斯圖里亞斯語==
===其他形式===
* {{l|ast|ñós}}
===詞源===
{{inh+|ast|la|nōs}}。
===代詞===
{{head|ast|代詞}}
# [[我們]]
#: {{syn|ast|nosotros}}
===延伸閱讀===
* {{R:ast:DALLA|id=34838}}
* {{R:ast:DGLA|id=53988}}
==加泰羅尼亞語==
===發音===
* {{ca-IPA}}
===代詞===
{{head|ca|代詞}}
# {{ca-pre-2016|nos|t=[[我們]] {{qualifier|特指「[[尊嚴複數]]」,君主自稱使用的單數代詞}}}}
====用法說明====
* {{U:ca:deprecated use of diacritic}}
==加利西亞語==
===發音===
{{gl-pr|nòs|hmp=noz<q:seseo>}}
===詞源1===
{{inh+|gl|roa-opt|nos}},{{inh+|gl|la|nōs||我們}},{{inh+|gl|itc-pro|*nōs}}。
====代詞====
{{gl-pron|dat=nos|acc=nos}}
# [[我們]]
#: {{syn|gl|nosoutros|nosoutras}}
#: {{ux|gl|A min non se me dá nada , al fin '''nós''' fixemos ben.|我無所謂,反正最後'''我們'''做得很好。}}
====參見====
{{gl-personal pronouns}}
===詞源2===
{{nonlemma}}
====名詞====
{{head|gl|名詞變格形}}
# {{plural of|gl|nó}}
===參考資料===
* {{R:gl:DRAG}}
* {{R:roa-opt:DDGM}}
* {{R:roa-opt:CX}}
* {{R:gl:DDLG}}
* {{R:TLPGP}}
==印度葡萄牙語==
===詞源===
源自{{der|idb|pt|nós||我們}},源自{{der|idb|roa-opt|nos}},源自{{der|idb|la|nōs||我們}}。
===代詞===
{{head|idb|代詞}}
# [[我們]]{{gloss|第一人稱複數人稱代詞}}
#* {{quote-text|idb|year=1883|author=Hugo Schuchardt|title=Kreolische Studien|volume=3
|passage=Trasê tamêm um vaquinh bem gord e matá par '''nós''' comê e par '''nós''' regalá:|t=再帶一頭很胖的小牛來殺掉,給'''我們'''吃,讓'''我們'''盡情享用:}}
==愛爾蘭語==
===發音===
* {{IPA|ga|/n̪ˠõːsˠ/|ref={{R:ga:SjPh|68}}|a=Munster}}
* {{IPA|ga|/n̪ˠuːsˠ/|a=Connacht}}
* {{IPA|ga|/n̪ˠõːsˠ/|ref={{R:ga:Quiggin|17}}|a=Ulster}}
===詞源1===
{{inh+|ga|sga|nós|t=習俗,傳統,先例}},源自一種{{der|ga|cel-bry}}語言(對比{{cog|cy|naws|t=本性,性情}})。
====名詞====
{{ga-noun|m|nóis|~anna}}
# [[習俗]],[[風俗]]
# [[方式]],[[風格]]
=====變格=====
{{ga-decl-m1|n|ós|óis|pl=ósanna|strong=yes}}
=====派生詞彙=====
{{col|ga
|ar nós
|ardnós
|ardnósach
|bun-nós
|dea-nós
|nósmhar
|nósúil
|sean-nós
|ar aon nós
|[[ar nós cuma liom|ar nós cuma]]/[[ar nós chuma liom|chuma liom]]<t:漠不關心的>
}}
====延伸閱讀====
* {{R:ga:Ó Dónaill}}
* {{R:DIL|33303|head=1 nós (‘custom’)}}
===詞源2===
{{inh+|ga|sga|nós|g=m|t=名聲,聲譽}}。
====名詞====
{{ga-noun|m|nóis|-}}
# {{lb|ga|書面}} [[名聲]],[[聲譽]]
=====變格=====
{{ga-decl-m1-nopl|n|ós|óis}}
====延伸閱讀====
* {{R:ga:Ó Dónaill}}
* {{R:DIL|33304|head=2 nós (‘fame, renown’)}}
===參考資料===
{{reflist|尺寸=smaller}}
==米蘭德斯語==
===詞源1===
====代詞====
{{head|mwl|代詞}}
# [[我們]] {{gloss|第一人稱複數代詞}}
===詞源2===
====名詞====
{{head|mwl|名詞變格形}}
# {{plural of|mwl|nó}}
==葡萄牙語==
===詞源1===
{{inh+|pt|roa-opt|nos}},{{inh+|pt|la|nōs||我們}},{{inh+|pt|itc-pro|*nōs}}。
====其他形式====
* {{alt|pt|nos||棄用}}
* {{alt|pt|nòs||棄用}}
* {{alt|pt|nóis||發音拼寫|巴西}}
====發音====
{{pt-IPA}}
* {{homophones|pt|noz}}
* {{hyphenation|pt|nós}}
* {{audio|pt|pt-br-nós.ogg|a=São Paulo}}
====代詞====
{{pt-pron|mfbysense-p}}
# {{non-gloss|第一人稱複數主格人稱代詞}}:[[我們]]
#: {{syn|pt|a gente|q1=非正式|nós outros|q2=棄用}}
#: {{ux|pt|'''Nós''' [[estamos]] aqui.|'''我們'''在這裡。}}
#* {{quote-book
|pt
|year=2008
|author=Tom Azevedo
|title=Me sinto propenso a perdoar os mortos
|pageurl=http://books.google.com.br/books?id=CZVIBQAAQBAJ&pg=PT49#v=onepage&q&f=false
|page=49
|publisher=Clube de Autores
|text='''Nós''' devíamos baixar a cabeça, baixar o topete. E fazer honestamente o nosso trabalho. Parar de invejar o sucesso do outro, de viver sempre tentando dar uma rasteira no nosso colega.
|t='''我們'''應該低頭,放下身段,並且誠實地做好我們的工作。停止嫉妒他人的成功,停止總是試圖絆倒我們的同事。}}
# {{non-gloss|第一人稱複數介詞代詞}}:[[我們]]
#: {{ux|pt|Os pássaros voaram até '''nós'''.|鳥兒朝'''我們'''飛來。}}
# {{lb|pt|巴西|口語|proscribed}} {{ng|第一人稱複數賓格人稱代詞}};[[我們]]
#: {{ux|pt|Ele derrubou '''nós'''!|他把'''我們'''撞倒了!}}
=====用法說明=====
當從句中的動詞為第一人稱複數形式時,主格代詞 ''nós'' 可以省略。
在標準用法中,以下縮合形式通常是強制的,但當使用 {{m|pt|mesmos||我們自己}} 來表示強調時則是可選的:
* {{m|pt|com||和……一起}} + ''nós'' → {{m|pt|connosco}} {{qualifier|葡萄牙}}、{{m|pt|conosco}} {{qualifier|巴西}}
在口語中使用該代詞(而非 ''[[a gente]]'')的巴西人可能不會縮合,而是使用 ''com nós''。他們也可能將 ''nós'' 與第三人稱單數動詞連用。這些用法極不規範,但很常見。
====參見====
{{pt-personal pronouns}}
===詞源2===
{{nonlemma}}
====發音====
{{pt-IPA|nóss}}
* {{homophones|pt|noz}}
* {{hyphenation|pt|nós}}
====名詞====
{{head|pt|名詞變格形|g=m}}
# {{plural of|pt|nó}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
==上索布語==
{{Wiktionary:圖片詞典/hsb:hłowa}}
===詞源===
{{inh+|hsb|sla-pro|*nȍsъ}}。
===發音===
* {{hsb-IPA}}
* {{rhymes|hsb|ʊs|s=1}}
* {{hyph|hsb|nós}}
* {{hyph|hsb|caption=音節化|nós}}
===名詞===
{{hsb-noun|m-in}}
# {{lb|hsb|解剖學}} [[鼻子]]{{gl|臉部的突出部分,位於嘴巴上方,鼻腔的前部所在處,構成嗅覺器官}}
====變格====
{{hsb-ndecl|m.#}}
===延伸閱讀===
* {{R:hsb:Mudra}}
* {{R:hsb:Soblex}}
{{c|hsb|臉}}
kx0pqbiepboprnhopjzu96k0b2m625q
Buch
0
13461
9759290
9117178
2026-05-14T02:48:15Z
Apisite
85347
9759290
wikitext
text/x-wiki
{{also|buch|buc̣h|búch|büch}}
==德語==
[[Image:Pieni2.jpg|thumb|ein ''Buch'']]
===發音===
* {{IPA|de|/buːχ/}}
* {{audio|de|de-Buch.ogg}}
* {{audio|de|De-Buch2.ogg}}
===名詞===
{{de-noun-info|n|Buches|gen2=Buch|Bücher}}
# [[書]]
#: ''Ein '''Buch''' zu schreiben dauert oft mehrere Jahre.''
#:: 寫一本書經常要花上幾年的時間。
====變格====
{{de-decl-noun-n|(e)s|pl=Bücher}}
====派生詞====
{{top3}}
* [[Handbuch]]
* [[Hörbuch]]
* [[Jahrbuch]]
* [[Jugendbuch]]
* [[Kinderbuch]]
* [[Lehrbuch]]
* [[Notizbuch]]
* [[Sachbuch]]
* [[Tagebuch]]
* [[Taschenbuch]]
* [[Gesangbuch]]
{{mid3}}
* [[Geschichtsbuch]]
* [[Gesetzbuch]]
* [[Kochbuch]]
* [[Liederbuch]]
* [[Physikbuch]]
* [[Religionsbuch]]
* [[Strafgesetzbuch]]
* [[Wörterbuch]]
* [[Drehbuch]]
* [[Adressbuch]]
* [[Fahrtenbuch]]
{{mid3}}
* [[Gästebuch]]
* [[Geschäftsbuch]]
* [[Grundbuch]]
* [[Hauptbuch]]
* [[Kassenbuch]]
* [[Klassenbuch]]
* [[Kursbuch]]
* [[Logbuch]]
* [[Ringbuch]]
* [[Schwarzbuch]]
* [[Studienbuch]]
* [[Telefonbuch]]
* [[Wimmelbuch]]
{{bottom}}
{{de-cat|Book}}
jqx2v7khoj0qqjdx1ad99j1vbujfpbd
biopsy
0
23940
9758846
8435243
2026-05-13T16:19:13Z
Chihunglu83
87715
9758846
wikitext
text/x-wiki
==英语==
===發音===
* {{IPA|en|/ˈbaɪɑpsi/|a=GA}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-biopsy.wav|a=Southern England}}
活检、活组织检查
[[Category:英語]]
[[Category:拉丁文字]]
[[Category:英语名词]]
[[Category:英语动词]]
maic30kc26oaeo2mvkve2nyof8usum9
Category:藝術
14
28389
9758811
8416004
2026-05-13T16:11:10Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758811
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:音樂
14
28390
9758780
7033162
2026-05-13T16:10:08Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758780
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:城市
14
28391
9758770
7033045
2026-05-13T16:09:46Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758770
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:社會科學
14
28393
9758831
8415999
2026-05-13T16:11:52Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758831
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:科學
14
28397
9758663
8415893
2026-05-13T16:05:29Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758663
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:地質學
14
41782
9758769
7033039
2026-05-13T16:09:44Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758769
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:政府
14
41783
9758810
7033131
2026-05-13T16:11:08Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758810
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:佛教
14
59592
9758732
7033059
2026-05-13T16:08:24Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758732
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:化學
14
114985
9758801
7802128
2026-05-13T16:10:52Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758801
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:情緒
14
116835
9758792
7033123
2026-05-13T16:10:33Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758792
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:顏色
14
116836
9758729
7033122
2026-05-13T16:08:18Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758729
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:時間
14
116837
9758818
7033083
2026-05-13T16:11:23Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758818
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:動物
14
116841
9758841
7033091
2026-05-13T16:12:11Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758841
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ravin
0
127723
9758875
6657039
2026-05-13T23:13:33Z
Apisite
85347
/* 英語 */ + en-verb
9758875
wikitext
text/x-wiki
==英語==
===發音===
* {{enPR|răvʹən}}, {{IPA|en|/ˈɹævən/}}
* {{rhymes|en|ævən}}
===動詞===
{{en-verb}}
# [[掠奪]]
# [[獵食]]
# 掠奪物
[[Category:英語]]
3sfpacrzl7p8oopq9d0pzdufhxop40x
生命
0
138016
9758864
9728664
2026-05-13T18:48:35Z
Jiba1219
110530
/* 日語 */
9758864
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
===發音===
{{zh-pron
|m=shēngmìng
|m-nj=sènmīn
|c=sang1 ming6
|ca=LL-Q9186-Luilui6666-生命.wav
|h=pfs=sên-miang/sâng-miang;hrs=h:senˋ miang˖
|md=sĕng-mêng
|mn=xm,zz,tw:seng-bēng/qz:sng-bēng/twvk:seⁿ-miā/twvt:siⁿ-miā
|mn-t=sêng1 mêng6
|w=sh:1sen min
|ma=Zh-shengmìng.ogg
|mc=1,y
|oc=1;y
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|countable|uncountable}} [[生物]][[生存]]的[[壽命]]{{zh-mw|m,c:個|m,c:條}}
#: {{zh-x|生命 寶貴}}
#: {{zh-x|浪費 生命}}
#: {{zh-x|外星 生命}}
#: {{zh-x|生命 的 意義}}
#: {{zh-x|危及 到 某人 的 生命}}
#: {{zh-x|珍惜 生命,拒絕 毒品。}}
#: {{zh-x|死亡 不 是 生命 的 終點,遺忘 才 是。}}
# [[活著]]的生物
#: {{zh-x|可愛 的 小 生命}}
# {{lb|zh|figuratively}} 某種[[活動]][[延續]]的[[期間]]
#: {{zh-x|政治 生命}}
#: {{zh-x|教育 生命}}
#: {{zh-x|職業 生命}}
# 形容[[藝術]][[作品]]十分[[靈活]][[生動]]
#: {{zh-x|這 是 一-幅 有 生命 的 畫。}}
====同義詞====
{{syn-saurus|zh|性命}}
====衍生詞====
{{col3|zh|生命力|生命線|小生命|無生命|新生命|生命保險|生命器官|生命形式|生命科學|生命週期|生命徵象|生命教練|生命跡象|生命體徵|生命遊戲|生命體}}
====派生詞====
{{CJKV||せいめい|생명|sinh mệnh}}
====翻譯====
{{trans-top|生物生存的壽命}}
* 阿布哈茲語:{{t|ab|аҟазаара}}
* 西切爾克斯語:{{t|ady|щыӏэныгъ}}、{{t|ady|гъашӏэ}}、{{t|ady|щыӏакӏэ}}
* 南非語:{{t+|af|lewe}}
* 阿洪姆語:{{t|aho|𑜋𑜄𑜫}}
* 阿卡德語:{{t|akk|𒍣|tr=napištu}}
* 阿爾巴尼亞語:{{t+|sq|jetë|f}}、{{t|sq|roni|f}} {{qualifier|古舊}}
* 阿姆哈拉語:{{t+|am|ህይወት}}
* 阿美語:{{t|ami|'orip}}
* 阿帕契語:
*: 西阿帕契語:{{t|apw|ʼihiʼda}}
* 阿拉伯語:{{t+|ar|حَيَاة|f}}
*: 埃及阿拉伯語:{{t|arz|حياة|f|tr=ḥayē}}
*: 漢志阿拉伯語:{{t|acw|حياة|f|tr=ḥayā}}
*: 黎巴嫩阿拉伯語:{{t+|ar|حياة|f|tr=ḥayēt}}
*: 摩洛哥阿拉伯語:{{t+|ar|حياة|f|tr=ḥayēt}}
*: 南黎凡特阿拉伯語:{{t|ajp|حياة|f|tr=ḥayā}}
*: 突尼斯阿拉伯語:{{t+|ar|حياة|f|tr=ḥayēt}}
* 亞拉姆語:
*: 希伯來語:{{t|arc|חיא|m-p|tr=ħayē}}
*: 敘利亞字母:{{t|arc|ܚܝܐ|m-p|tr=ħayē}}
* 亞美尼亞語:{{t+|hy|կյանք}}
* 阿羅馬尼亞語:{{t|rup|banã|f}}、{{t|rup|yeatsã|f}}、{{t|rup|etã|f}} {{qualifier|比喻}}
* 阿薩姆語:{{t|as|জীউ}}、{{t|as|জীৱন}}、{{t|as|জান}}、{{t|as|পৰাণ}}
* 阿斯圖里亞斯語:{{t+|ast|vida|f}}
* 特索語:{{t|teo|akijara}}
* 阿瓦爾語:{{t|av|гӏумру}}
* 阿維斯陀語:{{t|ae|𐬔𐬀𐬌𐬌𐬊|m}}
* 艾馬拉語:{{t|ay|jakaña}}、{{t|ay|jaka}}
* 阿塞拜疆語:{{t+|az|həyat}}、{{t|az|yaşam}}、{{t|az|dirim}}、{{t+|az|ömür}}、{{t+|az|can}}
* 巴厘語:{{t|ban|jiwa}}
* 巴什基爾語:{{t|ba|тормош}}、{{t|ba|ғүмер}}、{{t|ba|йөрөм}}
* 巴斯克語:{{t|eu|bizi}}、{{t+|eu|bizitza}}
* 白俄羅斯語:{{t|be|жыццё|n}}、{{t|be|жыцьцё|n}} {{qualifier|傳統正寫法}}
* 孟加拉語:{{t+|bn|জীবন}}、{{t+|bn|জিন্দেগী}}
* 柏柏爾語族:
*: 施盧赫語:{{t|shi|tudrt|f}}
* 博杰普爾語:{{t|bho|जीवन|m}}
* 中比科爾語:{{t+|bcl|buhay}}
* 邦吉語:{{t|bdg|nyawa}}
* 布列塔尼語:{{t+|br|buhez|f}}
* 保加利亞語:{{t+|bg|живо́т|m}}
* 緬甸語:{{t+|my|အသက်}}、{{t+|my|ဇီဝ}}、{{t+|my|ဇာတ်}}
* 布里亞特語:{{t|bua|амин}}、{{t|bua|амидарал}}、{{t|bua|ажамидарал}}
* 盧森尼亞語:{{t|rue|жыво́т|m}}
* 加泰羅尼亞語:{{t+|ca|vida|f}}
* 宿霧語:{{t|ceb|kinabuhi}}
* 車臣語:{{t|ce|дахар}}、{{t|ce|са}}
* 切羅基語:{{t|chr|ᎥᎴᏂᏙᎲ}}
* 齊切瓦語:{{t|ny|moyo}}
* 楚科奇語:{{t|ckt|ягтаԓгыргын|tr=jagtaḷgyrgyn}}
* 楚克語:{{t|chk|manau}}
* 楚瓦什語:{{t|cv|пурнӑҫ}}
* 古典納瓦特爾語:{{t|nci|yōliliztli}}、{{t|nci|nemiliztli}}
* 科普特語:{{t|cop|ⲱⲛϧ|m}}、{{t|cop|ⲱⲛϩ|m}}
* 康沃爾語:{{t|kw|bewnans|m}}、{{t|kw|bownans|m}}、{{t|kw|bêwnans|m}}、{{t|kw|bôwnans|m}}
* 科西嘉語:{{t+|co|vita|f}}
* 克里米亞韃靼語:{{t|crh|ayat}}
* 捷克語:{{t+|cs|život|m}}、{{t|cs|žití|n}}
* 達爾馬提亞語:{{t|dlm|vaita|f}}
* 丹麥語:{{t+|da|liv|n}}
* 迪維希語:{{t|dv|ޙަޔާތު}}
* 東鄉語:{{t|sce|amin}}
* 荷蘭語:{{t+|nl|leven|n}}
* 東馬里語:{{t|mhr|илыш}}
* 埃及語:{{t-egy|ꜥnḫ|m|h=anx-n:x}}
* 埃爾夫達利安語:{{t|ovd|liv|n}}、{{t|ovd|laiv|n}}
* 英語:{{t+|en|life}}
* 埃爾齊亞語:{{t|myv|эрямо}}
* 世界語:{{t+|eo|vivo}}、{{t|eo|vivado}}
* 愛沙尼亞語:{{t+|et|elu}}
* 埃維語:{{t|ee|agbe}}
* 法羅語:{{t|fo|lív|n}}、{{t|fo|ævi|f}}
* 斐濟印地語:{{t+|hif|jindagi}}
* 斐濟語:{{t+|fj|bula}}
* 芬蘭語:{{t+|fi|elämä}}、{{t+|fi|henki}} {{qualifier|受到威脅時}}、{{t+|fi|nirri}} {{qualifier|口語}}、{{t+|fi|elo}}
* 法蘭克-普羅旺斯語:{{t|frp|via|f}}
* 法語:{{t+|fr|vie|f}}
* 弗留利語:{{t|fur|vite|f}}
* 富拉語:{{t|ff|nguurndam}}
* 加告茲語:{{t|gag|ömür}}
* 加利西亞語:{{t+|gl|vida|f}}
* 加里富納語:{{t|cab|ibagari}}
* 格魯吉亞語:{{t|ka|სიცოცხლე}}、{{t|ka|ცხოვრება}}
* 德語:{{t+|de|Leben|n}}
*: 阿勒曼尼語:{{t|gsw|Läbe|n}}
*: 賓夕法尼亞德語:{{t|pdc|Lewe|n}}
* 哥特語:{{t|got|𐌻𐌹𐌱𐌰𐌹𐌽𐍃|f}}
* 希臘語:{{t+|el|ζωή|f}}、{{t+|el|βίος|m}}
*: 古希臘語:{{t|grc|ζωή|f}}、{{t|grc|βίος|m}}、{{t|grc|ψῡχή|f}}
* 格陵蘭語:{{t|kl|inuuneq}}
* 古吉拉特語:{{t|gu|જીવન|n}}、{{t|gu|જિંદગી|f}}
* 海地克里奧爾語:{{t|ht|lavi}}
* 豪薩語:{{t|ha|rai|m}}
* 夏威夷語:{{t|haw|ola}}
* 希伯來語:{{t+|he|חַיִּים|m-p|tr=khayím}}
* 希高農語:{{t|mba|gahinawa}}
* 希利蓋農語:{{t|hil|kabuhi}}
* 印地語:{{t+|hi|ज़िंदगी|f|tr=zindagī}}、{{t+|hi|जीवन|m}}、{{t+|hi|हयात|f}}、{{t+|hi|जी|m}}、{{t+|hi|प्राण|f}}、{{t+|hi|जीना}}、{{t+|hi|लाइफ|m}}、{{t|hi|लाइफ़|m}}、{{t+|hi|जीव|m}}、{{t+|hi|जीवित|m}}、{{t+|hi|जान|f}}、{{t+|hi|उमर|f}}
* 霍皮語:{{t|hop|qatsi}}
* 匈牙利語:{{t+|hu|élet}}
* 漢斯立克語:{{t|hrx|Leve|n}}
* 冰島語:{{t+|is|líf|n}}、{{t|is|fjör|n}}、{{t+|is|lífdagar|m-p}}、{{t+|is|ævi|f}}
* 伊多語:{{t+|io|vivo}}
* 伊博語:{{t+|ig|ndụ}}
* 伊洛卡諾語:{{t|ilo|biag}}
* 印尼語:{{t+|id|hidup}}
* 英格里亞語:{{t|izh|elo}}
* 因特語:{{t+|ia|vita}}
* 伊努皮克語:{{t|ik|iñuggun}}、{{t|ik|iñuułiq}}
* 愛爾蘭語:{{t|ga|saol|m}}、{{t|ga|beatha|f}}、{{t+|ga|beo|m}}
* 伊斯特拉語:{{t|ist|veîta|f}}
* 意大利語:{{t+|it|vita|f}}
* 伊捷爾緬語:{{t|itl|соњԓэс|tr=soňɬes}}
* 日語:{{t+|ja|命|tr=いのち, inochi}}、{{t+|ja|生命|tr=せいめい, seimei}}
* 爪哇語:{{t+|jv|urip}}、{{t+|jv|nyawa}}、{{t+|jv|umur}}
* 猶太-意大利語:{{t|itk|וִיטַה|tr=viṭah|ts=vita}}
* 東切爾克斯語:{{t+|kbd|гъащӏэ}}
* 卡納達語:{{t+|kn|ಜೀವನ}}、{{t+|kn|ಪ್ರಾಣ}}、{{t+|kn|ಜೀವ}}
* 卡片片甘語:{{t|pam|kabilian}}、{{t|pam|bie}}
* 喀克其奎語:{{t|cak|k’aslemal}}
* 卡拉恰伊-巴爾卡爾語:{{t|krc|джашау}}
* 卡拉卡爾帕克語:{{t|kaa|júrim}}
* 卡累利阿語:{{t|krl|eländy}}
* 卡舒比語:{{t|csb|żëcé|n}}、{{t|csb|żëwòt|m}}
* 哈薩克語:{{t+|kk|өмір}}、{{t|kk|тұрмыс}}
* 哈卡斯語:{{t|kjh|чуртас}}
* 高棉語:{{t+|km|ជីវិត}}、{{t+|km|ជីព}}、{{t+|km|ជន្មា}}、{{t+|km|ឋិតិ}}
* 基庫尤語:{{t|ki|muoyo|c3}}
* 彼爾姆科米語:{{t|koi|олӧм}}
* 朝鮮語:{{t+|ko|생명(生命)}}、{{t+|ko|삶}}、{{t+|ko|생활(生活)}}
* 庫梅克語:{{t|kum|оьмюр}}、{{t|kum|яшав}}
* 國頭語:{{t|xug|命|tr=いぬちー, inuchī, ぬちー, nuchī}}
* 庫爾德語:
*: 中庫爾德語:{{t+|ckb|ژین}}
*: 北庫爾德語:{{t+|kmr|jiyan|f}}
* 吉爾吉斯語:{{t+|ky|өмүр}}、{{t+|ky|турмуш}}、{{t+|ky|жашоо}}
* 拉登語:{{t|lld|vita|f}}
* 拉蒂諾語:{{t|lad|vida|f}}
* 拉科塔語:{{t|lkt|wičhóni}}
* 老撾語:{{t+|lo|ຊີວິດ}}
* 拉特加萊語:{{t|ltg|dzeive|f}}
* 拉丁語:{{t+|la|anima|f}}、{{t+|la|vīta|f}}、{{t+|la|lūx|f}}
* 拉脫維亞語:{{t+|lv|dzīve|f}}、{{t|lv|mūžs|m}}
* 拉茲語:{{t|lzz|skidala}}
* 列茲金語:{{t|lez|уьмуьр}}、{{t|lez|ччан}}
* 林堡語:{{t+|li|laeve|n}}
* 林加拉語:{{t|ln|bomɔi|c14}}
* 立陶宛語:{{t+|lt|gyvenimas|m}}、{{t+|lt|gyvybė|f}}
* 低地德語:
*: 德國低地德語:{{t|nds-de|Lȩben|n}}、{{t|nds-de|Läwen|n}}、{{t|nds-de|Lewen|n}}、{{t|nds-de|Liäwen|n}} {{qualifier|西發里亞}}、{{t|nds-de|Lewend|n}}; {{t|nds-de|Liiw|n}}
* 呂勒薩米語:{{t|smj|iellem}}
* 盧歐語:{{t|luo|ngima}}
* 勞圖欽語:{{t|clt|hringna}}
* 盧森堡語:{{t|lb|Liewen|n}}
* 馬其頓語:{{t+|mk|живот|m}}、{{t|mk|живеење|n}}、{{t|mk|живеачка|f}}
* 馬京達瑙語:{{t|mdh|kauyag}}
* 馬拉加斯語:{{t+|mg|fahavelomana}}
* 馬來語:{{t+|ms|hidup}}、{{t+|ms|kehidupan}}、{{t+|ms|nyawa}}、{{t+|ms|hayat}}
* 馬拉雅拉姆語:{{t+|ml|ജീവിതം}}
* 馬爾他語:{{t|mt|ħajja|f}}
* 滿語:{{t|mnc|ᡝᡵᡤᡝᠨ}}、{{t|mnc|ᠰᡠᡵᡝ ᡶᠠᠶᠠᠩᡤᠠ}}
* 曼達安語:{{t|mid|ࡄࡉࡉࡀ|tr=haije}}
* 曼島語:{{t|gv|bea|f}}
* 毛利語:{{t|mi|koiora}}、{{t|mi|ora}}
* 馬普切語:{{t|arn|mogen}}
* 馬拉瑙語:{{t|mrw|niyawa}}
* 馬拉地語:{{t|mr|जीवन|m}}
* 姆比亞瓜拉尼語:{{t|gun|eko}}
* 明格列爾語:{{t|xmf|თელარა}}
* 米蘭德斯語:{{t|mwl|bida|f}}
* 宮古語:{{t|mvi|命|tr=んぬつ, nnutsu}}
* 米佐語:{{t|lus|nunna}}、{{t|lus|damchhûng}}
* 默切諾語:{{t|mhn|lem|n}}
* 莫克沙語:{{t|mdf|эряф}}
* 孟語:{{t|mnw|လမျီူ|tr=pəyɜ̀m}}、{{t|mnw|ဂယိုၚ်|tr=həyàŋ}}
* 蒙古語:
*: 西里爾字母:{{t+|mn|амь}}、{{t+|mn|амьдрал}}
* 納瓦特爾語:{{t|nah|yōliztli}}、{{t|nah|yolistli}}、{{t+|nah|nemiliztli}}
* 納瓦霍語:{{t|nv|iiná}}
* 那不勒斯語:{{t|nap|vita|f}}
* 尼泊爾語:{{t+|ne|जीवन}}、{{t|ne|जिन्दगी|}}
* 恩加納桑語:{{t|nio|нилу|tr=nilu}}
* 大科摩羅語:{{t|zdj|hayati|c9|c10}}、{{t|zdj|maesha|c9|c10}}
* 北弗里斯蘭語:{{t|frr|laawen|n}} {{qualifier|博京哈德}}
* 北卡坦端內斯比科拉諾語:{{t|cts|buhay}}
* 北薩米語:{{t|se|eallin}}、{{t|se|heagga}}
* 北尤卡吉爾語:{{t|ykg|эдьил}}
* 挪威語:
*: 書面挪威語:{{t+|nb|liv|n}}
*: 新挪威語:{{t|nn|liv|n}}
* 奧克語:{{t+|oc|vida|f}}
* 奧利亞語:{{t+|or|ଜୀବନ}}
* 奧吉布瓦語:{{t|oj|bimaadiziwin}}
* 沖繩語:{{t|ryu|命|tr=いぬち, inuchi, ぬち, nuchi}}
* 古教會斯拉夫語:
*: 西里爾字母:{{t|cu|животъ|m}}、{{t|cu|жизнь|f}}、{{t|cu|жить|f}}、{{t|cu|житьѥ|n}}
* 古東斯拉夫語:{{t|orv|жизнь|f}}、{{t|orv|животъ|m}}
* 古英語:{{t|ang|līf|n}}
* 古高地德語:{{t|goh|ferah}}
* 古爪哇語:{{t|kaw|hurip}}
* 古南阿拉伯語:{{t|sem-srb|𐩢𐩺𐩥|tr=ḥyw}}
* 奧羅莫語:{{t|om|jiruu}}、{{t|om|lubbuu}}
* 鄂倫春語:{{t|orh|bardilga}}
* 奧斯坎語:{{t|osc|𐌁𐌉𐌉𐌕𐌀𐌌}}
* 奧塞梯語:{{t|os|цард}}
* 巴利語:{{t|pi|jīvita}}
* 班詩蘭語:{{t|pag|bilay}}
* 潘諾尼亞盧森尼亞語:{{t|rsk|живот|m}}、{{t|rsk|житиє|n}}
* 帕皮阿門托語:{{t|pap|bida}}
* 普什圖語:{{t+|ps|ژوند|m|tr=žwənd}}、{{t+|ps|حيات|tr=hayãt|m}}
* 波斯語:
*: 達利波斯語:{{t|prs|زِنْدَگِی}}、{{t|prs|زِنْدَه}}、{{t|prs|حَیَات}}、{{t|prs|زِیسْت}}、{{t|prs|زِنْدَگَانِی}}
*: 伊朗波斯語:{{t|fa-ira|زِنْدِگی}}、{{t|fa-ira|زِنْدِه}}、{{t|fa-ira|حَیات}}、{{t|fa-ira|زیسْت}}、{{t|fa-ira|زِنْدِگانی}}
* 皮埃蒙特語:{{t|pms|vita|f}}
* 波拉布語:{{t|pox|zaivăt|m}}
* 波蘭語:{{t+|pl|życie|n}}、{{t+|pl|żywot|m}}
* 葡萄牙語:{{t+|pt|vida|f}}
* 旁遮普語:{{t|pa|ਜੀਵਨ|m}}
* 克丘亞語:{{t+|qu|kawsay}}
* 羅姆語:{{t|rom|trajo|m}}、{{t|rom|ʒivipen|m}}、{{t|rom|ʒivimos|m}}、{{t|rom|ʒivibo|m}}
* 羅馬尼亞語:{{t+|ro|viață|f}}
* 羅曼什語:{{t|rm|vita|f}}
* 俄語:{{t+|ru|жизнь|f}}、{{t+|ru|житие́|f}} {{qualifier|古舊,詩歌語}}、{{t+|ru|живо́т|m}} {{qualifier|古舊,詩歌語,現在所用的意思是“肚子”}}、{{t+|ru|житьё|n}} {{qualifier|口語}}
* 盧旺達語:{{t|rw|ubuzima|c14}}
* 梵語:{{t+|sa|जीवन}}、{{t+|sa|जीवित|n}}、{{t+|sa|आयु|m}}
* 桑塔利語:{{t|sat|ᱪᱳᱞᱚ}}
* 撒丁語:{{t|sc|bida|f}}、{{t|sc|vida|f}}
*: 坎皮達諾方言:{{t|sc|vida|f}}
*: 洛古多羅方言:{{t|sc|bida|f}}
* 蘇格蘭蓋爾語:{{t|gd|beatha|f}}、{{t|gd|saoghal|m}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|жѝвот|m}}
*: 拉丁字母:{{t+|sh|žìvot|m}}
* 撣語:{{t|shn|ဢသၢၵ်ႈ}}
* 夏爾巴語:{{t|xsr|ཚེ|tr=tshe}}
* 紹爾語:{{t|cjs|чадығ|tr=çadığ}}
* 西雅爾-拉克語:{{t|sjr|lalaun}}
* 西西里語:{{t+|scn|vita|f}}
* 希達摩語:{{t|sid|heeshsho}}
* 錫金語:{{t|sip|སྐུ་ཚེ}}
* 信德語:{{t|sd|چٺي|tr=čiṫhī|alt=چِٺيِ}}、{{t|sd|خط|tr=xaṭu|alt=خَطُ}}
* 僧加羅語:{{t+|si|ජීවිතය}}、{{t+|si|ජීවය}}
* 斯洛伐克語:{{t+|sk|život|m}}
* 斯洛文尼亞語:{{t+|sl|življenje|n}}
* 索布語:
*: 夏索布語:{{t|dsb|žywjenje|n}}
*: 上索布語:{{t|hsb|žiwjenje|n}}
* 南阿爾泰語:{{t|alt|јӱрӱм}}、{{qualifier|图巴拉尔}}、{{t|alt|туруш}}、{{t|alt|јадыш}}
* 南奄美大島語:{{t|ams|命|tr=っにゅち, 'nnyuuchi}}
* 西班牙語:{{t+|es|vida|f}}
* 蘇美爾語:{{t|sux|𒍣|tr=ZI}}
* 巽他語:{{t|su|ᮠᮤᮛᮥᮕ᮪}}
* 斯凡語:{{t|sva|ლიდრე}}
* 斯瓦希里語:{{t+|sw|uhai|c11|c12}}、{{t+|sw|maisha|c5|c6}}
* 瑞典語:{{t+|sv|liv|n}}、{{t+|sv|levnad|c}}
* 他加祿語:{{t+|tl|buhay}}
* 塔吉克語:{{t+|tg|ҳаёт}}、{{t+|tg|зиндагӣ}}、{{t+|tg|зиндагонӣ}}
* 泰米爾語:{{t+|ta|உயிர்}}、{{t+|ta|வாழ்க்கை}}
* 里菲安語:{{t|rif|tudart|f}}
* 韃靼語:{{t+|tt|тереклек}}、{{t+|tt|тормыш}}、{{t+|tt|гомер}}
* 泰盧固語:{{t+|te|జీవితము}}、{{t+|te|ప్రాణము}}、{{t+|te|ఉసురు}}、{{t+|te|జీవము}}
* 德頓語:{{t|tet|vida}}
* 泰語:{{t+|th|ชีวิต}}
* 藏語:{{t|bo|ཚེ}}、{{t|bo|ཚེ་སྲོག}}
* 提格里尼亞語:{{t|ti|ሂወት}}
* 吐火羅語B:{{t|txb|śaul}}
* 圖法語:{{t|kim|олут|tr=olut}}
* 托克皮辛語:{{t|tpi|laip}}
* 聰加語:{{t|ts|vutomi|c14}}
* 茨瓦納語:{{t|tn|botshelô|c14}}
* 土耳其語:{{t+|tr|yaşam}}、{{t+|tr|hayat}}、{{t+|tr|ömür}}、{{t+|tr|dirim}}
* 土庫曼語:{{t|tk|durmuş}}、{{t|tk|ýaşaýyş}}、{{t|tk|ömür}}
* 佐齊爾語:{{t|tzo|kuxlejal}}
* 烏得穆爾特語:{{t|udm|улон}}
* 烏加里特語:{{t|uga|𐎈𐎊𐎚}}
* 烏克蘭語:{{t+|uk|життя́|n}}
* 烏爾都語:{{t+|ur|زِنْدَگی|f}}、{{t|ur|جِیوَن|m}}、{{t+|ur|حَیات|f}}、{{t|ur|آرْبَل|f}}
* 維吾爾語:{{t|ug|ھايات}}
* 烏茲別克語:{{t+|uz|hayot}}、{{t+|uz|umr}}、{{t+|uz|turmush}}
* 威尼斯語:{{t|vec|vita|f}}
* 維普斯語:{{t|vep|elo}}
* 越南語:{{t+|vi|sự sống}}、{{t+|vi|cuộc sống}}、{{t+|vi|sinh mệnh}}、{{t+|vi|sinh mạng}}
* 維拉莫維安語:{{t|wym|łaowa|n}}
* 佛羅語:{{t|vro|elo}}
* 沃特語:{{t|vot|elo}}
* 烏雷斯語:{{t|msn|ēs}}
* 瓦隆語:{{t+|wa|veye|f}}
* 瓦瑞瓦瑞語:{{t|war|kinabuhi}}
* 威爾士語:{{t+|cy|bywyd|m}}
* 西弗里斯蘭語:{{t|fy|libben|n}}
* 白苗語:{{t|mww|txoj sia}}
* 雅庫特語:{{t|sah|олох}}
* 耶夸納語:{{t|mch|wenñö}}
* 意第緒語:{{t|yi|לעבן|n}}、{{t|yi|חיים|m|tr=khayem}}
* 約拉語:{{t|yol|lief}}
* 與那國語:{{t|yoi|命|tr=ぬてぃ, nuti}}
* 尤卡坦瑪雅語:{{t|yua|kuxtal}}
* 扎扎其語:{{t+|zza|heyat|c}}、{{t+|zza|cıwayış}}
* 壯語:{{t|za|sengmingh}}、{{t|za|mingh}}、{{t|za|ndwenngoenz}}
* 祖魯語:{{t|zu|ukuphila}}、{{t|zu|impilo|c9}}
{{trans-bottom}}
====參見====
* {{zh-l|人生}}
* {{zh-l|生活}}
{{zh-cat|Elementary}}
==日語==
{{ja-kanjitab|せい|めい|yomi=kanon}}
===發音===
{{ja-pron|せいめい|acc=1|acc_ref=NHK}}
===名詞===
{{ja-noun|せいめい}}
# [[生物]][[生存]]的[[壽命]]
====參見====
* {{l|ja|Appendix:明治版聖經義訓用法/生命}}
===來源===
<references/>
:* {{R:Kanjipedia Kotoba|0003844100}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hj|hangeul=생명}}
# {{hanja form of|생명}}
==越南語==
{{vi-hantutab}}
===名詞===
{{vi-noun|sc=Hani}}
# {{vi-Han form of|sinh mệnh}}
5m8v79rzvfijv5sht8vemgzswj4ixps
Category:蔬菜
14
141918
9758755
7033170
2026-05-13T16:09:13Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758755
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:伊斯蘭教
14
141939
9758756
7033057
2026-05-13T16:09:15Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758756
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:宗教
14
141963
9758827
7033061
2026-05-13T16:11:43Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758827
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:首都
14
142030
9758730
7033106
2026-05-13T16:08:20Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758730
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:豬
14
146168
9758668
7049515
2026-05-13T16:05:59Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758668
wikitext
text/x-wiki
{{sisterlinks|Category:Suidae}}
{{wikipedia|category=豬}}
{{auto cat}}
cdxrpw30cju3alnx5os3i484b55vcwz
Category:哺乳動物
14
146169
9758829
7147148
2026-05-13T16:11:47Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758829
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:脊椎動物
14
146170
9758838
8416002
2026-05-13T16:12:05Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758838
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:物理學
14
146507
9758809
7033066
2026-05-13T16:11:06Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758809
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:數學
14
146508
9758820
7033135
2026-05-13T16:11:27Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758820
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:計算機科學
14
146512
9758757
7033149
2026-05-13T16:09:17Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758757
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:人
14
147179
9758823
7033108
2026-05-13T16:11:33Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758823
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:文化
14
295192
9758840
7033063
2026-05-13T16:12:09Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758840
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Template:Navbar
10
384298
9758651
7639328
2026-05-13T12:50:32Z
TongcyDai
53191
9758651
wikitext
text/x-wiki
<includeonly>{{#if:{{{nodiv|}}}| <span|<div}} class="noprint plainlinks navbar" style="background:none; padding:0; font-weight:normal;{{{fontstyle|}}}; font-size:xx-small; {{{style|}}}"><!--
-->{{#if:{{{mini|}}}{{{plain|}}}|<!--nothing-->|<!--else:
-->This box: }}<!--
-->{{#if:{{{brackets|}}}|[}}<!--
-->[[{{transcluded pagename|{{{1}}}}}|<span title="檢視該模板" style="{{{fontstyle|}}}"><!--
-->{{#if:{{{mini|}}}|v|閱}}</span>]]<!--
--> <span style="font-size:80%;">•</span> [[{{TALKPAGENAME:{{transcluded pagename|{{{1}}}}}}}|<span title="討論該模板" style="{{{fontstyle|}}}">{{#if:{{{mini|}}}|d|論}}</span>]]<!--
-->{{#if:{{{noedit|}}}|<!--nothing-->|<!--else:
--> <span style="font-size:80%;">•</span> [{{fullurl:{{transcluded pagename|{{{1}}}}}|action=edit}}<span title="编辑該模板" style="{{{fontstyle|}}};">{{#if:{{{mini|}}}|e|編}}</span>]<!--
-->}}<!--
-->{{#if:{{{brackets|}}}|]}}<!--
-->{{#if:{{{nodiv|}}}|<!--then:
--></span> |<!--else:
--></div>}}</includeonly><noinclude>{{documentation}}</noinclude>
0qe9eiy2oh7dnx9c23r6w5kravoor7c
Template:Transcluded pagename
10
384300
9758647
9323662
2026-05-13T12:48:33Z
TongcyDai
53191
TongcyDai移动页面[[Template:Transclude]]至[[Template:Transcluded pagename]],不留重定向
9323662
wikitext
text/x-wiki
<noinclude><!-- 本頁面複製自[[w:zh:Template:Transclude]],由機器人定期更新。請直接編輯原維基項目頁面,或自設定頁面[[User:Cewbot/log/20211203/configuration]]去除本頁面之後再編輯。 --></noinclude>{{#switch: {{NAMESPACE: {{{1}}} }}
|#default = {{FULLPAGENAME: {{{1}}} }} <!-- eg "User:Foo" -->
|{{ns:0}} =
{{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }}
| Template:{{{1}}} <!-- no leading colon, eg "Foo" -->
| {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article -->
}}
}}<noinclude>
{{documentation}}
</noinclude>
mzh973aa16v6vchl9alevmmxurinltj
장화
0
504769
9759365
5261231
2026-05-14T10:49:23Z
TongcyDai
53191
9759365
wikitext
text/x-wiki
==朝鮮語==
===發音===
{{ko-IPA}}
===詞源1===
{{ko-etym-sino|長靴}}
====名詞====
{{ko-noun|hanja=長靴}}
# [[長靴]]
===詞源2===
{{ko-Chinese toponyms|^장화(彰化)|^창화}}
{{ko-etym-sino|彰化}}。
====專有名詞====
{{ko-pos|專有名詞}}
# {{tcl|ko|彰化|id=Q133865}}
# {{tcl|ko|彰化|id=Q195215}}
===詞源3===
{{ko-etym-sino|長話}}
====名詞====
{{ko-noun|hanja=長話}}
# [[長話]]
===詞源4===
{{ko-etym-sino|裝畵}}
====名詞====
{{ko-noun|hanja=裝畵}}
# [[裝畫]]
58wa4uibfcg1qyxkycx26z5fo384wr3
比利時
0
579900
9759379
9728597
2026-05-14T11:31:39Z
TongcyDai
53191
9759379
wikitext
text/x-wiki
==汉语==
{{zh-forms|s=比利时|gloss=-}}
===词源===
最早可見於1822年增修的《{{w|廣東通志}}》,以{{zh-l|吡唎𠺮}}的形式出現。「比利時」的寫法最早則可見於1849年{{w|徐继畬}}所著的《{{w|瀛寰志略}}》。
===发音===
{{zh-pron
|m=Bǐlìshí
|c=bei2 lei6 si4
|h=pfs=Pí-li-sṳ̀;hrs=h:biˊ li˖ shi;gd=bi3 li4 si2
|md=Bī-lé-sì
|mn=Pí-lī-sî
|mn-t=bi2 li6 si5
|w=sh:5pi li zy
|cat=pn
}}
===专有名词===
{{head|zh|專有名詞}}
# {{senseid|zh|Q31}} {{place|zh|國家|r/西歐|*和[[荷蘭]]、[[德國]]、[[盧森堡]]與[[法國]]接壤|caplc=布魯塞爾|official=比利時王國}}
====近义词====
* {{qual|弃用}} {{zh-l|白耳義}}
====翻译====
{{trans-top|id=Q31|欧洲国家}}
* 亚齐语:{{t|ace|Bèlgia}}
* 西切爾克斯語:{{t|ady|Белгие}}
* 南非语:{{t|af|België}}
* 阿尔巴尼亚语:{{t+|sq|Belgjikë|f}}
* 阿姆哈拉语:{{t|am|ቤልጅግ|sc=Ethi}}
* 安地列斯克里奥尔语:{{t|gcf|Beljik|f}}
* 阿拉伯语:{{t|ar|بِلْجِيكَا|f|tr=beljīkā}}
*: 埃及阿拉伯语:{{t|arz|بلچيكا|f|tr=balžīkā}}
*: 汉志阿拉伯语:{{t|acw|بلجيكا|f|tr=biljīka, baljīka}}
*: 摩洛哥阿拉伯语:{{t|ary|بلجيكا|f}}
* 阿拉贡语:{{t|an|Belchica}}
* 亚拉姆语:{{t|arc|ܒܠܓܝܟܐ}}
* 亚美尼亚语:{{t+|hy|Բելգիա}}
* 阿罗马尼亚语:{{t|rup|Belghia}}
* 亚述新亚拉姆语:{{t|aii|ܒܹܠܓ̰ܝܼܟܵܐ|f|tr=beljīka}}
* 阿斯图里亚斯语:{{t+|ast|Bélxica|f}}
* 阿塞拜疆语:{{t+|az|Belçika}}
* 巴什基尔语:{{t|ba|Бельгия|sc=Cyrl}}
* 巴斯克语:{{t+|eu|Belgika}}
* 巴伐利亚语:{{t|bar|Belgien}}
* 白俄罗斯语:{{t|be|Бе́льгія|f}}
* 孟加拉语:{{t+|bn|বেলজিয়াম|sc=Beng}}
* 比什奴普莱利亚-曼尼普尔语:{{t|bpy|বেলজিয়াম|tr=bēlajiẏām}}
* 布列塔尼语:{{t+|br|Belgia}}
* 保加利亚语:{{t+|bg|Бе́лгия|f}}
* 缅甸语:{{t|my|ဘယ်လ်ဂျီယမ်|sc=Mymr}}
* 加泰罗尼亚语:{{t+|ca|Bèlgica|f}}
* 宿雾语:{{t|ceb|Belhika}}
* 车臣语:{{t|ce|Бельге|sc=Cyrl}}
* 切罗基语:{{t|chr|ᏇᎵᏣᎻ}}
* 楚瓦什语:{{t|cv|Бельги|sc=Cyrl}}
* 康沃尔语:{{t|kw|Pow Belg}}
* 科西嘉语:{{t+|co|Belgiu|m}}、{{t|co|Belghju|m}}、{{t+|co|Belgica|f}}
* 克里米亚鞑靼语:{{t|crh|Belçika}}
* 捷克语:{{t+|cs|Belgie|f}}
* 丹麦语:{{t+|da|Belgien}}
* 迪维希语:{{t|dv|ބެލްޖިއަމް}}
* 荷兰语:{{t+|nl|België|n}}
* 宗喀语:{{t|dz|བེལ་ཇིཡམ|sc=Tibt}}
* 世界语:{{t+|eo|Belgio}}、{{t|eo|Belgujo}}
* 爱沙尼亚语:{{t+|et|Belgia}}
* 英语:{{t+|en|Belgium}}
* 埃维语:{{t|ee|Belgium}}
* 法拉法拉语:{{t|gur|Bɛlgɔ}}
* 法罗语:{{t+|fo|Belgia}}
* 芬兰语:{{t+|fi|Belgia}}
* 法兰克-普罗旺斯语:{{t|frp|Bèlg·ique|f}}
* 法语:{{t+|fr|Belgique|f}}
* 弗留利语:{{t|fur|Belgjo}}、{{t|fur|Belgjiche}}
* 加利西亚语:{{t+|gl|Bélxica|f}}
* 格鲁吉亚语:{{t|ka|ბელგია|sc=Geor}}
* 德语:{{t+|de|Belgien|n}}
*: 阿勒曼尼德语:{{t|gsw|Belgien}}
* 希腊语:{{t+|el|Βέλγιο|n}}
*: 纯正希腊语:{{t|el|Βέλγιον|n}}
* 格陵兰语:{{t+|kl|Belgia}}
* 古吉拉特语:{{t|gu|બેલ્જિયમ}}
* 海地克里奥尔语:{{t|ht|Bèljik}}
* 豪萨语:{{t|ha|Belgium}}、{{t|ha|Belgiyom}}
* 夏威夷语:{{t|haw|Pelekiuma}}
* 希伯来语:{{t+|he|בֶּלְגְּיָה|tr=bélgya}}
* 印地语:{{t+|hi|बेल्जियम}}
* 匈牙利语:{{t+|hu|Belgium}}
* 汉斯立克语:{{t|hrx|Belche|n}}
* 冰岛语:{{t+|is|Belgía|f}}
* 伊多语:{{t+|io|Belgia}}
* 伊洛卡诺语:{{t|ilo|Belgium}}
* 印度尼西亚语:{{t+|id|Belgia}}
* 因特语:{{t+|ia|Belgica}}、{{t+|ia|Belgio}}
* 爱尔兰语:{{t|ga|an [[Beilg|Bheilg]]|f}}、{{t|ga|Ríocht na Beilge|f}}
* 意大利语:{{t+|it|Belgio|m}}
* 日语:{{t+|ja|ベルギー|tr=Berugī}}、{{t+|ja|白耳義|tr=ベルギー}}
* 爪哇语:{{t|jv|Bèlgia}}
* 卡拜尔语:{{t|kab|Biljik}}
* 卡姆巴语:{{t|kam|Belgium}}
* 卡片片甘语:{{t|pam|Belgium}}
* 卡舒比语:{{t+|csb|Belgijskô}}
* 哈萨克语:{{t|kk|Бельгия|sc=Cyrl}}
* 高棉语:{{t+|km|បែលហ្ស៊ិក}}
* 兹梁科米语:{{t|kpv|Бельгия|sc=Cyrl}}
* 朝鲜语:{{t+|ko|^벨기에}}、{{t+|ko|^벨지끄}} {{qualifier|北朝鲜}}
* 库尔德语:
*: 中库尔德语:{{t|ckb|بەلجیکا}}
*: 北库尔德语:{{t+|kmr|Belçîka}}
* 柯尔克孜语:{{t|ky|Бельгия|sc=Cyrl}}
* 拉蒂诺语:{{t|lad|Beljika}}
* 老挝语:{{t+|lo|ແບນຊິກ}}
* 拉丁语:{{t+|la|Belgica|f}}、{{t|la|Belgia|f}}、{{t|la|Belgium|m}}
* 拉脱维亚语:{{t+|lv|Beļģija|f}}
* 利古里亚语:{{t|lij|Belgiò}}
* 林堡语:{{t+|li|Belsj}}
* 林加拉语:{{t|ln|Bɛ́ljika}}
* 立陶宛语:{{t+|lt|Belgija|f}}
* 立窝尼亚语:{{t|liv|Belgij}}
* 低地德语:
*: 低地萨克逊荷兰语:{{t+|nds-nl|België}}
*: 德国低地德语:{{t+|nds-de|Belgien}}
* 下索布语:{{t|dsb|Belgiska}}
* 卢希亚语:{{t|luy|Belgium}}
* 卢森堡语:{{t+|lb|Belsch|f}}
* 马其顿语:{{t+|mk|Белгија|f}}
* 马拉加斯语:{{t|mg|Belzika}}
* 马来语:{{t|ms|Belgium}}
* 马拉雅拉姆语:{{t|ml|ബെല്ജിയം|sc=Mlym}}
* 马耳他语:{{t|mt|Belġju}}
* 曼岛语:{{t|gv|Yn Velg}}
* 毛利语:{{t|mi|Peratiamu}}
* 马拉地语:{{t|mr|बेल्जियम|sc=Deva}}
* 梅鲁语:{{t|mer|Belgium}}
* 蒙古语:{{t+|mn|Бельги|sc=Cyrl}}
* 纳瓦特尔语:{{t|nah|Belxicān}}
* 瑙鲁语:{{t|na|Belgium}}
* 纳瓦霍语:{{t|nv|Bélgii bikéyah}}
* 那不勒斯语:{{t|nap|Belge}}
* 尼泊尔语:{{t|ne|बेल्जियम}}
* 诺曼语:{{t|nrf|Belgique|f}}
* 北弗里斯兰语:{{t|frr|Bälgien}}
* 北萨米语:{{t|se|Belgia}}
* 挪威语:
*: 书面挪威语:{{t+|nb|Belgia|n}}
*: 新挪威语:{{t+|nn|Belgia|n}}
* 奥克西坦语:{{t+|oc|Belgica|f}}
* 古英语:{{t|ang|Belgice}}
* 奥里亚语:{{t|or|ବେଲଜିଅମ}}
* 奥塞梯语:{{t|os|Бельги}}
* 帕皮阿门托语:{{t|pap|Bélgika}}
* 普什图语:{{t|ps|بلجيم|tr=beljiyam|sc=Arab}}
* 宾夕法尼亚德语:{{t|pdc|Belgien}}
* 波斯语:{{t+|fa|بلژیک|tr=belžik}}
* 皮卡第语:{{t|pcd|Bergike|f}}
* 皮埃蒙特语:{{t|pms|Belgi}}
* 波兰语:{{t+|pl|Belgia|f}}
* 葡萄牙语:{{t+|pt|Bélgica}}
* 旁遮普语:{{t|pa|ਬੈਲਜੀਅਮ}}
* 克丘亚语:{{t|qu|Bilhika}}
* 罗姆语:{{t|rom|Beljiya}}
* 罗马尼亚语:{{t+|ro|Belgia|f}}
* 罗曼什语:{{t|rm|Belgia}}
* 俄语:{{t+|ru|Бе́льгия|f}}
* 卢森尼亚语:{{t|rue|Бе́лґія|f}}
* 卢旺达语:{{t|rw|Ububirigi}}
* 萨莫吉提亚语:{{t|sgs|Belgėjė}}
* 梵语:{{t|sa|बेल्जियम}}
* 撒丁语:{{t|sc|Bèlgiu|m}}
* 萨特弗里斯兰语:{{t|stq|Belgien}}
* 低地苏格兰语:{{t|sco|Belgium}}
* 苏格兰盖尔语:{{t|gd|Beilg|alt=A' Bheilg|f}}
* 塞尔维亚-克罗地亚语:
*: 西里尔字母:{{t|sh|Белгија|f|sc=Cyrl}}
*: 罗马字母:{{t+|sh|Belgija|f}}
* 西西里语:{{t|scn|Belgiu|m}}
* 西里西亚语:{{t|szl|Belgijo}}
* 信德语:{{t|sd|بيلجيم}}
* 斯洛伐克语:{{t+|sk|Belgicko|n}}
* 斯洛文尼亚语:{{t+|sl|Bélgija|f}}
* 西班牙语:{{t+|es|Bélgica|f}}
* 苏里南汤加语:{{t|srn|Belgikondre}}
* 巽他语:{{t|su|Bélgia}}
* 斯瓦希里语:{{t+|sw|Ubelgiji}}、{{t+|sw|Ubelgiji}}
* 瑞典语:{{t+|sv|Belgien}}
* 他加禄语:{{t+|tl|Belhika}}
* 塔吉克语:{{t|tg|Белгия|sc=Cyrl}}
* 泰米尔语:{{t|ta|பெல்ஜியம்}}
* 鞑靼语:{{t|tt|Бельгия}}
* 泰卢固语:{{t+|te|బెల్జియం}}
* 德顿语:{{t|tet|Béljika}}
* 泰语:{{t+|th|เบลเยียม}}
* 藏语:{{t|bo|པེར་ཅིན}}
* 提格里尼亚语:{{t|ti|ቤልጄም}}
* 托克皮辛语:{{t|tpi|Beljiam}}
* 土耳其语:{{t+|tr|Belçika}}
* 土库曼语:{{t|tk|Belgiýa}}
* 乌德穆尔特语:{{t|udm|Бельгия}}
* 乌克兰语:{{t+|uk|Бе́льгія|f}}、{{t|uk|Бе́льґія|f}}
* 上索布语:{{t|hsb|Belgiska}}
* 乌尔都语:{{t|ur|بلجئیم|tr=beljiyam}}
* 维吾尔语:{{t|ug|بېلگىيە|sc=Arab}}
* 乌孜别克语:{{t+|uz|Belgiya|sc=Cyrl}}
* 威尼斯语:{{t|vec|Belgio}}
* 越南语:{{t|vi|Bỉ}} ({{t|vi|比|sc=Hani}})
* 沃拉普克语:{{t+|vo|Belgän}}
* 佛罗语:{{t|vro|Belgiä}}
* 瓦隆语:{{t+|wa|Beldjike}}
* 瓦瑞瓦瑞语:{{t|war|Belhika}}
* 威尔士语:{{t+|cy|Gwlad Belg|f}}
* 西佛兰德语:{{t|vls|België|n}}
* 西弗里斯兰语:{{t+|fy|Belgje|n}}
* 西旁遮普语:{{t+|pnb|بیلجیم}}
* 沃洛夫语:{{t|wo|Beljik}}
* 意第绪语:{{t|yi|בעלגיע}}
* 约鲁巴语:{{t|yo|Belgium}}
* 扎扎其语:{{qualifier|南扎扎其}} {{t|zza|Belçıka}}
* 壮语:{{t|za|Bijlisiz}}
{{trans-bottom}}
ngap5mbhoafrjmw0r60m5louujjfith
9759380
9759379
2026-05-14T11:37:34Z
TongcyDai
53191
9759380
wikitext
text/x-wiki
==汉语==
{{zh-forms|s=比利时|gloss=-}}
===词源===
最早可見於1822年增修的《{{w|廣東通志}}》,以{{zh-l|吡唎𠺮}}的形式出現。「比利時」的寫法最早則可見於1849年{{w|徐继畬}}所著的《{{w|瀛寰志略}}》。
===发音===
{{zh-pron
|m=Bǐlìshí
|c=bei2 lei6 si4
|h=pfs=Pí-li-sṳ̀;hrs=h:biˊ li˖ shi;gd=bi3 li4 si2
|md=Bī-lé-sì
|mn=Pí-lī-sî
|mn-t=bi2 li6 si5
|w=sh:5pi li zy
|cat=pn
}}
===专有名词===
{{head|zh|專有名詞}}
# {{senseid|zh|Q31}} {{place|zh|國家|r/西歐|*和[[荷蘭]]、[[德國]]、[[盧森堡]]與[[法國]]接壤|caplc=布魯塞爾|official=比利時王國}}
#* {{zh-x|^日耳曼 之 西北 臨海,曰 ^荷蘭。^荷蘭 之 南,曰 ^比利時。^比利時 之 南,曰 ^佛郎西。||CL|ref='''1849年''',徐繼畬所《[[s:瀛寰志略/歐羅巴|瀛寰志略·歐羅巴]]》}}
====近义词====
* {{qual|弃用}} {{zh-l|白耳義}}
====翻译====
{{trans-top|id=Q31|欧洲国家}}
* 亚齐语:{{t|ace|Bèlgia}}
* 西切爾克斯語:{{t|ady|Белгие}}
* 南非语:{{t|af|België}}
* 阿尔巴尼亚语:{{t+|sq|Belgjikë|f}}
* 阿姆哈拉语:{{t|am|ቤልጅግ|sc=Ethi}}
* 安地列斯克里奥尔语:{{t|gcf|Beljik|f}}
* 阿拉伯语:{{t|ar|بِلْجِيكَا|f|tr=beljīkā}}
*: 埃及阿拉伯语:{{t|arz|بلچيكا|f|tr=balžīkā}}
*: 汉志阿拉伯语:{{t|acw|بلجيكا|f|tr=biljīka, baljīka}}
*: 摩洛哥阿拉伯语:{{t|ary|بلجيكا|f}}
* 阿拉贡语:{{t|an|Belchica}}
* 亚拉姆语:{{t|arc|ܒܠܓܝܟܐ}}
* 亚美尼亚语:{{t+|hy|Բելգիա}}
* 阿罗马尼亚语:{{t|rup|Belghia}}
* 亚述新亚拉姆语:{{t|aii|ܒܹܠܓ̰ܝܼܟܵܐ|f|tr=beljīka}}
* 阿斯图里亚斯语:{{t+|ast|Bélxica|f}}
* 阿塞拜疆语:{{t+|az|Belçika}}
* 巴什基尔语:{{t|ba|Бельгия|sc=Cyrl}}
* 巴斯克语:{{t+|eu|Belgika}}
* 巴伐利亚语:{{t|bar|Belgien}}
* 白俄罗斯语:{{t|be|Бе́льгія|f}}
* 孟加拉语:{{t+|bn|বেলজিয়াম|sc=Beng}}
* 比什奴普莱利亚-曼尼普尔语:{{t|bpy|বেলজিয়াম|tr=bēlajiẏām}}
* 布列塔尼语:{{t+|br|Belgia}}
* 保加利亚语:{{t+|bg|Бе́лгия|f}}
* 缅甸语:{{t|my|ဘယ်လ်ဂျီယမ်|sc=Mymr}}
* 加泰罗尼亚语:{{t+|ca|Bèlgica|f}}
* 宿雾语:{{t|ceb|Belhika}}
* 车臣语:{{t|ce|Бельге|sc=Cyrl}}
* 切罗基语:{{t|chr|ᏇᎵᏣᎻ}}
* 楚瓦什语:{{t|cv|Бельги|sc=Cyrl}}
* 康沃尔语:{{t|kw|Pow Belg}}
* 科西嘉语:{{t+|co|Belgiu|m}}、{{t|co|Belghju|m}}、{{t+|co|Belgica|f}}
* 克里米亚鞑靼语:{{t|crh|Belçika}}
* 捷克语:{{t+|cs|Belgie|f}}
* 丹麦语:{{t+|da|Belgien}}
* 迪维希语:{{t|dv|ބެލްޖިއަމް}}
* 荷兰语:{{t+|nl|België|n}}
* 宗喀语:{{t|dz|བེལ་ཇིཡམ|sc=Tibt}}
* 世界语:{{t+|eo|Belgio}}、{{t|eo|Belgujo}}
* 爱沙尼亚语:{{t+|et|Belgia}}
* 英语:{{t+|en|Belgium}}
* 埃维语:{{t|ee|Belgium}}
* 法拉法拉语:{{t|gur|Bɛlgɔ}}
* 法罗语:{{t+|fo|Belgia}}
* 芬兰语:{{t+|fi|Belgia}}
* 法兰克-普罗旺斯语:{{t|frp|Bèlg·ique|f}}
* 法语:{{t+|fr|Belgique|f}}
* 弗留利语:{{t|fur|Belgjo}}、{{t|fur|Belgjiche}}
* 加利西亚语:{{t+|gl|Bélxica|f}}
* 格鲁吉亚语:{{t|ka|ბელგია|sc=Geor}}
* 德语:{{t+|de|Belgien|n}}
*: 阿勒曼尼德语:{{t|gsw|Belgien}}
* 希腊语:{{t+|el|Βέλγιο|n}}
*: 纯正希腊语:{{t|el|Βέλγιον|n}}
* 格陵兰语:{{t+|kl|Belgia}}
* 古吉拉特语:{{t|gu|બેલ્જિયમ}}
* 海地克里奥尔语:{{t|ht|Bèljik}}
* 豪萨语:{{t|ha|Belgium}}、{{t|ha|Belgiyom}}
* 夏威夷语:{{t|haw|Pelekiuma}}
* 希伯来语:{{t+|he|בֶּלְגְּיָה|tr=bélgya}}
* 印地语:{{t+|hi|बेल्जियम}}
* 匈牙利语:{{t+|hu|Belgium}}
* 汉斯立克语:{{t|hrx|Belche|n}}
* 冰岛语:{{t+|is|Belgía|f}}
* 伊多语:{{t+|io|Belgia}}
* 伊洛卡诺语:{{t|ilo|Belgium}}
* 印度尼西亚语:{{t+|id|Belgia}}
* 因特语:{{t+|ia|Belgica}}、{{t+|ia|Belgio}}
* 爱尔兰语:{{t|ga|an [[Beilg|Bheilg]]|f}}、{{t|ga|Ríocht na Beilge|f}}
* 意大利语:{{t+|it|Belgio|m}}
* 日语:{{t+|ja|ベルギー|tr=Berugī}}、{{t+|ja|白耳義|tr=ベルギー}}
* 爪哇语:{{t|jv|Bèlgia}}
* 卡拜尔语:{{t|kab|Biljik}}
* 卡姆巴语:{{t|kam|Belgium}}
* 卡片片甘语:{{t|pam|Belgium}}
* 卡舒比语:{{t+|csb|Belgijskô}}
* 哈萨克语:{{t|kk|Бельгия|sc=Cyrl}}
* 高棉语:{{t+|km|បែលហ្ស៊ិក}}
* 兹梁科米语:{{t|kpv|Бельгия|sc=Cyrl}}
* 朝鲜语:{{t+|ko|^벨기에}}、{{t+|ko|^벨지끄}} {{qualifier|北朝鲜}}
* 库尔德语:
*: 中库尔德语:{{t|ckb|بەلجیکا}}
*: 北库尔德语:{{t+|kmr|Belçîka}}
* 柯尔克孜语:{{t|ky|Бельгия|sc=Cyrl}}
* 拉蒂诺语:{{t|lad|Beljika}}
* 老挝语:{{t+|lo|ແບນຊິກ}}
* 拉丁语:{{t+|la|Belgica|f}}、{{t|la|Belgia|f}}、{{t|la|Belgium|m}}
* 拉脱维亚语:{{t+|lv|Beļģija|f}}
* 利古里亚语:{{t|lij|Belgiò}}
* 林堡语:{{t+|li|Belsj}}
* 林加拉语:{{t|ln|Bɛ́ljika}}
* 立陶宛语:{{t+|lt|Belgija|f}}
* 立窝尼亚语:{{t|liv|Belgij}}
* 低地德语:
*: 低地萨克逊荷兰语:{{t+|nds-nl|België}}
*: 德国低地德语:{{t+|nds-de|Belgien}}
* 下索布语:{{t|dsb|Belgiska}}
* 卢希亚语:{{t|luy|Belgium}}
* 卢森堡语:{{t+|lb|Belsch|f}}
* 马其顿语:{{t+|mk|Белгија|f}}
* 马拉加斯语:{{t|mg|Belzika}}
* 马来语:{{t|ms|Belgium}}
* 马拉雅拉姆语:{{t|ml|ബെല്ജിയം|sc=Mlym}}
* 马耳他语:{{t|mt|Belġju}}
* 曼岛语:{{t|gv|Yn Velg}}
* 毛利语:{{t|mi|Peratiamu}}
* 马拉地语:{{t|mr|बेल्जियम|sc=Deva}}
* 梅鲁语:{{t|mer|Belgium}}
* 蒙古语:{{t+|mn|Бельги|sc=Cyrl}}
* 纳瓦特尔语:{{t|nah|Belxicān}}
* 瑙鲁语:{{t|na|Belgium}}
* 纳瓦霍语:{{t|nv|Bélgii bikéyah}}
* 那不勒斯语:{{t|nap|Belge}}
* 尼泊尔语:{{t|ne|बेल्जियम}}
* 诺曼语:{{t|nrf|Belgique|f}}
* 北弗里斯兰语:{{t|frr|Bälgien}}
* 北萨米语:{{t|se|Belgia}}
* 挪威语:
*: 书面挪威语:{{t+|nb|Belgia|n}}
*: 新挪威语:{{t+|nn|Belgia|n}}
* 奥克西坦语:{{t+|oc|Belgica|f}}
* 古英语:{{t|ang|Belgice}}
* 奥里亚语:{{t|or|ବେଲଜିଅମ}}
* 奥塞梯语:{{t|os|Бельги}}
* 帕皮阿门托语:{{t|pap|Bélgika}}
* 普什图语:{{t|ps|بلجيم|tr=beljiyam|sc=Arab}}
* 宾夕法尼亚德语:{{t|pdc|Belgien}}
* 波斯语:{{t+|fa|بلژیک|tr=belžik}}
* 皮卡第语:{{t|pcd|Bergike|f}}
* 皮埃蒙特语:{{t|pms|Belgi}}
* 波兰语:{{t+|pl|Belgia|f}}
* 葡萄牙语:{{t+|pt|Bélgica}}
* 旁遮普语:{{t|pa|ਬੈਲਜੀਅਮ}}
* 克丘亚语:{{t|qu|Bilhika}}
* 罗姆语:{{t|rom|Beljiya}}
* 罗马尼亚语:{{t+|ro|Belgia|f}}
* 罗曼什语:{{t|rm|Belgia}}
* 俄语:{{t+|ru|Бе́льгия|f}}
* 卢森尼亚语:{{t|rue|Бе́лґія|f}}
* 卢旺达语:{{t|rw|Ububirigi}}
* 萨莫吉提亚语:{{t|sgs|Belgėjė}}
* 梵语:{{t|sa|बेल्जियम}}
* 撒丁语:{{t|sc|Bèlgiu|m}}
* 萨特弗里斯兰语:{{t|stq|Belgien}}
* 低地苏格兰语:{{t|sco|Belgium}}
* 苏格兰盖尔语:{{t|gd|Beilg|alt=A' Bheilg|f}}
* 塞尔维亚-克罗地亚语:
*: 西里尔字母:{{t|sh|Белгија|f|sc=Cyrl}}
*: 罗马字母:{{t+|sh|Belgija|f}}
* 西西里语:{{t|scn|Belgiu|m}}
* 西里西亚语:{{t|szl|Belgijo}}
* 信德语:{{t|sd|بيلجيم}}
* 斯洛伐克语:{{t+|sk|Belgicko|n}}
* 斯洛文尼亚语:{{t+|sl|Bélgija|f}}
* 西班牙语:{{t+|es|Bélgica|f}}
* 苏里南汤加语:{{t|srn|Belgikondre}}
* 巽他语:{{t|su|Bélgia}}
* 斯瓦希里语:{{t+|sw|Ubelgiji}}、{{t+|sw|Ubelgiji}}
* 瑞典语:{{t+|sv|Belgien}}
* 他加禄语:{{t+|tl|Belhika}}
* 塔吉克语:{{t|tg|Белгия|sc=Cyrl}}
* 泰米尔语:{{t|ta|பெல்ஜியம்}}
* 鞑靼语:{{t|tt|Бельгия}}
* 泰卢固语:{{t+|te|బెల్జియం}}
* 德顿语:{{t|tet|Béljika}}
* 泰语:{{t+|th|เบลเยียม}}
* 藏语:{{t|bo|པེར་ཅིན}}
* 提格里尼亚语:{{t|ti|ቤልጄም}}
* 托克皮辛语:{{t|tpi|Beljiam}}
* 土耳其语:{{t+|tr|Belçika}}
* 土库曼语:{{t|tk|Belgiýa}}
* 乌德穆尔特语:{{t|udm|Бельгия}}
* 乌克兰语:{{t+|uk|Бе́льгія|f}}、{{t|uk|Бе́льґія|f}}
* 上索布语:{{t|hsb|Belgiska}}
* 乌尔都语:{{t|ur|بلجئیم|tr=beljiyam}}
* 维吾尔语:{{t|ug|بېلگىيە|sc=Arab}}
* 乌孜别克语:{{t+|uz|Belgiya|sc=Cyrl}}
* 威尼斯语:{{t|vec|Belgio}}
* 越南语:{{t|vi|Bỉ}} ({{t|vi|比|sc=Hani}})
* 沃拉普克语:{{t+|vo|Belgän}}
* 佛罗语:{{t|vro|Belgiä}}
* 瓦隆语:{{t+|wa|Beldjike}}
* 瓦瑞瓦瑞语:{{t|war|Belhika}}
* 威尔士语:{{t+|cy|Gwlad Belg|f}}
* 西佛兰德语:{{t|vls|België|n}}
* 西弗里斯兰语:{{t+|fy|Belgje|n}}
* 西旁遮普语:{{t+|pnb|بیلجیم}}
* 沃洛夫语:{{t|wo|Beljik}}
* 意第绪语:{{t|yi|בעלגיע}}
* 约鲁巴语:{{t|yo|Belgium}}
* 扎扎其语:{{qualifier|南扎扎其}} {{t|zza|Belçıka}}
* 壮语:{{t|za|Bijlisiz}}
{{trans-bottom}}
l11ql2ycszc6sq0hv3493tm9h3qz1qz
9759381
9759380
2026-05-14T11:37:50Z
TongcyDai
53191
9759381
wikitext
text/x-wiki
==汉语==
{{zh-forms|s=比利时|gloss=-}}
===词源===
最早可見於1822年增修的《{{w|廣東通志}}》,以{{zh-l|吡唎𠺮}}的形式出現。「比利時」的寫法最早則可見於1849年{{w|徐继畬}}所著的《{{w|瀛寰志略}}》。
===发音===
{{zh-pron
|m=Bǐlìshí
|c=bei2 lei6 si4
|h=pfs=Pí-li-sṳ̀;hrs=h:biˊ li˖ shi;gd=bi3 li4 si2
|md=Bī-lé-sì
|mn=Pí-lī-sî
|mn-t=bi2 li6 si5
|w=sh:5pi li zy
|cat=pn
}}
===专有名词===
{{head|zh|專有名詞}}
# {{senseid|zh|Q31}} {{place|zh|國家|r/西歐|*和[[荷蘭]]、[[德國]]、[[盧森堡]]與[[法國]]接壤|caplc=布魯塞爾|official=比利時王國}}
#* {{zh-x|^日耳曼 之 西北 臨海,曰 ^荷蘭。^荷蘭 之 南,曰 ^比利時。^比利時 之 南,曰 ^佛郎西。||CL|ref='''1849年''',{{w|徐繼畬}}《[[s:瀛寰志略/歐羅巴|瀛寰志略·歐羅巴]]》}}
====近义词====
* {{qual|弃用}} {{zh-l|白耳義}}
====翻译====
{{trans-top|id=Q31|欧洲国家}}
* 亚齐语:{{t|ace|Bèlgia}}
* 西切爾克斯語:{{t|ady|Белгие}}
* 南非语:{{t|af|België}}
* 阿尔巴尼亚语:{{t+|sq|Belgjikë|f}}
* 阿姆哈拉语:{{t|am|ቤልጅግ|sc=Ethi}}
* 安地列斯克里奥尔语:{{t|gcf|Beljik|f}}
* 阿拉伯语:{{t|ar|بِلْجِيكَا|f|tr=beljīkā}}
*: 埃及阿拉伯语:{{t|arz|بلچيكا|f|tr=balžīkā}}
*: 汉志阿拉伯语:{{t|acw|بلجيكا|f|tr=biljīka, baljīka}}
*: 摩洛哥阿拉伯语:{{t|ary|بلجيكا|f}}
* 阿拉贡语:{{t|an|Belchica}}
* 亚拉姆语:{{t|arc|ܒܠܓܝܟܐ}}
* 亚美尼亚语:{{t+|hy|Բելգիա}}
* 阿罗马尼亚语:{{t|rup|Belghia}}
* 亚述新亚拉姆语:{{t|aii|ܒܹܠܓ̰ܝܼܟܵܐ|f|tr=beljīka}}
* 阿斯图里亚斯语:{{t+|ast|Bélxica|f}}
* 阿塞拜疆语:{{t+|az|Belçika}}
* 巴什基尔语:{{t|ba|Бельгия|sc=Cyrl}}
* 巴斯克语:{{t+|eu|Belgika}}
* 巴伐利亚语:{{t|bar|Belgien}}
* 白俄罗斯语:{{t|be|Бе́льгія|f}}
* 孟加拉语:{{t+|bn|বেলজিয়াম|sc=Beng}}
* 比什奴普莱利亚-曼尼普尔语:{{t|bpy|বেলজিয়াম|tr=bēlajiẏām}}
* 布列塔尼语:{{t+|br|Belgia}}
* 保加利亚语:{{t+|bg|Бе́лгия|f}}
* 缅甸语:{{t|my|ဘယ်လ်ဂျီယမ်|sc=Mymr}}
* 加泰罗尼亚语:{{t+|ca|Bèlgica|f}}
* 宿雾语:{{t|ceb|Belhika}}
* 车臣语:{{t|ce|Бельге|sc=Cyrl}}
* 切罗基语:{{t|chr|ᏇᎵᏣᎻ}}
* 楚瓦什语:{{t|cv|Бельги|sc=Cyrl}}
* 康沃尔语:{{t|kw|Pow Belg}}
* 科西嘉语:{{t+|co|Belgiu|m}}、{{t|co|Belghju|m}}、{{t+|co|Belgica|f}}
* 克里米亚鞑靼语:{{t|crh|Belçika}}
* 捷克语:{{t+|cs|Belgie|f}}
* 丹麦语:{{t+|da|Belgien}}
* 迪维希语:{{t|dv|ބެލްޖިއަމް}}
* 荷兰语:{{t+|nl|België|n}}
* 宗喀语:{{t|dz|བེལ་ཇིཡམ|sc=Tibt}}
* 世界语:{{t+|eo|Belgio}}、{{t|eo|Belgujo}}
* 爱沙尼亚语:{{t+|et|Belgia}}
* 英语:{{t+|en|Belgium}}
* 埃维语:{{t|ee|Belgium}}
* 法拉法拉语:{{t|gur|Bɛlgɔ}}
* 法罗语:{{t+|fo|Belgia}}
* 芬兰语:{{t+|fi|Belgia}}
* 法兰克-普罗旺斯语:{{t|frp|Bèlg·ique|f}}
* 法语:{{t+|fr|Belgique|f}}
* 弗留利语:{{t|fur|Belgjo}}、{{t|fur|Belgjiche}}
* 加利西亚语:{{t+|gl|Bélxica|f}}
* 格鲁吉亚语:{{t|ka|ბელგია|sc=Geor}}
* 德语:{{t+|de|Belgien|n}}
*: 阿勒曼尼德语:{{t|gsw|Belgien}}
* 希腊语:{{t+|el|Βέλγιο|n}}
*: 纯正希腊语:{{t|el|Βέλγιον|n}}
* 格陵兰语:{{t+|kl|Belgia}}
* 古吉拉特语:{{t|gu|બેલ્જિયમ}}
* 海地克里奥尔语:{{t|ht|Bèljik}}
* 豪萨语:{{t|ha|Belgium}}、{{t|ha|Belgiyom}}
* 夏威夷语:{{t|haw|Pelekiuma}}
* 希伯来语:{{t+|he|בֶּלְגְּיָה|tr=bélgya}}
* 印地语:{{t+|hi|बेल्जियम}}
* 匈牙利语:{{t+|hu|Belgium}}
* 汉斯立克语:{{t|hrx|Belche|n}}
* 冰岛语:{{t+|is|Belgía|f}}
* 伊多语:{{t+|io|Belgia}}
* 伊洛卡诺语:{{t|ilo|Belgium}}
* 印度尼西亚语:{{t+|id|Belgia}}
* 因特语:{{t+|ia|Belgica}}、{{t+|ia|Belgio}}
* 爱尔兰语:{{t|ga|an [[Beilg|Bheilg]]|f}}、{{t|ga|Ríocht na Beilge|f}}
* 意大利语:{{t+|it|Belgio|m}}
* 日语:{{t+|ja|ベルギー|tr=Berugī}}、{{t+|ja|白耳義|tr=ベルギー}}
* 爪哇语:{{t|jv|Bèlgia}}
* 卡拜尔语:{{t|kab|Biljik}}
* 卡姆巴语:{{t|kam|Belgium}}
* 卡片片甘语:{{t|pam|Belgium}}
* 卡舒比语:{{t+|csb|Belgijskô}}
* 哈萨克语:{{t|kk|Бельгия|sc=Cyrl}}
* 高棉语:{{t+|km|បែលហ្ស៊ិក}}
* 兹梁科米语:{{t|kpv|Бельгия|sc=Cyrl}}
* 朝鲜语:{{t+|ko|^벨기에}}、{{t+|ko|^벨지끄}} {{qualifier|北朝鲜}}
* 库尔德语:
*: 中库尔德语:{{t|ckb|بەلجیکا}}
*: 北库尔德语:{{t+|kmr|Belçîka}}
* 柯尔克孜语:{{t|ky|Бельгия|sc=Cyrl}}
* 拉蒂诺语:{{t|lad|Beljika}}
* 老挝语:{{t+|lo|ແບນຊິກ}}
* 拉丁语:{{t+|la|Belgica|f}}、{{t|la|Belgia|f}}、{{t|la|Belgium|m}}
* 拉脱维亚语:{{t+|lv|Beļģija|f}}
* 利古里亚语:{{t|lij|Belgiò}}
* 林堡语:{{t+|li|Belsj}}
* 林加拉语:{{t|ln|Bɛ́ljika}}
* 立陶宛语:{{t+|lt|Belgija|f}}
* 立窝尼亚语:{{t|liv|Belgij}}
* 低地德语:
*: 低地萨克逊荷兰语:{{t+|nds-nl|België}}
*: 德国低地德语:{{t+|nds-de|Belgien}}
* 下索布语:{{t|dsb|Belgiska}}
* 卢希亚语:{{t|luy|Belgium}}
* 卢森堡语:{{t+|lb|Belsch|f}}
* 马其顿语:{{t+|mk|Белгија|f}}
* 马拉加斯语:{{t|mg|Belzika}}
* 马来语:{{t|ms|Belgium}}
* 马拉雅拉姆语:{{t|ml|ബെല്ജിയം|sc=Mlym}}
* 马耳他语:{{t|mt|Belġju}}
* 曼岛语:{{t|gv|Yn Velg}}
* 毛利语:{{t|mi|Peratiamu}}
* 马拉地语:{{t|mr|बेल्जियम|sc=Deva}}
* 梅鲁语:{{t|mer|Belgium}}
* 蒙古语:{{t+|mn|Бельги|sc=Cyrl}}
* 纳瓦特尔语:{{t|nah|Belxicān}}
* 瑙鲁语:{{t|na|Belgium}}
* 纳瓦霍语:{{t|nv|Bélgii bikéyah}}
* 那不勒斯语:{{t|nap|Belge}}
* 尼泊尔语:{{t|ne|बेल्जियम}}
* 诺曼语:{{t|nrf|Belgique|f}}
* 北弗里斯兰语:{{t|frr|Bälgien}}
* 北萨米语:{{t|se|Belgia}}
* 挪威语:
*: 书面挪威语:{{t+|nb|Belgia|n}}
*: 新挪威语:{{t+|nn|Belgia|n}}
* 奥克西坦语:{{t+|oc|Belgica|f}}
* 古英语:{{t|ang|Belgice}}
* 奥里亚语:{{t|or|ବେଲଜିଅମ}}
* 奥塞梯语:{{t|os|Бельги}}
* 帕皮阿门托语:{{t|pap|Bélgika}}
* 普什图语:{{t|ps|بلجيم|tr=beljiyam|sc=Arab}}
* 宾夕法尼亚德语:{{t|pdc|Belgien}}
* 波斯语:{{t+|fa|بلژیک|tr=belžik}}
* 皮卡第语:{{t|pcd|Bergike|f}}
* 皮埃蒙特语:{{t|pms|Belgi}}
* 波兰语:{{t+|pl|Belgia|f}}
* 葡萄牙语:{{t+|pt|Bélgica}}
* 旁遮普语:{{t|pa|ਬੈਲਜੀਅਮ}}
* 克丘亚语:{{t|qu|Bilhika}}
* 罗姆语:{{t|rom|Beljiya}}
* 罗马尼亚语:{{t+|ro|Belgia|f}}
* 罗曼什语:{{t|rm|Belgia}}
* 俄语:{{t+|ru|Бе́льгия|f}}
* 卢森尼亚语:{{t|rue|Бе́лґія|f}}
* 卢旺达语:{{t|rw|Ububirigi}}
* 萨莫吉提亚语:{{t|sgs|Belgėjė}}
* 梵语:{{t|sa|बेल्जियम}}
* 撒丁语:{{t|sc|Bèlgiu|m}}
* 萨特弗里斯兰语:{{t|stq|Belgien}}
* 低地苏格兰语:{{t|sco|Belgium}}
* 苏格兰盖尔语:{{t|gd|Beilg|alt=A' Bheilg|f}}
* 塞尔维亚-克罗地亚语:
*: 西里尔字母:{{t|sh|Белгија|f|sc=Cyrl}}
*: 罗马字母:{{t+|sh|Belgija|f}}
* 西西里语:{{t|scn|Belgiu|m}}
* 西里西亚语:{{t|szl|Belgijo}}
* 信德语:{{t|sd|بيلجيم}}
* 斯洛伐克语:{{t+|sk|Belgicko|n}}
* 斯洛文尼亚语:{{t+|sl|Bélgija|f}}
* 西班牙语:{{t+|es|Bélgica|f}}
* 苏里南汤加语:{{t|srn|Belgikondre}}
* 巽他语:{{t|su|Bélgia}}
* 斯瓦希里语:{{t+|sw|Ubelgiji}}、{{t+|sw|Ubelgiji}}
* 瑞典语:{{t+|sv|Belgien}}
* 他加禄语:{{t+|tl|Belhika}}
* 塔吉克语:{{t|tg|Белгия|sc=Cyrl}}
* 泰米尔语:{{t|ta|பெல்ஜியம்}}
* 鞑靼语:{{t|tt|Бельгия}}
* 泰卢固语:{{t+|te|బెల్జియం}}
* 德顿语:{{t|tet|Béljika}}
* 泰语:{{t+|th|เบลเยียม}}
* 藏语:{{t|bo|པེར་ཅིན}}
* 提格里尼亚语:{{t|ti|ቤልጄም}}
* 托克皮辛语:{{t|tpi|Beljiam}}
* 土耳其语:{{t+|tr|Belçika}}
* 土库曼语:{{t|tk|Belgiýa}}
* 乌德穆尔特语:{{t|udm|Бельгия}}
* 乌克兰语:{{t+|uk|Бе́льгія|f}}、{{t|uk|Бе́льґія|f}}
* 上索布语:{{t|hsb|Belgiska}}
* 乌尔都语:{{t|ur|بلجئیم|tr=beljiyam}}
* 维吾尔语:{{t|ug|بېلگىيە|sc=Arab}}
* 乌孜别克语:{{t+|uz|Belgiya|sc=Cyrl}}
* 威尼斯语:{{t|vec|Belgio}}
* 越南语:{{t|vi|Bỉ}} ({{t|vi|比|sc=Hani}})
* 沃拉普克语:{{t+|vo|Belgän}}
* 佛罗语:{{t|vro|Belgiä}}
* 瓦隆语:{{t+|wa|Beldjike}}
* 瓦瑞瓦瑞语:{{t|war|Belhika}}
* 威尔士语:{{t+|cy|Gwlad Belg|f}}
* 西佛兰德语:{{t|vls|België|n}}
* 西弗里斯兰语:{{t+|fy|Belgje|n}}
* 西旁遮普语:{{t+|pnb|بیلجیم}}
* 沃洛夫语:{{t|wo|Beljik}}
* 意第绪语:{{t|yi|בעלגיע}}
* 约鲁巴语:{{t|yo|Belgium}}
* 扎扎其语:{{qualifier|南扎扎其}} {{t|zza|Belçıka}}
* 壮语:{{t|za|Bijlisiz}}
{{trans-bottom}}
gbwbzvy330g1apkwdaeb75fq5osgful
捕食
0
586567
9759321
6683426
2026-05-14T08:13:06Z
Fglffer
55252
9759321
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{wp}}
===發音===
{{zh-pron
|m=bǔshí
|c=bou6 sik6
|mn-t=bu6 ziah8
|cat=v
}}
===動詞===
{{zh-verb}}
# [[捕捉]][[動物]][[食用]]
====衍生詞====
{{col3|zh|捕食者}}
==日語==
{{ja-kanjitab|ほ|しょく|yomi=on}}
===發音===
{{ja-pron|ほしょく|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|ほしょく}}
# [[捕捉]][[動物]][[食用]]
===動詞===
{{ja-verb-suru|ほしょく}}
# [[捕捉]][[動物]][[食用]]
====活用====
{{ja-suru|ほしょく}}
===來源===
<references/>
1ns7mcrh4vgq0aglfpi3rjhmafm51rs
9759323
9759321
2026-05-14T08:15:04Z
Fglffer
55252
9759323
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{wp}}
===發音===
{{zh-pron
|m=bǔshí
|c=bou6 sik6
|mn-t=bu6 ziah8
|cat=v
}}
===動詞===
{{zh-verb}}
# [[捕捉]][[動物]][[食用]]
====衍生詞====
{{col3|zh|捕食者}}
==日語==
{{ja-kanjitab|ほ|しょく|yomi=on}}
===發音===
{{ja-pron|ほしょく|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|ほしょく}}
# [[捕捉]][[動物]][[食用]]
===動詞===
{{ja-verb-suru|ほしょく}}
# [[捕捉]][[動物]][[食用]]
====活用====
{{ja-suru|ほしょく}}
===來源===
<references/>
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=포식}}
# {{hanja form of|포식}}
33w7oe6p2cbvypsx2fnqd6ufuig8fmo
9759327
9759323
2026-05-14T08:17:56Z
Fglffer
55252
/* 漢語 */
9759327
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{wp}}
===發音===
{{zh-pron
|m=bǔshí
|c=bou6 sik6
|mn-t=bu6 ziah8
|cat=v
}}
===動詞===
{{zh-verb}}
# [[捕捉]][[動物]][[食用]]
#: {{syn|zh|掠食|獵食}}
====衍生詞====
{{col3|zh|捕食者}}
==日語==
{{ja-kanjitab|ほ|しょく|yomi=on}}
===發音===
{{ja-pron|ほしょく|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|ほしょく}}
# [[捕捉]][[動物]][[食用]]
===動詞===
{{ja-verb-suru|ほしょく}}
# [[捕捉]][[動物]][[食用]]
====活用====
{{ja-suru|ほしょく}}
===來源===
<references/>
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=포식}}
# {{hanja form of|포식}}
el9sshkzt1qmelw4cjnxdn1owwo6d6y
9759330
9759327
2026-05-14T08:27:48Z
Sayonzei
40728
/* 日語 */
9759330
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{wp}}
===發音===
{{zh-pron
|m=bǔshí
|c=bou6 sik6
|mn-t=bu6 ziah8
|cat=v
}}
===動詞===
{{zh-verb}}
# [[捕捉]][[動物]][[食用]]
#: {{syn|zh|掠食|獵食}}
====衍生詞====
{{col3|zh|捕食者}}
==日語==
{{ja-kanjitab|ほ|しょく|yomi=on}}
===發音===
{{ja-pron|ほしょく|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|ほしょく}}
# [[捕捉]][[動物]][[食用]]
====衍生詞====
* {{ja-r|捕%食%者|ほ%しょく%しゃ}}
* {{ja-r|捕%食% 連%鎖|ほ%しょく% れん%さ}}
===動詞===
{{ja-verb-suru|tr=trans|ほしょく}}
# [[捕捉]][[動物]][[食用]]
====活用====
{{ja-suru|ほしょく}}
===來源===
<references/>
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=포식}}
# {{hanja form of|포식}}
85u5fof48qawrsburfuqz7tn4ctergy
淡水
0
599425
9759306
8293904
2026-05-14T07:24:43Z
Jiba1219
110530
/* 日語 */
9759306
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp|zh|yue|hak:Thâm-súi|nan:Tām-chúi}}
===發音1===
{{zh-pron
|m=dànshuǐ
|ma=Zh-dànshui.ogg
|c=taam5 seoi2
|h=pfs=thâm-súi
|mn=qz:tǎm-súi/xm,zz:tām-súi/qz:tǎm-chúi/tw,xm,zz:tām-chúi
|cat=n
}}
====名詞====
{{head|zh|名詞}}
# [[水質]]中僅有[[微量]][[濃度]]的[[氯化鈉]][[溶解]]在內的[[天然]][[水溶液]]
=====同義詞=====
* {{qual|晉語}} {{zh-l|甜水}}
* {{qual|閩南語}} {{zh-l|䭕水}}
=====反義詞=====
* {{zh-l|鹹水}}、{{zh-l|鹽水}}
* {{zh-l|海水}}
=====衍生詞=====
{{col3|zh|淡水魚}}
====翻譯====
{{trans-top|氯化鈉濃度極低的天然水溶液}}
* 南非語:{{t|af|varswater|n}}
* 阿拉伯語:{{t|ar|مَاءٌ عَذْبٌ|m}}
* 加泰羅尼亞語:{{t|ca|aigua dolça|f}}
* 丹麥語:{{t+|da|ferskvand|n}}
* 荷蘭語:{{t+|nl|zoet water|n}}、{{t|nl|vers water|n}}
* 英語:{{t+|en|fresh water}}
* 世界語:{{t|eo|dolĉakvo}}
* 愛沙尼亞語:{{t|et|magevesi}}
* 芬蘭語:{{t+|fi|makea vesi}}
* 法語:{{t+|fr|eau douce|f}}
* 加利西亞語:{{t+|gl|auga doce|f}}
* 格魯吉亞語:{{t|ka|მტკნარი წყალი}}
* 德語:{{t+|de|Süßwasser|n}}
* 希臘語:{{t|el|γλυκό νερό|n}}
*: 古希臘語:{{t|grc|[[γλυκύς|γλυκύ]] [[ὕδωρ]]|n}}
* 希伯來語:{{t+|he|מַיִם מְתוּקִים|m-p|tr=mayim metukim}}
* 匈牙利語:{{t+|hu|édesvíz}}
* 意大利語:{{t|it|acqua dolce|f}}
* 日語:{{t+|ja|淡水|tr=たんすい, tansui}}、{{t+|ja|真水|tr=まみず, mamizu}}
* 朝鮮語:{{t+|ko|민물}}、{{t+|ko|담수(淡水)}}
* 拉丁語:{{t|la|aqua dulcis|f}}
* 拉脫維亞語:{{t|lv|saldūdens|m}}
* 低地德語:
*: 德國低地德語:{{t+|nds-de|Söötwater|n}} {{qualifier|德國北部,明斯特}}
* 馬來語:{{t+|ms|air tawar}}
* 馬拉雅拉姆語:{{t+|ml|ശുദ്ധജലം}}
* 毛利語:{{t|mi|wai māori}}
* 諾曼語:{{t|nrf|ieau douoche|f}}
* 挪威語:
*: 書面挪威語:{{t+|nb|ferskvann|n}}
*: 新挪威語:{{t|nn|ferskvatn|n}}
* 奧克語:{{t|oc|aiga doça|f}}
* 波斯語:{{t+|fa|آب شیرین|tr=âb-e širin}}
* 波蘭語:{{t|pl|słodka woda}}
* 葡萄牙語:{{t|pt|água doce|f}}
* 羅馬尼亞語:{{t|ro|apă dulce|f}}
* 俄語:{{t|ru|пре́сная вода́|f}}
* 蘇格蘭蓋爾語:{{t|gd|fìor-uisge|m}}
* 西班牙語:{{t|es|agua dulce|f}}
* 瑞典語:{{t+|sv|sötvatten|n}}、{{t+|sv|färskvatten|n}}
* 泰語:{{t|th|น้ำจืด}}
* 托克皮辛語:{{t|tpi|kolwara}}
* 土耳其語:{{t+|tr|tatlı su}}
* 越南語:{{t+|vi|nước ngọt}}、{{t|vi|nước nhạt}}
{{trans-bottom}}
====參見====
* {{zh-l|飲用水}}
* {{zh-l|泉水}}
===發音2===
{{zh-pron
|m=Dànshuǐ
|ma=Zh-dànshui.ogg
|c=daam6 seoi2
|h=pfs=Tham-súi
|mn=tw:Tām-chúi/twv:Tām-súi
|cat=pn
}}
====專有名詞====
{{zh-proper noun}}
{{zh-wp|zh:淡水區}}
# {{zh-div|區|f=鎮}} {{place|zh|區|city/新北|c/臺灣}}
# {{zh-div|河}} {{place|zh|河|c/臺灣}}
=====派生詞=====
* {{desc|bor=1|en|Tamsui|Tan-shui}}
===來源===
* {{qual|閩南語}} {{thcwd|7546}}
{{zh-cat|Advanced}}
{{C|zh|水}}
==日語==
{{ja-kanjitab|たん|すい|yomi=kanon,on}}
===詞源===
源自 {{compound|ja|淡|水|sort=たんすい}}。
===發音===
{{ja-pron|たんすい|acc=0}}
===名詞===
{{ja-noun|たんすい}}
# [[#漢語|淡水]]
====反義詞====
* {{ja-r|海水|かいすい}}
====衍生詞====
* {{ja-r|淡水魚|たんすいぎょ}}
* {{ja-r|淡%水%湖|たん%すい%こ}}
====參見====
* {{ja-r|真%水|gloss=飲用水|ま%みず}}
* {{ja-r|飲用水|gloss=飲用水|いんようすい}}
{{c|ja|水|sort=たんすい}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=담수}}
# {{hanja form of|담수}}
j1fmfzctm64vewj70lyjw95rbjesfxo
番紅花
0
617343
9758869
8175080
2026-05-13T20:31:46Z
P1ayer
5118
內容擴充
9758869
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Crocus sativus1.jpg|thumb]]
===發音===
{{zh-pron
|m=fānhónghuā
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 鳶尾科植物{{w|番紅花}}({{taxlink|Crocus sativus|species|nomul=1}}),多年生[[草本植物]]
====另見====
* [[西紅花]]
pget1j5x1hffxg42t1ciaa1uttdvjtm
9758870
9758869
2026-05-13T20:50:55Z
Fglffer
55252
9758870
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=番红花}}
{{zh-wp|zh|zh:番紅花 (香料)}}
[[File:Crocus sativus1.jpg|thumb|250px]]
===發音===
{{zh-pron
|m=fānhónghuā
|c=faan1 hung4 faa1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 鳶尾科[[多年生]][[草本植物]]({{taxlink|Crocus sativus|species|nomul=1}})
# 番紅花的[[乾燥]][[雌蕊]][[柱頭]]所製作的[[香料]]
# {{lb|zh|TCM}} 番紅花的乾燥雌蕊柱頭,作為[[藥材]]有活血化瘀、涼血解毒、解鬱安神之效
====同義詞====
* {{zh-l|西紅花}}
* {{zh-l|藏紅花}}
* {{sense|香料}} {{zh-l|洎夫藍}}
{{C|zh|香料}}
at6799llqzdrtrsa38r4z2p439uz9bv
9758882
9758870
2026-05-14T01:41:01Z
Sayonzei
40728
9758882
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=番红花|type=12}}
{{zh-wp|zh|zh:番紅花 (香料)}}
[[File:Crocus sativus1.jpg|thumb|250px]]
===發音===
{{zh-pron
|m=fānhónghuā
|c=faan1 hung4 faa1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 鳶尾科[[多年生]][[草本植物]]({{taxfmt|Crocus sativus|species}})
# 番紅花的[[乾燥]][[雌蕊]][[柱頭]]所製作的[[香料]]
# {{lb|zh|TCM}} 番紅花的乾燥雌蕊柱頭,作為[[藥材]]有活血化瘀、涼血解毒、解鬱安神之效
====同義詞====
* {{zh-l|西紅花}}
* {{zh-l|藏紅花}}
* {{sense|香料}} {{zh-l|洎夫藍}}
====翻譯====
{{trans-top|植物}}
* 阿爾巴尼亞語:{{t+|sq|shafran|m}}、{{t|sq|krrokull|f}}
* 阿拉伯語:{{t|ar|زَعْفَرَان|m}}
*: 埃及阿拉伯語:{{t|arz|زعفران|m|tr=zaʕfarān}}
*: 漢志阿拉伯語:{{t|acw|زعفران|m|tr=zaʕfarān}}
*: 摩洛哥阿拉伯語:{{t|ary|زعفران|tr=zaʕfrān}}
* 亞美尼亞語:{{t+|hy|քրքում}}
* 阿斯圖里亞斯語:{{t|ast|azafrán|m}}
* 阿塞拜疆語:{{t+|az|zəfəran}}
* 保加利亞語:{{t|bg|шафран|m}}
* 緬甸語:{{t+|my|ကုံကုမံ}}
* 加泰羅尼亞語:{{t|ca|safranera|f}}、{{t+|ca|safrà|m}}
* 康沃爾語:{{t|kw|safran|p}}
* 捷克語:{{t+|cs|šafrán|m}}
* 丹麥語:{{t|da|safran|c|n}}
* 達爾金語:{{t|dar|загӀпиран}}
* 荷蘭語:{{t+|nl|saffraankrokus}}
* 英語:{{t+|en|saffron}}、{{t+|en|saffron crocus}}
* 世界語:{{t|eo|safrano}}
* 愛沙尼亞語:{{t+|et|safran}}
* 法羅語:{{t|fo|safran|n}}
* 芬蘭語:{{t+|fi|maustesahrami}}
* 法語:{{t+|fr|safran|m}}
* 弗留利語:{{t|fur|zafaran|m}}
* 加利西亞語:{{t+|gl|azafrán|m}}、{{t+|gl|sasafrán|m}}
* 格魯吉亞語:{{t+|ka|ზაფრანა}}
* 德語:{{t+|de|Safran|m}}
* 希臘語:{{t+|el|κρόκος|m}}
*: 古希臘語:{{t|grc|κρόκος|m}}
*: 邁錫尼希臘語:{{t|gmy|𐁉|tr={{xlit|gmy|@𐁉}}}}
* 夏威夷語:{{t|haw|keloko}}
* 印地語:{{t+|hi|केसर|f}}、{{t+|hi|कुंकुम}}、{{t+|hi|कुमकुम}}、{{t|hi|ज़ाफ़रान|m}}
* 匈牙利語:{{t+|hu|sáfrány}}
* 伊多語:{{t+|io|safrano}}
* 意大利語:{{t+|it|zafferano|m}}
* 日語:{{t+|ja|サフラン|tr=safuran}}
* 卡納達語:{{t+|kn|ಕೇಸರಿ}}
* 克什米爾語:{{t|ks|کۄنٛگ}}
* 高棉語:{{t+|km|រមៀត}}
* 老撾語:{{t|lo|ຫຍ້າຝັ່ນ}}
* 拉丁語:{{t|la|crocus|m}}、{{t|la|safranum}}
* 馬爾他語:{{t|mt|żagħfran}}
* 曼島語:{{t|gv|crogh|m}}
* 馬拉地語:{{t|mr|केसर}}
* 蒙古語:{{t+|mn|гүргэм}}
* 挪威語:
*: 書面挪威語:{{t|nb|safrankrokus|m}}
*: 新挪威語:{{t|nn|safrankrokus|m}}
* 波斯語:{{t+|fa|زعفران|tr=za'ferân}}、{{t+check|fa|کرکم|tr=korkom}}
* 皮埃蒙特語:{{t|pms|safran|m}}
* 波蘭語:{{t+|pl|szafran|m-in}}、{{t+|pl|krokus|m-an}}
* 葡萄牙語:{{t+|pt|açafrão|m}}
* 羅馬涅語:{{t|rgn|ẓafarân|m}}
* 羅馬尼亞語:{{t+|ro|șofran|m}}
* 俄語:{{t+|ru|шафра́н|m}}
* 梵語:{{t+|sa|कुङ्कुम}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|шафран|m}}
*: 拉丁語:{{t+|sh|šafran|m}}
* 斯洛伐克語:{{t+|sk|šafran|m}}
* 斯洛文尼亞語:{{t+|sl|žafran|m}}
* 西班牙語:{{t+|es|azafrán|m}}
* 斯瓦希里語:{{t|sw|mzafarani}}
* 瑞典語:{{t+|sv|saffran}}
* 泰米爾語:{{t+|ta|குங்குமப்பூ}}
* 泰語:{{t+|th|หญ้าฝรั่น|tr=ya faran}}
* 土耳其語:{{t+|tr|safran}}
* 土庫曼語:{{t+|tk|zagpyran}}
* 烏爾都語:{{t|ur|کیسر|tr=kesar|f}}、{{t|ur|زعفران|m|tr=za'farān}}
* 威尼斯語:{{t|vec|croco}}、{{t|vec|zafran}}
* 越南語:{{t|vi|nghệ tây}}
* 沃拉普克語:{{t|vo|safranakrok}}
{{trans-bottom}}
{{trans-top|香料}}
* 南非語:{{t+|af|saffraan}}
* 阿拉伯語:
*: 埃及阿拉伯語:{{t|arz|زعفران|m|tr=zaʕfarān}}
*: 摩洛哥阿拉伯語:{{t|ary|زعفران|tr=zaʕfrān}}
* 亞美尼亞語:{{t+|hy|քրքում}}
* 阿斯圖里亞斯語:{{t|ast|azafrán|m}}
* 阿塞拜疆語:{{t+|az|zəfəran}}
* 保加利亞語:{{t|bg|шафран|m}}
* 緬甸語:{{t+|my|ကုံကုမံ}}
* 加泰羅尼亞語:{{t+|ca|safrà|m}}
* 康沃爾語:{{t|kw|safran|p}}
* 捷克語:{{t+|cs|šafrán|m}}
* 迪維希語:{{t|dv|ކުކުން}}
* 荷蘭語:{{t+|nl|saffraan}}
* 英語:{{t+|en|saffron}}
* 世界語:{{t|eo|safrano}}
* 芬蘭語:{{t+|fi|sahrami}}
* 法語:{{t+|fr|safran|m}}
* 加利西亞語:{{t+|gl|azafrán|m}}、{{t+|gl|sasafrán|m}}
* 格魯吉亞語:{{t|ka|ყვითელი ყვავილი}}、{{t+|ka|ზაფრანა}}
* 德語:{{t+|de|Safran|m}}
* 希臘語:{{t+|el|κρόκος|m}}、{{t+|el|ζαφορά|f}}
*: 古希臘語:{{t|grc|κρόκος|m}}
* 古吉拉特語:{{t|gu|કેસર}}
* 夏威夷語:{{t|haw|keloko}}
* 希伯來語:{{t+|he|זְעַפְרָן|m}}
* 印地語:{{t+|hi|केसर}}
* 匈牙利語:{{t+|hu|sáfrány}}
* 冰島語:{{t|is|saffran|n}}
* 伊多語:{{t+|io|safrano}}
* 印尼語:{{t|id|kuma-kuma}}
* 愛爾蘭語:{{t|ga|cróch|m}}
* 意大利語:{{t+|it|zafferano|m}}
* 日語:{{t+|ja|サフラン|tr=safuran}}
* 卡納達語:{{t+|kn|ಕೇಸರಿ}}
* 克什米爾語:{{t|ks|کۄنٛگ}}
* 拉丁語:{{t|la|crocus|m}}
* 馬其頓語:{{t|mk|шафран|m}}
* 馬來語:{{t|ms|kuma-kuma}}、{{t|ms|kumkuma}}
* 馬爾他語:{{t|mt|żagħfran|m}}
* 曼島語:{{t|gv|crogh|m}}
* 馬拉地語:{{t|mr|केसर}}、{{t+|mr|केशर}}
* 尼泊爾語:{{t+|ne|केशर}}
* 挪威語:
*: 書面挪威語:{{t+|nb|safran|m}}
*: 新挪威語:{{t|nn|safran|m}}
* 波斯語:{{t+|fa|زعفران|tr=za'ferân}}
* 波蘭語:{{t+|pl|szafran|m-in}}
* 葡萄牙語:{{t+|pt|açafrão|m}}
* 旁遮普語:{{t|pa|ਕੇਸਰ|m}}
* 羅馬尼亞語:{{t+|ro|șofran|m}}
* 俄語:{{t+|ru|шафра́н|m}}
* 梵語:{{t+|sa|केसर|n}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|шафран|m}}
*: 拉丁語:{{t+|sh|šafran|m}}
* 僧加羅語:{{t|si|කුංකුම}}
* 斯洛伐克語:{{t|sk|šafrán|m}}
* 斯洛文尼亞語:{{t+|sl|žafran|m}}
* 西班牙語:{{t+|es|azafrán|m}}
* 斯瓦希里語:{{t|sw|zafarani}}
* 瑞典語:{{t+|sv|saffran}}
* 他加祿語:{{t|tl|asapran}}
* 泰米爾語:{{t+|ta|குங்குமப்பூ}}
* 泰盧固語:{{t+|te|కుంకుమపువ్వు}}
* 土耳其語:{{t+|tr|safran}}
* 威爾士語:{{t|cy|saffrwm|m}}、{{t|cy|saffrwn|m}}
{{trans-bottom}}
{{C|zh|香料}}
pxp35c2l5dy7iyo9bjljpdh22unzulr
海吼
0
617726
9759295
6811524
2026-05-14T05:36:08Z
Sṳnhien892
127220
/* 漢語 */
9759295
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|mn-l=hai2 hao2
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|雷州話}} [[海嘯]]
====近義詞====
{{zh-dial|海嘯}}
gjpemxtzlvjpciqyh4nt41gmvf3b23h
9759298
9759295
2026-05-14T05:42:52Z
Sṳnhien892
127220
/* 發音 */
9759298
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|mn-l=hai2# hao2
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|雷州話}} [[海嘯]]
====近義詞====
{{zh-dial|海嘯}}
frda3b4bzed7b4khkx1f3u9e1vgqd9f
紅花
0
628715
9758880
9301920
2026-05-14T01:38:26Z
Sayonzei
40728
/* 漢語 */
9758880
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=红花}}
{{wp}}
[[File:Safflower.jpg|250px|thumb|紅花]]
===發音===
{{zh-pron
|m=hónghuā
|c=hung4 faa1
|mn=qz,tw,xm:âng-hoe/zz:âng-hoa
|w=sh:6ghon ho1;sz:2ghon ho1
|cat=n,pn
}}
===名詞===
{{head|zh|名詞}}
# 菊科植物{{w|紅花}}({{Taxlink|Carthamus tinctorius|species}}),一年生直立[[草本植物]]
# {{lb|zh|TCM}} 上述植物的乾燥花,夏季時花由黃變紅時採摘,陰乾或曬乾,作為[[藥材]]
# {{&lit|zh|dot=:}}[[紅色]]的[[花]]
====派生詞彙====
{{col3|zh|番紅花|藏紅花|紅花綠葉|紅花坪|紅花人}}
====翻譯====
{{trans-top|菊科植物}}
* 阿姆哈拉語:{{t|am|ሱፍ}}
* 阿拉伯語:{{t|ar|مُرِّيق}}、{{t|ar|مُرَّيْق}}、{{t|ar|مِرِّيق}}、{{t|ar|عُصْفُر}}
* 亞拉姆語:
*: 古典敘利亞語:{{t|syc|ܚܪܝܥܐ}}、{{t|syc|ܩܽܘܪܛܡܳܐ|tr=qūrṭəmā}}
* 亞美尼亞語:{{t+|hy|կանճրակ}}
*: 中古亞美尼亞語:{{t|axm|ասփուր}}
* 孟加拉語:{{t+|bn|কুসুম}}
* 保加利亞語:{{t|bg|шафранка|f}}
* 加泰羅尼亞語:{{t|ca|safranó|m}}
* 車臣語:{{t|ce|даьтта доккху баӀ}}
* 捷克語:{{t|cs|světlice|f}}
* 荷蘭語:{{t+|nl|saffloer}}
* 英語:{{t+|en|safflower}}
* 芬蘭語:{{t+|fi|saflori}}、{{t+|fi|värisaflori}}
* 法語:{{t+|fr|carthame des teinturiers|m}}
* 加利西亞語:{{t+|gl|cártamo|m}}
* 德語:{{t|de|Färberdistel|f}}
* 希臘語:
*: 古希臘語:{{t|grc|κνῆκος|f}}
*: 邁錫尼希臘語:{{t|gmy|𐀏𐀙𐀒|m}}
* 古吉拉特語:{{t|gu|કસુંબો}}
* 印地語:{{t+|hi|कुसुम}}
* 印尼語:{{t+|id|kesumba}}
* 意大利語:{{t|it|cartamo|m}}、{{t|it|zafferanone|m}}
* 日語:{{t+|ja|紅花|tr=べにはな, benihana}}
* 爪哇語:{{t|jv|ꦏꦼꦱꦸꦩ꧀ꦧ}}
* 卡納達語:{{t+|kn|ಕುಸುಬಿ}}
* 卡片片甘語:{{t|pam|kasuba}}
* 朝鮮語:{{t|ko|잇꽃}}
* 庫爾德語:
*: 中庫爾德語:{{t|ckb|کاخڵی}}
* 拉丁語:{{t|la|cnecos|m}}
* 馬來語:{{t+|ms|kesumba}}
* 馬拉雅拉姆語:{{t|ml|ചെണ്ടൂരകം}}
* 馬拉地語:{{t|mr|करडई}}
* 尼泊爾語:{{t+|ne|कुसुम}}
* 奧利亞語:{{t+|or|କୁସୁମ}}
* 波斯語:{{t+|fa|کاجیره|tr=kâjire}}、{{t+|fa|کافیشه|tr=kâfiše}}
* 波蘭語:{{t+|pl|krokosz|m}}
* 葡萄牙語:{{t+|pt|açafroa|f}}
* 旁遮普語:{{t|pa|ਕਸੁੰਭ}}
* 羅馬尼亞語:{{t+|ro|șofrănaș|m}}、{{t+|ro|șofrănel|m}}
* 俄語:{{t+|ru|сафло́р|m}}
* 梵語:{{t+|sa|कुसुम्भ|m}}
* 斯洛文尼亞語:{{t|sl|žafranika|f}}
* 西班牙語:{{t+|es|alazor|m}}
* 瑞典語:{{t+|sv|safflor}}、{{t|sv|färgtistel|c}}
* 他加祿語:{{t|tl|kasubha}}、{{t|tl|biri}}
* 泰米爾語:{{t+|ta|செந்துருக்கம்}}
* 泰盧固語:{{t+|te|కుసుమ}}
* 泰語:{{t|th|คำฝอย}}
* 藏語:{{t|bo|གུར་ཀུམ}}
* 土耳其語:{{t+|tr|aspir}}
* 越南語:{{t|vi|hồng hoa}}、{{t+|vi|rum}}
{{trans-bottom}}
===專有名詞===
{{head|zh|專有名詞}}
# {{zh-div|村}} {{place|zh|村|town/忠路|county-level city/利川|autonomous prefecture/恩施|province/湖北|country/中國}}
{{C|zh|花|香料和香草|菊科植物}}
==日語==
===詞源1===
{{ja-kanjitab|べに|はな|k2=ばな|yomi=k}}
{{swp|lang=ja|ベニバナ}}
{{ja-compound|紅|べに|花|はな|sort=へにはな}}的組詞。{{rendaku2|hana|bana}}
====發音====
{{ja-pron|べにばな|acc=0|acc_ref=DJR}}
====名詞====
{{ja-noun|べにばな|ベニバナ}}
# 菊科植物{{w|紅花}}({{Taxlink|Carthamus tinctorius|species}})
=====近義詞=====
* {{ja-r|紅|くれない}}、{{ja-r|紅|べに}}
* {{qual|古舊}} {{ja-r|呉の藍|^くれ-の-あい}}
* {{qual|古舊}} {{ja-r|末摘花|すえつむ-はな}}
=====派生詞彙=====
{{col|ja
|{{ja-r|紅花%苺|ベニバナ% イチゴ|{{taxlink|Rubus vernus|species}}}}
|{{ja-r|紅花%隠元|ベニバナ% インゲン|{{taxfmt|Phaseolus coccineus|species}}}}
|{{ja-r|紅花%襤褸%菊|ベニバナ%-ボロ%ギク|{{taxlink|Crassocephalum crepidioides|species}}}}
|{{ja-r|紅花%油|べにはな%-ゆ}}
}}
===詞源2===
{{ja-kanjitab|こう|か|yomi=kanon}}
源自{{der|ja|ltc|sort=こうか|-}} {{ltc-l|紅花}}。
====發音====
{{ja-pron|こうか|acc=1|acc_ref=DJR}}
====名詞====
{{ja-noun|こうか|hhira=こうくわ}}
# {{lb|ja|literal|sort=こうか}} [[紅色]]的[[花]]
# {{syn of|ja|紅花|tr=benibana|t=菊科植物{{w|紅花}}({{Taxlink|Carthamus tinctorius|species}})}}
# {{lb|ja|TCM|sort=こうか}} 上述植物的乾燥花,作為[[藥材]]
====專有名詞====
{{ja-pos|proper|こうか|hhira=こうくわ}}
# {{given name|ja|女性|sort=こうか}}
===詞源3===
{{ja-kanjitab|べに|か|yomi=j}}
{{ja-compound|紅|べに|花|か|nocat=1}}。
====專有名詞====
{{ja-pos|proper|べにか|hhira=べにくわ}}
# {{given name|ja|女性|sort=べにか}}
===參考資料===
<references/>
{{C|ja|花|薊|sort=へにはな}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=홍화}}
# {{hanja form of|홍화}}
bx0kdhue6rlb9ttn3049ibpb2426iep
9759315
9758880
2026-05-14T07:59:00Z
Fglffer
55252
/* 專有名詞 */
9759315
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=红花}}
{{wp}}
[[File:Safflower.jpg|250px|thumb|紅花]]
===發音===
{{zh-pron
|m=hónghuā
|c=hung4 faa1
|mn=qz,tw,xm:âng-hoe/zz:âng-hoa
|w=sh:6ghon ho1;sz:2ghon ho1
|cat=n,pn
}}
===名詞===
{{head|zh|名詞}}
# 菊科植物{{w|紅花}}({{Taxlink|Carthamus tinctorius|species}}),一年生直立[[草本植物]]
# {{lb|zh|TCM}} 上述植物的乾燥花,夏季時花由黃變紅時採摘,陰乾或曬乾,作為[[藥材]]
# {{&lit|zh|dot=:}}[[紅色]]的[[花]]
====派生詞彙====
{{col3|zh|番紅花|藏紅花|紅花綠葉|紅花坪|紅花人}}
====翻譯====
{{trans-top|菊科植物}}
* 阿姆哈拉語:{{t|am|ሱፍ}}
* 阿拉伯語:{{t|ar|مُرِّيق}}、{{t|ar|مُرَّيْق}}、{{t|ar|مِرِّيق}}、{{t|ar|عُصْفُر}}
* 亞拉姆語:
*: 古典敘利亞語:{{t|syc|ܚܪܝܥܐ}}、{{t|syc|ܩܽܘܪܛܡܳܐ|tr=qūrṭəmā}}
* 亞美尼亞語:{{t+|hy|կանճրակ}}
*: 中古亞美尼亞語:{{t|axm|ասփուր}}
* 孟加拉語:{{t+|bn|কুসুম}}
* 保加利亞語:{{t|bg|шафранка|f}}
* 加泰羅尼亞語:{{t|ca|safranó|m}}
* 車臣語:{{t|ce|даьтта доккху баӀ}}
* 捷克語:{{t|cs|světlice|f}}
* 荷蘭語:{{t+|nl|saffloer}}
* 英語:{{t+|en|safflower}}
* 芬蘭語:{{t+|fi|saflori}}、{{t+|fi|värisaflori}}
* 法語:{{t+|fr|carthame des teinturiers|m}}
* 加利西亞語:{{t+|gl|cártamo|m}}
* 德語:{{t|de|Färberdistel|f}}
* 希臘語:
*: 古希臘語:{{t|grc|κνῆκος|f}}
*: 邁錫尼希臘語:{{t|gmy|𐀏𐀙𐀒|m}}
* 古吉拉特語:{{t|gu|કસુંબો}}
* 印地語:{{t+|hi|कुसुम}}
* 印尼語:{{t+|id|kesumba}}
* 意大利語:{{t|it|cartamo|m}}、{{t|it|zafferanone|m}}
* 日語:{{t+|ja|紅花|tr=べにはな, benihana}}
* 爪哇語:{{t|jv|ꦏꦼꦱꦸꦩ꧀ꦧ}}
* 卡納達語:{{t+|kn|ಕುಸುಬಿ}}
* 卡片片甘語:{{t|pam|kasuba}}
* 朝鮮語:{{t|ko|잇꽃}}
* 庫爾德語:
*: 中庫爾德語:{{t|ckb|کاخڵی}}
* 拉丁語:{{t|la|cnecos|m}}
* 馬來語:{{t+|ms|kesumba}}
* 馬拉雅拉姆語:{{t|ml|ചെണ്ടൂരകം}}
* 馬拉地語:{{t|mr|करडई}}
* 尼泊爾語:{{t+|ne|कुसुम}}
* 奧利亞語:{{t+|or|କୁସୁମ}}
* 波斯語:{{t+|fa|کاجیره|tr=kâjire}}、{{t+|fa|کافیشه|tr=kâfiše}}
* 波蘭語:{{t+|pl|krokosz|m}}
* 葡萄牙語:{{t+|pt|açafroa|f}}
* 旁遮普語:{{t|pa|ਕਸੁੰਭ}}
* 羅馬尼亞語:{{t+|ro|șofrănaș|m}}、{{t+|ro|șofrănel|m}}
* 俄語:{{t+|ru|сафло́р|m}}
* 梵語:{{t+|sa|कुसुम्भ|m}}
* 斯洛文尼亞語:{{t|sl|žafranika|f}}
* 西班牙語:{{t+|es|alazor|m}}
* 瑞典語:{{t+|sv|safflor}}、{{t|sv|färgtistel|c}}
* 他加祿語:{{t|tl|kasubha}}、{{t|tl|biri}}
* 泰米爾語:{{t+|ta|செந்துருக்கம்}}
* 泰盧固語:{{t+|te|కుసుమ}}
* 泰語:{{t|th|คำฝอย}}
* 藏語:{{t|bo|གུར་ཀུམ}}
* 土耳其語:{{t+|tr|aspir}}
* 越南語:{{t|vi|hồng hoa}}、{{t+|vi|rum}}
{{trans-bottom}}
===專有名詞===
{{head|zh|專有名詞}}
# {{zh-div|村}} {{place|zh|村|town/忠路|county-level city/利川|自治州/恩施|province/湖北|country/中國}}
{{C|zh|花|香料和香草|菊科植物}}
==日語==
===詞源1===
{{ja-kanjitab|べに|はな|k2=ばな|yomi=k}}
{{swp|lang=ja|ベニバナ}}
{{ja-compound|紅|べに|花|はな|sort=へにはな}}的組詞。{{rendaku2|hana|bana}}
====發音====
{{ja-pron|べにばな|acc=0|acc_ref=DJR}}
====名詞====
{{ja-noun|べにばな|ベニバナ}}
# 菊科植物{{w|紅花}}({{Taxlink|Carthamus tinctorius|species}})
=====近義詞=====
* {{ja-r|紅|くれない}}、{{ja-r|紅|べに}}
* {{qual|古舊}} {{ja-r|呉の藍|^くれ-の-あい}}
* {{qual|古舊}} {{ja-r|末摘花|すえつむ-はな}}
=====派生詞彙=====
{{col|ja
|{{ja-r|紅花%苺|ベニバナ% イチゴ|{{taxlink|Rubus vernus|species}}}}
|{{ja-r|紅花%隠元|ベニバナ% インゲン|{{taxfmt|Phaseolus coccineus|species}}}}
|{{ja-r|紅花%襤褸%菊|ベニバナ%-ボロ%ギク|{{taxlink|Crassocephalum crepidioides|species}}}}
|{{ja-r|紅花%油|べにはな%-ゆ}}
}}
===詞源2===
{{ja-kanjitab|こう|か|yomi=kanon}}
源自{{der|ja|ltc|sort=こうか|-}} {{ltc-l|紅花}}。
====發音====
{{ja-pron|こうか|acc=1|acc_ref=DJR}}
====名詞====
{{ja-noun|こうか|hhira=こうくわ}}
# {{lb|ja|literal|sort=こうか}} [[紅色]]的[[花]]
# {{syn of|ja|紅花|tr=benibana|t=菊科植物{{w|紅花}}({{Taxlink|Carthamus tinctorius|species}})}}
# {{lb|ja|TCM|sort=こうか}} 上述植物的乾燥花,作為[[藥材]]
====專有名詞====
{{ja-pos|proper|こうか|hhira=こうくわ}}
# {{given name|ja|女性|sort=こうか}}
===詞源3===
{{ja-kanjitab|べに|か|yomi=j}}
{{ja-compound|紅|べに|花|か|nocat=1}}。
====專有名詞====
{{ja-pos|proper|べにか|hhira=べにくわ}}
# {{given name|ja|女性|sort=べにか}}
===參考資料===
<references/>
{{C|ja|花|薊|sort=へにはな}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=홍화}}
# {{hanja form of|홍화}}
barpn8e6qnntc4kjyt99pueg3p6yckq
9759316
9759315
2026-05-14T08:01:09Z
Fglffer
55252
9759316
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=红花}}
{{wp}}
[[File:Safflower.jpg|250px|thumb|紅花]]
===發音===
{{zh-pron
|m=hónghuā
|c=hung4 faa1
|mn=qz,tw,xm:âng-hoe/zz:âng-hoa
|w=sh:6ghon ho1;sz:2ghon ho1
|cat=n,pn
}}
===名詞===
{{head|zh|名詞}}
# 菊科一年生直立[[草本植物]]({{Taxlink|Carthamus tinctorius|species}}),
# {{lb|zh|TCM}} 上述植物的乾燥花,夏季時花由黃變紅時採摘,陰乾或曬乾,作為[[藥材]]
# {{&lit|zh|dot=:}}[[紅色]]的[[花]]
====派生詞彙====
{{col3|zh|番紅花|藏紅花|紅花綠葉|紅花坪|紅花人}}
====翻譯====
{{trans-top|菊科植物}}
* 阿姆哈拉語:{{t|am|ሱፍ}}
* 阿拉伯語:{{t|ar|مُرِّيق}}、{{t|ar|مُرَّيْق}}、{{t|ar|مِرِّيق}}、{{t|ar|عُصْفُر}}
* 亞拉姆語:
*: 古典敘利亞語:{{t|syc|ܚܪܝܥܐ}}、{{t|syc|ܩܽܘܪܛܡܳܐ|tr=qūrṭəmā}}
* 亞美尼亞語:{{t+|hy|կանճրակ}}
*: 中古亞美尼亞語:{{t|axm|ասփուր}}
* 孟加拉語:{{t+|bn|কুসুম}}
* 保加利亞語:{{t|bg|шафранка|f}}
* 加泰羅尼亞語:{{t|ca|safranó|m}}
* 車臣語:{{t|ce|даьтта доккху баӀ}}
* 捷克語:{{t|cs|světlice|f}}
* 荷蘭語:{{t+|nl|saffloer}}
* 英語:{{t+|en|safflower}}
* 芬蘭語:{{t+|fi|saflori}}、{{t+|fi|värisaflori}}
* 法語:{{t+|fr|carthame des teinturiers|m}}
* 加利西亞語:{{t+|gl|cártamo|m}}
* 德語:{{t|de|Färberdistel|f}}
* 希臘語:
*: 古希臘語:{{t|grc|κνῆκος|f}}
*: 邁錫尼希臘語:{{t|gmy|𐀏𐀙𐀒|m}}
* 古吉拉特語:{{t|gu|કસુંબો}}
* 印地語:{{t+|hi|कुसुम}}
* 印尼語:{{t+|id|kesumba}}
* 意大利語:{{t|it|cartamo|m}}、{{t|it|zafferanone|m}}
* 日語:{{t+|ja|紅花|tr=べにはな, benihana}}
* 爪哇語:{{t|jv|ꦏꦼꦱꦸꦩ꧀ꦧ}}
* 卡納達語:{{t+|kn|ಕುಸುಬಿ}}
* 卡片片甘語:{{t|pam|kasuba}}
* 朝鮮語:{{t|ko|잇꽃}}
* 庫爾德語:
*: 中庫爾德語:{{t|ckb|کاخڵی}}
* 拉丁語:{{t|la|cnecos|m}}
* 馬來語:{{t+|ms|kesumba}}
* 馬拉雅拉姆語:{{t|ml|ചെണ്ടൂരകം}}
* 馬拉地語:{{t|mr|करडई}}
* 尼泊爾語:{{t+|ne|कुसुम}}
* 奧利亞語:{{t+|or|କୁସୁମ}}
* 波斯語:{{t+|fa|کاجیره|tr=kâjire}}、{{t+|fa|کافیشه|tr=kâfiše}}
* 波蘭語:{{t+|pl|krokosz|m}}
* 葡萄牙語:{{t+|pt|açafroa|f}}
* 旁遮普語:{{t|pa|ਕਸੁੰਭ}}
* 羅馬尼亞語:{{t+|ro|șofrănaș|m}}、{{t+|ro|șofrănel|m}}
* 俄語:{{t+|ru|сафло́р|m}}
* 梵語:{{t+|sa|कुसुम्भ|m}}
* 斯洛文尼亞語:{{t|sl|žafranika|f}}
* 西班牙語:{{t+|es|alazor|m}}
* 瑞典語:{{t+|sv|safflor}}、{{t|sv|färgtistel|c}}
* 他加祿語:{{t|tl|kasubha}}、{{t|tl|biri}}
* 泰米爾語:{{t+|ta|செந்துருக்கம்}}
* 泰盧固語:{{t+|te|కుసుమ}}
* 泰語:{{t|th|คำฝอย}}
* 藏語:{{t|bo|གུར་ཀུམ}}
* 土耳其語:{{t+|tr|aspir}}
* 越南語:{{t|vi|hồng hoa}}、{{t+|vi|rum}}
{{trans-bottom}}
===專有名詞===
{{head|zh|專有名詞}}
# {{zh-div|村}} {{place|zh|村|town/忠路|county-level city/利川|自治州/恩施|province/湖北|country/中國}}
{{C|zh|花|香料和香草|菊科植物}}
==日語==
===詞源1===
{{ja-kanjitab|べに|はな|k2=ばな|yomi=k}}
{{swp|lang=ja|ベニバナ}}
{{ja-compound|紅|べに|花|はな|sort=へにはな}}的組詞。{{rendaku2|hana|bana}}
====發音====
{{ja-pron|べにばな|acc=0|acc_ref=DJR}}
====名詞====
{{ja-noun|べにばな|ベニバナ}}
# 菊科植物{{w|紅花}}({{Taxlink|Carthamus tinctorius|species}})
=====近義詞=====
* {{ja-r|紅|くれない}}、{{ja-r|紅|べに}}
* {{qual|古舊}} {{ja-r|呉の藍|^くれ-の-あい}}
* {{qual|古舊}} {{ja-r|末摘花|すえつむ-はな}}
=====派生詞彙=====
{{col|ja
|{{ja-r|紅花%苺|ベニバナ% イチゴ|{{taxlink|Rubus vernus|species}}}}
|{{ja-r|紅花%隠元|ベニバナ% インゲン|{{taxfmt|Phaseolus coccineus|species}}}}
|{{ja-r|紅花%襤褸%菊|ベニバナ%-ボロ%ギク|{{taxlink|Crassocephalum crepidioides|species}}}}
|{{ja-r|紅花%油|べにはな%-ゆ}}
}}
===詞源2===
{{ja-kanjitab|こう|か|yomi=kanon}}
源自{{der|ja|ltc|sort=こうか|-}} {{ltc-l|紅花}}。
====發音====
{{ja-pron|こうか|acc=1|acc_ref=DJR}}
====名詞====
{{ja-noun|こうか|hhira=こうくわ}}
# {{lb|ja|literal|sort=こうか}} [[紅色]]的[[花]]
# {{syn of|ja|紅花|tr=benibana|t=菊科植物{{w|紅花}}({{Taxlink|Carthamus tinctorius|species}})}}
# {{lb|ja|TCM|sort=こうか}} 上述植物的乾燥花,作為[[藥材]]
====專有名詞====
{{ja-pos|proper|こうか|hhira=こうくわ}}
# {{given name|ja|女性|sort=こうか}}
===詞源3===
{{ja-kanjitab|べに|か|yomi=j}}
{{ja-compound|紅|べに|花|か|nocat=1}}。
====專有名詞====
{{ja-pos|proper|べにか|hhira=べにくわ}}
# {{given name|ja|女性|sort=べにか}}
===參考資料===
<references/>
{{C|ja|花|薊|sort=へにはな}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=홍화}}
# {{hanja form of|홍화}}
jyvv3sejb2ebb75xqv64l8uw183mjdd
蝌蚪
0
642885
9759296
9734106
2026-05-14T05:37:23Z
Wiktionarian89
107721
/* 詞源 */
9759296
wikitext
text/x-wiki
==漢語==
{{zh-forms|alt=科斗-古字和二簡字,蝌斗|gloss=-}}
{{zh-wp|zh|yue}}
[[File:Tadpole (baby frog).jpg|250px|thumb|蛙的蝌蚪]]
===詞源===
和{{och-l|蛞𧓕}}是內部同源詞。或與{{cog|ms|katak||蟾蜍}} 同源。
===發音===
{{zh-pron
|m=kēdǒu
|c=fo1 dau2
|md=kuŏ-dēu
|mn-t=kuê1 dao2
|mc=y
|oc=y
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{senseid|zh|Q168525}} [[兩棲類]](多指[[蛙]]、[[蟾蜍]])的[[幼體]]。{{zh-mw|m:隻}}
#* {{zh-x|還{xuán} 虷{hán} 蟹 與 '''@科斗''',莫 吾 能 若 也。|回頭看看這些孑孓、螃蟹和'''蝌蚪''',沒有能像我一樣(自如)的。|ref=Zhuangzi-L}}
#: {{例|《莊子‧秋水》|還虷蟹與科斗,莫吾能若也。}}
#: {{例|陸德明釋文|科斗,蝦蟆子也。}}
#: {{例|《南史‧文學傳‧卞彬》|蝌斗唯唯,群浮闇水。}}
#: {{例|明·李時珍《本草綱目‧蟲四‧蝌蚪》|蝌蚪生水中,蝦蟆,青蛙之子也……蝌蚪狀如河豚,頭圓,身上青黑色,始出有尾無足,稍大則足生尾脫。}}
#: {{例|清·陳維崧《點絳唇‧夜宿臨洺驛》詞|晴髻離離,太行山勢如蝌蚪。}}
# 指[[蝌蚪文]]。
#: {{例|宋·蘇軾《鳳翔八觀‧石鼓歌》|憶昔周宣歌《鴻雁》,當時籀史變蝌蚪。}}
#: {{例|元·謝應芳《懷詹國遠》詩|蝌蚪殘書補未全,齋居一榻坐來穿。}}
#: {{例|清·龔自珍《古史鉤沉論二》|孔壁既彰,蝌斗煌煌,匪籀而倉,蓋憲章者文武,而匪憲章宣王,史之小罪三。}}
# {{lb|zh|figurative}} [[音符]]
====同義詞====
{{zh-dial}}
* {{sense|音符}} {{zh-l|豆豉}}
====衍生詞====
{{col3|zh|蝌蚪文}}
====派生詞====
{{CJKV||かと|과두|khoa đẩu}}
====翻譯====
{{trans-top|兩棲動物的幼體}}
* 南非語:{{t|af|paddavis}}, {{t|af|paddavissie}}, {{t+|af|kikvors}}
* 阿爾巴尼亞語:{{t+|sq|fulterëz|f}}
* 阿拉伯語:{{t|ar|شُرْغُوف|m}}
* 亞美尼亞語:{{t+|hy|շերեփուկ}}
* 巴托阿農語:{{t|bno|ulong-ulong}}
* 阿斯圖里亞斯語:{{t|ast|renacuayu|m}}, {{t|ast|rancuayu|m}}
* 阿瓦爾語:{{t|av|къоркъотӏинчӏ}}
* 阿塞拜疆語:{{t+|az|çömçəquyruq}}
* 巴斯克語:{{t|eu|zapaburu}}
* 白俄羅斯語:{{t|be|апало́нік|m}}
* 孟加拉語:{{t|bn|বেঙাচি}}
* 保加利亞語:{{t|bg|попова лъжичка|f}}
* 緬甸語:{{t+|my|ဖားလောင်း}}, {{t+|my|ဖားတစ်ပိုင်းငါးတစ်ပိုင်း}}
* 加泰羅尼亞語:{{t+|ca|capgròs|m}}, {{t+|ca|cullerot|m}}
* 中梅拉瑙語:{{t|mel|belakedou}}
* 車臣語:{{t|ce|сеса}}
* 齊切瓦語:{{t|ny|mbululu}}
* 捷克語:{{t+|cs|pulec|m}}
* 丹麥語:{{t+|da|haletudse|c}}
* 獨龍語:{{t|duu|naku}}
* 荷蘭語:{{t+|nl|dikkopje|n}} {{qualifier|指小詞}}, {{t+|nl|dikkop|m}}, {{t+|nl|kikkervisje|n}} {{qualifier|指小詞}}
* 東占語:{{t|cjm|ꨀꨗꩀ ꨯꨗꨱꩀ|tr=anưk nauk}}
* 英語:{{t+|en|tadpole}}
* 厄爾茲亞語:{{t|myv|ботпря}}
* 世界語:{{t|eo|ranido}}, {{t|eo|bufido}}
* 愛沙尼亞語:{{t|et|kulles}}
* 法羅語:{{t|fo|halapadda|f}}
* 芬蘭語:{{t+|fi|nuijapää}}
* 法語:{{t+|fr|têtard|m}}
* 加利西亞語:{{t+|gl|cágado|m}}, {{t+|gl|culler|f}}
* 格魯吉亞語:{{t|ka|თავკომბალა}}
* 德語:{{t+|de|Kaulquappe|f}}
* 貢尼延迪語:{{t|gni|gilyjirrjgi}}
* 希臘語:{{t+|el|γυρίνος|m}}
*: 古希臘語:{{t|grc|γυρῖνος|m}}
* 希伯來語:{{t+|he|רֹאשָׁן|m|tr=rošan}}
* 印地語:{{t|hi|बेंगची|f}}, {{t|hi|[[मेंढक]] का [[बच्चा]]|m}}, {{t|hi|टैडपोल}}
* 匈牙利語:{{t+|hu|ebihal}}
* 漢斯立克語:{{t|hrx|Mollekopp|m}}
* 伊班語:{{t|iba|emburi}}, {{t|iba|empa}}
* 冰島語:{{t|is|halakarta|f}}, {{t|is|froskungi|m}}
* 印尼語:{{t+|id|berudu}}
* 因特語:{{t|ia|larva de rana}}
* 愛爾蘭語:{{t|ga|torbán|m}}
* 伊桑語:{{t|tts|ฮวก}}
* 意大利語:{{t+|it|girino|m}}
* 日語:{{t+|ja|おたまじゃくし|tr=otamajakushi}}, {{t|ja|オタマジャクシ|tr=otamajakushi}}, {{t|ja|お玉杓子|tr=otamajakushi}}, {{t+|ja|蝌蚪|tr=かと, kato}}
* 爪哇語:{{t|jv|kecebong}}
* 卡爾梅克衛拉特語:{{t|xal|шанһ хорха}}
* 哈薩克語:{{t|kk|бақашабақ}}, {{t|kk|ит балық}}
* 高棉語:{{t+|km|ក្អាត់}}, {{t+|km|ក្អុក}}
* 朝鮮語:{{t+|ko|올챙이}}
* 吉爾吉斯語:{{t|ky|көнөкбаш}}
* 老撾語:{{t|lo|ຮວກ}}
* 拉特加萊語:{{t|ltg|kūrcaklys|m}}
* 拉丁語:{{t|la|ranunculus|m}}, {{t|la|ranula|f}}
* 拉脫維亞語:{{t|lv|kurkulis|m}}
* 列茲金語:{{t|lez|варвар}}
* 立陶宛語:{{t|lt|buožgalvis}}
* 盧森堡語:{{t|lb|Kauzekapp|m}}
* 馬其頓語:{{t|mk|полногла́вец|m}}
* 馬拉加斯語:{{t+|mg|tsiboboka}}
* 馬來語:{{t|ms|berudu}}, {{t|ms|cebong}}
* 馬耳他語:{{t|mt|marżepp|m}}
* 毛利語:{{t|mi|hua poraka}}, {{t|mi|punua poraka}}
* 馬斯巴特語:{{t|msb|ulu-ulo}}
* 蒙古語:{{t|mn|шанаган хорхой}}
* 納瓦霍語:{{t|nv|tsʼǫʼasánii}}
* 尼泊爾語:{{t|ne|चेपागाडा}}
* 恩孔雅語:{{t|nko|nwunkpodikpodi}}
* 挪威語:
*: 書面挪威語:{{t+|nb|rumpetroll|n}}
*: 新挪威語:{{t|nn|rumpetroll|n}}
* 奧吉布瓦語:{{t|oj|boodoonh}}
* 奧塞梯語:{{t|os|къӕбила}}
* 帕戈語:{{t|pac|apêq}}
* 波斯語:{{t|fa|بچه قورباغه|tr=bačče-ye qurbâğe}}, {{t+|fa|کفچلیز|tr=kafčalīz}}, {{t|fa|کفلیسک|tr=kaflīsak}}
* 波蘭語:{{t+|pl|kijanka|f}}
* 葡萄牙語:{{t+|pt|girino|m}}
* 羅馬尼亞語:{{t+|ro|mormoloc|m}}
* 俄語:{{t+|ru|голова́стик|m}}
* 塞爾維亞-克羅地亞語:
*: 西里爾字母:{{t|sh|пуноглавац|m}}
*: 拉丁字母:{{t+|sh|punoglavac|m}}
* 撣語:{{t+|shn|ႁူၵ်ႈ}}
* 四川彝語:{{t|ii|ꀌꀠꒊꆱ}}
* 斯洛伐克語:{{t+|sk|žubrienka|f}}
* 斯洛文尼亞語:{{t|sl|paglavec|m}}
* 西班牙語:{{t+|es|renacuajo|m}}, {{t+|es|ranacuajo|m}}
* 瑞典語:{{t+|sv|grodyngel|n}}, {{t+|sv|yngel|n}}
* 塔戈爾語:{{t|mvv|tibulu}}
* 他加祿語:{{t|tl|uluulo}}, {{t|tl|butete}}, {{t|tl|kitikiti}}
* 傣黯語:{{t|blt|ꪅꪺꪀ}}
* 塔吉克語:{{t|tg|кафлесак}}
* 泰米爾語:{{t+|ta|தவளைக்குஞ்சு}}
* 特波里語:{{t|tbl|bikol}}
* 泰盧固語:{{t|te|తోకకప్ప}}
* 泰語:{{t+|th|ลูกอ๊อด}}
* 藏語:{{t|bo|ལྕོང་མོ}}
* 土耳其語:{{t+|tr|iribaş}}
* 圖瓦語:{{t|tyv|пага төлү}}
* 烏克蘭語:{{t|uk|пу́головок|m}}
* 維吾爾語:{{t|ug|قۇمچاق}}
* 烏茲別克語:{{t+|uz|itbaliq}}
* 越南語:{{t+|vi|nòng nọc}}, {{t|vi|nọc nọc}}, {{t|vi|óc nóc}}
* 威爾士語:{{t|cy|grifft|m}}, {{t+|cy|penbwl|m}}
* 西海岸巴瑤語:{{t|bdr|jejantik}}
* 意第緒語:{{t|yi|קאָפּעקל}}
{{trans-bottom}}
{{zh-cat|Disyllabic|兩棲動物|蛙|小動物}}
==日語==
{{ja-kanjitab|か|と|yomi=o}}
===詞源===
來自{{bor|ja|ltc|-}} {{ltc-l|蝌蚪}}。
===發音===
{{ja-pron|acc=a|かと}}
* {{homophone|ja|火斗|河図|家兎|過渡|sort=かと}}
===名詞===
{{ja-noun|かと|hhira=くわと}}
# {{synonym of|ja|お玉杓子||蝌蚪}}
{{topics|ja|sort=かと|兩棲動物|小動物}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=과두}}
# {{hanja form of|과두|}}
==越南語==
{{vi-hantutab}}
===名詞===
{{vi-noun|sc=Hani}}
# {{han tu form of|khoa đẩu|}}
8cldad2cptixde5dwm51vihqlijn3zt
里斯本
0
660279
9758843
9255226
2026-05-13T16:15:51Z
TongcyDai
53191
9758843
wikitext
text/x-wiki
==漢語==
{{zh-forms|gloss=-}}
{{zh-wp}}
===词源===
借自{{bor|zh|en|Lisbon}}。
===发音===
{{zh-pron
|m=Lǐsīběn
|c=lei5 si1 bun2
|mn=xm,zz:Lí-su-pún/qz:Lí-sir-pún
|w=sh:6li sy pen
|cat=pn
}}
===专有名词===
{{head|zh|专有名词}}
# {{sid|zh|Q597}}{{place|zh|port city|r/伊比利亞半島|[[塔霍河]]入海口,瀕臨[[大西洋]]的|;|首都|c/葡萄牙}}
#: {{syn|zh|葡京}}
====翻譯====
{{翻译-顶|葡萄牙首都}}
* 南非荷兰语:{{t|af|Lissabon}}
* 阿尔巴尼亚语:{{t|sq|Lisbona|f}}, {{t|sq|Lisbonë|f}} {{qualifier|不定}}
* 阿姆哈拉语:{{t|am|ሊዝቦን}}
* 阿拉伯语:{{t|ar|لِشْبُونَة|f|tr=Lišbūna}}, {{t|ar|أُشْبُونَة|f|tr=ʔUšbūna}} {{qualifier|古旧}}
*: 希贾兹阿拉伯语:{{t|acw|لِشْبونَة|tr=Lišbōna}}
* 阿拉贡语:{{t|an|Lisbona|f}}
* 亚美尼亚语:{{t+|hy|Լիսաբոն}}
* 阿斯图里亚斯语:{{t|ast|Lisboa|f}}
* 阿塞拜疆语:{{t+|az|Lissabon}}
* 巴斯克语:{{t+|eu|Lisboa}}
* 白俄罗斯语:{{t|be|Лісабо́н|m}}
* 孟加拉语:{{t+|bn|লিসবন}}
* 保加利亚语:{{t|bg|Лисабо́н|m}}
* 缅甸语:{{t|my|[[လစ်စဘွန်း]][[မြို့]]}}
* 加泰罗尼亚语:{{t+|ca|Lisboa|f}}
* 捷克语:{{t+|cs|Lisabon|m}}
* 丹麦语:{{t|da|Lissabon|n}}
* 荷兰语:{{t+|nl|Lissabon|n}}
* 英语:{{t+|en|Lisbon}}
* 世界语:{{t|eo|Lisbono}}
* 芬兰语:{{t+|fi|Lissabon}}
* 法语:{{t+|fr|Lisbonne|f}}
* 弗留利语:{{t|fur|Lisbone}}
* 加利西亚语:{{t+|gl|Lisboa|f}}
* 格鲁吉亚语:{{t|ka|ლისაბონი}}
* 德语:{{t+|de|Lissabon|n}}
* 希腊语:{{t|el|Λισσαβώνα|f}}
*: 古希腊语:{{t|grc|Ὀλισσιπών}}
* 夏威夷语:{{t|haw|Likepona}}
* 希伯来语:{{t|he|לִיסְבּוֹן|f|tr=lísbon}}
* 印地语:{{t|hi|लिस्बन|m}}
* 匈牙利语:{{t+|hu|Lisszabon}}
* 冰岛语:{{t|is|Lissabon|f}}
* 爱尔兰语:{{t|ga|Liospóin|f}}
* 意大利语:{{t+|it|Lisbona|f}}
* 日语:{{t+|ja|リスボン|tr=Risubon}}
* 哈萨克语:{{t|kk|Лиссабон}}
* 高棉语:{{t+|km|លីសបោន}}
* 韩语:{{t+|ko|^리스본}}
* 库尔德语:
*: 北库尔德语:{{t+|kmr|Lîzbon}}
* 吉尔吉斯语:{{t|ky|Лиссабон}}
* 老挝语:{{t|lo|ລີຊະບົນ}}
* 拉丁语:{{t|la|Olisīpō}}
* 拉脱维亚语:{{t|lv|Lisabona|f}}
* 利古里亚语:{{t|lij|Lisbonn-a}}
* 立陶宛语:{{t+|lt|Lisabona|f}}
* 低地德语:
*: 德语低地德语:{{t|nds-de|Lissabon|n}}
* 马其顿语:{{t|mk|Лисабон|m}}
* 马耳他语:{{t|mt|Liżbona}}
* 中古法语:{{t|frm|Lissebonne}}
* 米兰德斯语:{{t|mwl|Lisboua}}
* 蒙古语:
*: 西里尔字母:{{t|mn|Лиссабон}}
* 北弗里斯兰语:{{t|frr|Lisabon}}
* 挪威语:
*: 书面挪威语:{{t+|nb|Lisboa}}, {{t+|nb|Lissabon}}
* 奥克语:{{t|oc|Lisbona|f}}
* 古葡萄牙语:{{t|roa-opt|Lixbõa}}
* 奥斯曼土耳其语:{{t|ota|لیزبون|tr=Lizbon}}
* 普什图语:{{t|ps|لزبن|m|tr=Lezbón}}, {{t|ps|لېزبن|m|tr=Lezbon}}
* 波斯语:{{t|fa|لیسبون|tr=Lisbon}}
* 波兰语:{{t+|pl|Lizbona|f}}
* 葡萄牙语:{{t+|pt|Lisboa|f}}
* 罗马尼亚语:{{t+|ro|Lisabona}}
* 罗曼什语:{{t|rm|Lisbona|f}}
* 俄语:{{t+|ru|Лиссабо́н|m}}
* 塞尔维亚-克罗地亚语:
*: 西里尔字母:{{t|sh|Лисабон|m}}
*: 罗马字母:{{t|sh|Lisabon|m}}
* 斯洛伐克语:{{t+|sk|Lisabon|m}}
* 斯洛文尼亚语:{{t+|sl|Lizbóna|f}}
* 西班牙语:{{t+|es|Lisboa|f}}
* 瑞典语:{{t+|sv|Lissabon|n}}
* 塔吉克语:{{t|tg|Лиссабон}}
* 泰米尔语:{{t+|ta|லிஸ்பன்}}
* 鞑靼语:{{t|tt|Лиссабон}}
* 泰语:{{t+|th|ลิสบอน}}
* 藏语:{{t|bo|ལི་སི་བཱོན}}
* 土耳其语:{{t+|tr|Lizbon}}
* 土库曼语:{{t|tk|Lissabon}}
* 乌克兰语:{{t+|uk|Лісабо́н|m}}
* 乌尔都语:{{t|ur|لسبن|m|tr=lisban}}
* 维吾尔语:{{t|ug|لىسبون}}
* 乌兹别克语:{{t|uz|Lissabon}}
* 威尼斯语:{{t|vec|Lisbona|f}}
* 越南语:{{t|vi|Li-xboa}}
* 西弗里斯兰语:{{t|fy|Lissabon|n}}
* 意第绪语:{{t|yi|ליסבאָן|n}}, {{t|yi|ליסאַבאָן|n}}
{{翻译-底}}
tw7xub898tewkzwwsg3v309hlwdxraw
理由
0
660558
9758861
8295805
2026-05-13T18:18:50Z
Jiba1219
110530
/* 日語 */
9758861
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=lǐyóu,er=y
|c=lei5 jau4
|h=pfs=lî-yù
|mn=lí-iû
|mn-t=li2 iu5
|ma=Zh-liyóu.ogg
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[道理]]上的[[根據]]
====同義詞====
{{syn-saurus|zh|原因}}
====翻譯====
{{trans-top}}
* 高加索阿爾巴尼亞語:{{t|xag|𐕗𐔰𐕊𐔰𐕙}}
* 阿尔巴尼亚语:{{t+|sq|arsye|f}}
* 阿拉伯语:{{t|ar|سَبَب|m}}
*: 埃及阿拉伯语:{{t|arz|سبب|m|tr=sabab}}
*: 南黎凡特阿拉伯语:{{t|ajp|سبب|m|tr=sábab}}
* 亚美尼亚语:{{t+|hy|պատճառ}}
* 阿萨姆语:{{t|as|কাৰণ}}
* 阿瓦尔语:{{t|av|сабаб}}
* 阿塞拜疆语:{{t+|az|səbəb}}
* 巴什基尔语:{{t|ba|сәбәп}}
* 白俄罗斯语:{{t|be|прычы́на|f}}
* 孟加拉语:{{t|bn|কারণ}}
* 保加利亚语:{{t+|bg|причи́на|f}}
* 缅甸语:{{t+|my|ဟိတ်}}
* 齐切瓦语:{{t|ny|chifukwa}}
* 克里米亚鞑靼语:{{t|crh|sebep}}
* 捷克语:{{t+|cs|příčina|f}}
* 丹麦语:{{t+|da|årsag|c}}
* 荷兰语:{{t+|nl|oorzaak|f}}、{{t+|nl|reden|f}}、{{t+|nl|grond|m}}
* 英語:{{t+|en|reason}}、{{t+|en|cause}}
* 爱沙尼亚语:{{t|et|põhjus}}
* 芬兰语:{{t+|fi|syy}}
* 法语:{{t+|fr|raison|f}}、{{t+|fr|cause|f}}
* 加利西亚语:{{t+|gl|razón|f}}
* 格鲁吉亚语:{{t|ka|მიზეზი}}、{{t|ka|საბაბი}}
* 德语:{{t+|de|Grund|m}}、{{t+|de|Ursache|f}}
* 希腊语:{{t+|el|λόγος|m}}
*: 古希臘語:{{t|grc|αἰτία|f}}
* 希伯来语:{{t+|he|סיבה|f|tr=sibá|alt=סיבה \ סִבָּה}}
* 印地语:{{t+|hi|कारण|m}}、{{t+|hi|वजह|f}}
* 匈牙利语:{{t+|hu|ok}}
* 冰岛语:{{t+|is|ástæða|f}}
* 印尼语:{{t+|id|alasan}}、{{t+|id|sebab}}
* 爱尔兰语:{{t+|ga|ábhar|m}}、{{t|ga|fáth|m}}
*: 古爱尔兰语:{{t|sga|accuis|f}}、{{t|sga|adbar|n}}
* 意大利语:{{t+|it|ragione}}、{{t+|it|causa}}、{{t+|it|perché}}
* 日语:{{t+|ja|理由|tr=りゆう, riyū}}
* 卡片片甘语:{{t|pam|sangkan}}
* 哈萨克语:{{t+|kk|себеп}}
* 高棉语:{{t+|km|ករណី}}、{{t+|km|ហេតុ}}
* 朝鲜语:{{t+|ko|이유(理由)}}
* 吉尔吉斯语:{{t+|ky|себеп}}
* 老挝语:{{t+|lo|ເຫດຜົນ}}、{{t+|lo|ສາເຫດ}}
* 拉丁语:{{t+|la|causa|f}}
* 拉脱维亚语:{{t|lv|cēlonis|m}}
* 立陶宛语:{{t+|lt|priežastis|m}}
* 马其顿语:{{t|mk|при́чина|f}}
* 马来语:{{t+|ms|sebab}}、{{t|ms|alasan}}
* 马拉雅拉姆语:{{t+|ml|കാരണം}}、{{t|ml|-കൊണ്ട്}} {{qualifier|後綴}}
* 蒙古语:{{t+|mn|учир}}、{{t+|mn|шалтгаан}}
* 挪威语:
*: 书面挪威语:{{t+|nb|årsak|m|f}}
* 古英语:{{t|ang|intinga|m}}
* 普什图语:{{t+|ps|سبب|m|tr=sabáb}}、{{t+|ps|دليل|m|tr=dalíl}}
* 波斯语:{{t+|fa|دلیل|tr=dalil}}、{{t+|fa|سبب|tr=sabab}}
* 波兰语:{{t+|pl|przyczyna|f}}
* 葡萄牙语:{{t+|pt|causa|f}}、{{t+|pt|motivo|m}}、{{t+|pt|razão|f}}
* 罗马尼亚语:{{t+|ro|cauză|f}}
* 俄语:{{t+|ru|причи́на|f}}
* 塞尔维亚-克罗地亚语:
*: 西里尔字母:{{t|sh|разлог|m}}、{{t|sh|узрок|m}}
*: 罗马字母:{{t+|sh|razlog|m}}、{{t+|sh|ùzrok|m}}
* 斯洛伐克语:{{t|sk|príčina|f}}、{{t|sk|dôvod}}
* 斯洛文尼亚语:{{t|sl|vzrok|m}}、{{t+|sl|razlog|m}}
* 西班牙语:{{t+|es|razón|f}}、{{t+|es|causa|f}}
* 瑞典语:{{t+|sv|anledning|c}}、{{t+|sv|skäl|n}}、{{t+|sv|orsak|c}}
* 塔吉克语:{{t+|tg|сабаб}}
* 泰米尔语:{{t+|ta|காரணம்}}
* 鞑靼语:{{t+|tt|сәбәп}}
* 泰语:{{t+|th|เหตุผล}}、{{t+|th|สาเหตุ|tr=săa-hèet}}、{{t+|th|เหตุ}}
* 土耳其语:{{t+|tr|neden}}、{{t+|tr|sebep}}
* 土库曼语:{{t|tk|sebäp}}
* 乌克兰语:{{t+|uk|причи́на|f}}
* 乌尔都语:{{t|ur|وجه|f|tr=vajah}}、{{t|ur|سبب|tr=sabab}}
* 维吾尔语:{{t|ug|سەۋەب}}
* 乌兹别克语:{{t+|uz|sabab}}
* 威尼斯语:{{t+|vec|rexon|f}}
* 越南语:{{t+|vi|lý do}}、{{t+|vi|nguyên nhân}}
{{trans-bottom}}
{{zh-cat|Elementary}}
==日語==
===詞源1===
{{ja-kanjitab|り|ゆう|yomi=o,kanon}}
====發音====
{{ja-pron|りゆう|acc=0|acc_ref=NHK}}
====名詞====
{{ja-noun|りゆう|hhira=り.いう}}
# [[道理]]上的[[根據]]
#* {{quote-book
|ja
||date=Apr 23 2016
||{{lang|ja|エルドラージ覚醒}}
|trans-title=奥札奇再起
|||chapter={{ruby|{{lang|ja|[弱](じゃく)[者](しゃ)の[消](しょう)[耗](もう)}}}}
|trans-chapter=吞噬弱者
|publisher={{w|威世智}}}}
#*: {{ja-usex|「それはなぜ破%壊するのかだと?それがそうするからだ。'''理%由'''を語るなど時%間と呼%吸の無%駄だ。」|「^それ は なぜ は%かいする の か だ と?^それ が そう する から だ。'''^り%ゆう''' を かたる など じ%かん と こ%きゅう の む%だ だ。」|“它為何要破壞?它就是要破壞,說明'''理由'''只是浪費時間和氣力。”}}
# [[動機]]
=====參見=====
* {{ja-r|原%因|げん%いん|}}
===詞源2===
{{ja-kanjitab|わけ2|yomi=juku}}
{{ja-see|わけ}}
===來源===
<references/>
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=이유}}
# {{hanja form of|이유|}}
==越南語==
{{vi-hantutab}}
===名詞===
{{vi-noun|sc=Hani}}
# {{han tu form of|[[lí do]]/[[lý do]]|}}
b7nqgb4avfyfxpa1dyxkjep21265j3u
9759305
9758861
2026-05-14T07:19:07Z
TongcyDai
53191
9759305
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=lǐyóu,er=y
|c=lei5 jau4
|ca=LL-Q9186-Luilui6666-理由.wav
|h=pfs=lî-yù;hrs=h:liˋ rhiu
|mn=lí-iû
|mn-t=li2 iu5
|px=pt,xy:li3 iu2
|ma=Zh-liyóu.ogg
|w=sz:2li6 yeu2
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[道理]]上的[[根據]]
====同義詞====
{{syn-saurus|zh|原因}}
====翻譯====
{{trans-top|道理上的根據}}
* 高加索阿爾巴尼亞語:{{t|xag|𐕗𐔰𐕊𐔰𐕙}}
* 阿尔巴尼亚语:{{t+|sq|arsye|f}}
* 阿拉伯语:{{t|ar|سَبَب|m}}
*: 埃及阿拉伯语:{{t|arz|سبب|m|tr=sabab}}
*: 南黎凡特阿拉伯语:{{t|ajp|سبب|m|tr=sábab}}
* 亚美尼亚语:{{t+|hy|պատճառ}}
* 阿萨姆语:{{t|as|কাৰণ}}
* 阿瓦尔语:{{t|av|сабаб}}
* 阿塞拜疆语:{{t+|az|səbəb}}
* 巴什基尔语:{{t|ba|сәбәп}}
* 白俄罗斯语:{{t|be|прычы́на|f}}
* 孟加拉语:{{t|bn|কারণ}}
* 保加利亚语:{{t+|bg|причи́на|f}}
* 缅甸语:{{t+|my|ဟိတ်}}
* 齐切瓦语:{{t|ny|chifukwa}}
* 克里米亚鞑靼语:{{t|crh|sebep}}
* 捷克语:{{t+|cs|příčina|f}}
* 丹麦语:{{t+|da|årsag|c}}
* 荷兰语:{{t+|nl|oorzaak|f}}、{{t+|nl|reden|f}}、{{t+|nl|grond|m}}
* 英語:{{t+|en|reason}}、{{t+|en|cause}}
* 爱沙尼亚语:{{t|et|põhjus}}
* 芬兰语:{{t+|fi|syy}}
* 法语:{{t+|fr|raison|f}}、{{t+|fr|cause|f}}
* 加利西亚语:{{t+|gl|razón|f}}
* 格鲁吉亚语:{{t|ka|მიზეზი}}、{{t|ka|საბაბი}}
* 德语:{{t+|de|Grund|m}}、{{t+|de|Ursache|f}}
* 希腊语:{{t+|el|λόγος|m}}
*: 古希臘語:{{t|grc|αἰτία|f}}
* 希伯来语:{{t+|he|סיבה|f|tr=sibá|alt=סיבה \ סִבָּה}}
* 印地语:{{t+|hi|कारण|m}}、{{t+|hi|वजह|f}}
* 匈牙利语:{{t+|hu|ok}}
* 冰岛语:{{t+|is|ástæða|f}}
* 印尼语:{{t+|id|alasan}}、{{t+|id|sebab}}
* 爱尔兰语:{{t+|ga|ábhar|m}}、{{t|ga|fáth|m}}
*: 古爱尔兰语:{{t|sga|accuis|f}}、{{t|sga|adbar|n}}
* 意大利语:{{t+|it|ragione}}、{{t+|it|causa}}、{{t+|it|perché}}
* 日语:{{t+|ja|理由|tr=りゆう, riyū}}
* 卡片片甘语:{{t|pam|sangkan}}
* 哈萨克语:{{t+|kk|себеп}}
* 高棉语:{{t+|km|ករណី}}、{{t+|km|ហេតុ}}
* 朝鲜语:{{t+|ko|이유(理由)}}
* 吉尔吉斯语:{{t+|ky|себеп}}
* 老挝语:{{t+|lo|ເຫດຜົນ}}、{{t+|lo|ສາເຫດ}}
* 拉丁语:{{t+|la|causa|f}}
* 拉脱维亚语:{{t|lv|cēlonis|m}}
* 立陶宛语:{{t+|lt|priežastis|m}}
* 马其顿语:{{t|mk|при́чина|f}}
* 马来语:{{t+|ms|sebab}}、{{t|ms|alasan}}
* 马拉雅拉姆语:{{t+|ml|കാരണം}}、{{t|ml|-കൊണ്ട്}} {{qualifier|後綴}}
* 蒙古语:{{t+|mn|учир}}、{{t+|mn|шалтгаан}}
* 挪威语:
*: 书面挪威语:{{t+|nb|årsak|m|f}}
* 古英语:{{t|ang|intinga|m}}
* 普什图语:{{t+|ps|سبب|m|tr=sabáb}}、{{t+|ps|دليل|m|tr=dalíl}}
* 波斯语:{{t+|fa|دلیل|tr=dalil}}、{{t+|fa|سبب|tr=sabab}}
* 波兰语:{{t+|pl|przyczyna|f}}
* 葡萄牙语:{{t+|pt|causa|f}}、{{t+|pt|motivo|m}}、{{t+|pt|razão|f}}
* 罗马尼亚语:{{t+|ro|cauză|f}}
* 俄语:{{t+|ru|причи́на|f}}
* 塞尔维亚-克罗地亚语:
*: 西里尔字母:{{t|sh|разлог|m}}、{{t|sh|узрок|m}}
*: 罗马字母:{{t+|sh|razlog|m}}、{{t+|sh|ùzrok|m}}
* 斯洛伐克语:{{t|sk|príčina|f}}、{{t|sk|dôvod}}
* 斯洛文尼亚语:{{t|sl|vzrok|m}}、{{t+|sl|razlog|m}}
* 西班牙语:{{t+|es|razón|f}}、{{t+|es|causa|f}}
* 瑞典语:{{t+|sv|anledning|c}}、{{t+|sv|skäl|n}}、{{t+|sv|orsak|c}}
* 塔吉克语:{{t+|tg|сабаб}}
* 泰米尔语:{{t+|ta|காரணம்}}
* 鞑靼语:{{t+|tt|сәбәп}}
* 泰语:{{t+|th|เหตุผล}}、{{t+|th|สาเหตุ|tr=săa-hèet}}、{{t+|th|เหตุ}}
* 土耳其语:{{t+|tr|neden}}、{{t+|tr|sebep}}
* 土库曼语:{{t|tk|sebäp}}
* 乌克兰语:{{t+|uk|причи́на|f}}
* 乌尔都语:{{t|ur|وجه|f|tr=vajah}}、{{t|ur|سبب|tr=sabab}}
* 维吾尔语:{{t|ug|سەۋەب}}
* 乌兹别克语:{{t+|uz|sabab}}
* 威尼斯语:{{t+|vec|rexon|f}}
* 越南语:{{t+|vi|lý do}}、{{t+|vi|nguyên nhân}}
{{trans-bottom}}
{{zh-cat|Elementary}}
==日語==
===詞源1===
{{ja-kanjitab|り|ゆう|yomi=o,kanon}}
====發音====
{{ja-pron|りゆう|acc=0|acc_ref=NHK}}
====名詞====
{{ja-noun|りゆう|hhira=り.いう}}
# [[道理]]上的[[根據]]
#* {{quote-book
|ja
||date=Apr 23 2016
||{{lang|ja|エルドラージ覚醒}}
|trans-title=奥札奇再起
|||chapter={{ruby|{{lang|ja|[弱](じゃく)[者](しゃ)の[消](しょう)[耗](もう)}}}}
|trans-chapter=吞噬弱者
|publisher={{w|威世智}}}}
#*: {{ja-usex|「それはなぜ破%壊するのかだと?それがそうするからだ。'''理%由'''を語るなど時%間と呼%吸の無%駄だ。」|「^それ は なぜ は%かいする の か だ と?^それ が そう する から だ。'''^り%ゆう''' を かたる など じ%かん と こ%きゅう の む%だ だ。」|“它為何要破壞?它就是要破壞,說明'''理由'''只是浪費時間和氣力。”}}
# [[動機]]
=====參見=====
* {{ja-r|原%因|げん%いん|}}
===詞源2===
{{ja-kanjitab|わけ2|yomi=juku}}
{{ja-see|わけ}}
===來源===
<references/>
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=이유}}
# {{hanja form of|이유|}}
==越南語==
{{vi-hantutab}}
===名詞===
{{vi-noun|sc=Hani}}
# {{han tu form of|[[lí do]]/[[lý do]]|}}
pbbx3n8jt86a5f391emlzi7jzg2ur85
獵食
0
664205
9758874
8173209
2026-05-13T23:05:30Z
Apisite
85347
/* 漢語 */ + zh-forms
9758874
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=猎食}}
===發音===
{{zh-pron
|m=lièshí
|c=lip6 sik6
|h=pfs=lia̍p-sṳ̍t
|cat=v
}}
===動詞===
{{zh-verb}}
# {{rfdef|zh}}
===翻譯===
{{翻译-顶}}
* 俄語:1) [[промышлять]] [[пищу]] ([[обр.]] [[в]] ''[[знач.]]'': [[добывать]] [[средства]] [[к]] [[жизни]]) ; 2) [[кормиться]] ([[промышлять]]) [[охотой]]
{{翻译-底}}
[[Category:漢語|犬08食00]]
kvzdb5ne7ajr3db233xfv0je3eywp1g
9759319
9758874
2026-05-14T08:06:32Z
Fglffer
55252
9759319
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=猎食}}
===發音===
{{zh-pron
|m=lièshí
|c=lip6 sik6
|h=pfs=lia̍p-sṳ̍t
|cat=v
}}
===動詞===
{{zh-verb}}
# [[獵取]][[食物]]
c74x196fghvpqfu68vrnbeb21x9lurs
9759326
9759319
2026-05-14T08:17:36Z
Fglffer
55252
9759326
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=猎食}}
===發音===
{{zh-pron
|m=lièshí
|c=lip6 sik6
|h=pfs=lia̍p-sṳ̍t
|cat=v
}}
===動詞===
{{zh-verb}}
# [[獵取]][[食物]]
#: {{syn|zh|掠食|捕食}}
7pqujts0rp4vx3l8i37m6vq5phyfhpg
掠奪
0
668299
9758873
8157150
2026-05-13T23:02:38Z
Apisite
85347
/* 漢語 */ + zh-forms
9758873
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=掠夺|alt=略奪}}
===發音===
{{zh-pron
|m=lüèduó
|c=loek6 dyut6
|mn=qz,xm:lio̍k-toa̍t/zz:lia̍k-toa̍t
|px=pt:lyorh7 duah7/xy:lyoeh7 duoh7
|cat=v
}}
===動詞===
{{zh-verb}}
# {{rfdef|zh}}
===翻譯===
{{翻译-顶}}
* 俄語:[[захватывать]], [[отбирать]], [[похищать]]; [[грабить]] 掠奪殖民地 [[захватывать]] ([[захват]]) [[колоний]] 掠奪財富 [[грабить]] [[богатства]]
* 日語:[[略奪]]する(动词); [[略奪]](名词)
{{翻译-底}}
[[Category:漢語|手08大03]]
6s886k17d8zrrbiayp5rmqvwcf83zvh
9759317
9758873
2026-05-14T08:04:15Z
Fglffer
55252
9759317
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=掠夺|alt=略奪}}
{{wp}}
===發音===
{{zh-pron
|m=lüèduó
|c=loek6 dyut6
|mn=qz,xm:lio̍k-toa̍t/zz:lia̍k-toa̍t
|px=pt:lyorh7 duah7/xy:lyoeh7 duoh7
|cat=v
}}
===動詞===
{{zh-verb}}
# 用[[暴力]]將[[物品]][[據為己有]]的[[行為]]
#: {{zh-x|帝國主義 掠奪 成性。}}
====同義詞====
{{syn-saurus|zh|掠奪}}
====派生詞====
{{CJKV||j=略%奪|りゃく%だつ|약탈}}
{{zh-cat|Intermediate}}
==日語==
{{ja-kanjitab|yomi=kanon,goon|りゃく|だつ}}
{{ja-see|略奪}}
===來源===
* {{R:Kanjipedia Kotoba|0007114600|<sup>▲</sup>掠奪}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=약탈}}
# {{hanja form of|약탈}}
fdy6a6w9sxi5d2sm46ii437cvnd0lxo
リスボン
0
754309
9758858
5444235
2026-05-13T17:52:10Z
TongcyDai
53191
9758858
wikitext
text/x-wiki
==日語==
{{wp|ja:}}
===發音===
* {{ja-pron|リスボン|acc=1|acc_ref=NHK}}
===專有名詞===
{{ja-pos|proper}}
# {{tcl|ja|里斯本|id=Q597}}
===參考資料===
<references/>
{{cln|ja|外名}}
tjeqi619f4u0wuzsmb01znjoxea13ka
Gesangbuch
0
791904
9759291
5933776
2026-05-14T02:50:25Z
Apisite
85347
/* 德語 */ + de-noun
9759291
wikitext
text/x-wiki
==德語==
===發音===
* {{IPA|de|/ɡəˈzaŋˌbuːχ/}}
* {{audio|de|De-Gesangbuch.ogg|a=<<Germany>> (<<Berlin>>)}}
===名詞===
{{de-noun|n,(e)s,^er}}
# (書籍)讚美詩集
====變格====
{{de-ndecl|n,(e)s,^er}}
[[Category:德語]]
lpwt7nxn228v5bld8g2s04an9e55ud2
Tropenwald
0
808542
9758653
1883721
2026-05-13T14:02:03Z
Jeuwre
48455
詞源, 發音, 同義詞, 变格, 图片, 链接到德语维基百科
9758653
wikitext
text/x-wiki
==德語==
{{Wikipedia|lang=de}}
[[File:Guyane fr savane-roche virginie.jpg|thumb|right|[1] '''Tropenwald''' in [[Französisch-Guayana]] in [[Südamerika]]]]
===詞源===
來自{{af|de|Tropen|Wald}}。
===發音===
* {{IPA|de|[ˈtʁoːpn̩ˌvalt]|[ˈtʁoːpm̩̩ˌvalt]}}
* {{audio|de|De-Tropenwald.ogg|a=柏林}}
* {{audio|de|De-Tropenwald2.ogg|a=柏林}}
* {{hyph|de|Tro|pen|wald}}
===名词===
{{de-noun|m,(e)s,^er}}
# 热带雨林
====同義詞====
* [[tropischer Wald]]
====变格====
{{de-ndecl|m,(e)s,^er}}
===延伸閱讀===
* {{R:de:DWDS}}
3j436ti5qof9oaz221e7wrlsqp2m6n1
9758658
9758653
2026-05-13T15:51:32Z
TongcyDai
53191
9758658
wikitext
text/x-wiki
==德語==
{{Wikipedia|lang=de}}
[[File:Guyane fr savane-roche virginie.jpg|thumb|right|[1] '''Tropenwald''' in [[Französisch-Guayana]] in [[Südamerika]]]]
===詞源===
來自{{af|de|Tropen|Wald}}。
===發音===
* {{IPA|de|[ˈtʁoːpn̩ˌvalt]|[ˈtʁoːpm̩̩ˌvalt]}}
* {{audio|de|De-Tropenwald.ogg|a=柏林}}
* {{audio|de|De-Tropenwald2.ogg|a=柏林}}
* {{hyph|de|Tro|pen|wald}}
===名词===
{{de-noun|m,(e)s,^er}}
# [[热带雨林]]
====同義詞====
* {{l|de|tropischer Wald}}
====变格====
{{de-ndecl|m,(e)s,^er}}
===延伸閱讀===
* {{R:de:DWDS}}
tqdrk7y488blb5mtkbgv6to06su2840
Waschmaschine
0
823803
9759307
9474630
2026-05-14T07:29:43Z
Denny
31193
9759307
wikitext
text/x-wiki
==德语==
===发音===
{{#function:Z29055|L36579|}}
* {{IPA|de|/ˈvaʃmaˌʃiːnə/}}
* {{audio|de|De-Waschmaschine.ogg|a=柏林}}
* {{hyphenation|de|Wasch|ma|schi|ne}}
[[Category:德语名词]]
{{zhushi|阴|阴性名词}} pl.Waschmaschinen 洗衣机
gaxdjvhfx3y6ev6be2zgu0c6zj3v4ny
9759309
9759307
2026-05-14T07:40:29Z
TongcyDai
53191
9759309
wikitext
text/x-wiki
==德語==
{{wp|de:}}
===詞源===
{{ety|de|:af|waschen<t:洗>|Maschine<t:機器>}}
源自 {{affix|de|waschen|gloss1=洗|Maschine|gloss2=機器}}。
===發音===
* {{IPA|de|/ˈvaʃmaˌʃiːnə/}}
* {{audio|de|De-Waschmaschine.ogg|a=柏林}}
* {{hyphenation|de|Wasch|ma|schi|ne}}
===名詞===
{{de-noun|f}}
# [[洗衣機]]
====變格====
{{de-ndecl|f}}
====相關詞彙====
{{col3|de|Bohrmaschine
|Schreibmaschine
|Spülmaschine
|Kaffeemaschine
|Suchmaschine
|Trockenmaschine
|Waschanlage
|Waschmittel
|Waschbrett
|Waschbecken
}}
===延伸閱讀===
* {{R:de:Duden}}
* {{R:de:DWDS}}
{{C|de|家用電器}}
c7l00lq7252m2xg5pdyq4c73vzn0p07
Лиссабон
0
845232
9758856
7418991
2026-05-13T17:49:48Z
TongcyDai
53191
9758856
wikitext
text/x-wiki
==俄語==
{{wikipedia|lang=ru}}
===其他寫法===
* {{alter|ru|Лиссабо́нъ||ru-PRO}}
===發音===
* {{ru-IPA|Лиссабо́н}}
===專有名詞===
{{ru-proper noun+|Лиссабо́н|adj=лиссабо́нский}}
# {{tcl|ru|里斯本|id=Q597}}
====變格====
{{ru-noun-table|Лиссабо́н|n=sg}}
====相關詞彙====
* {{l|ru|лиссабо́нский}}
* {{l|ru|лиссабо́нец}}, {{l|ru|лиссабо́нка}}
n8yo59hqq77xz6jmatxmjou3bybakrm
engomar
0
893419
9758903
7673519
2026-05-14T02:36:14Z
Sayonzei
40728
9758903
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA}}
* {{hyph|pt|en|go|mar}}
===動詞===
{{pt-verb}}
# {{lb|pt|及物}} [[熨]]
#: {{syn|pt|passar|passar a ferro}}
# {{lb|pt|及物}} 給(衣物)[[上漿]]
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
==西班牙語==
===詞源===
源自 {{af|es|en-|goma|-ar}}。
===發音===
{{es-pr}}
===動詞===
{{es-verb-auto}}
# {{lb|es|及物}} 用[[膠水]][[粘]]上
# {{lb|es|及物}} 給(衣物)[[上漿]]
====變位====
{{es-conj-auto|nocomb=1}}
===延伸閱讀===
* {{R:es:DRAE}}
i9x217pdmmmkxa9xfrnbik1vxe8m5ly
Lisboa
0
897652
9758854
7660723
2026-05-13T17:48:45Z
TongcyDai
53191
9758854
wikitext
text/x-wiki
{{also|Lisbõa}}
==英語==
===詞源===
{{etymon|en|:der|pt:Lisboa|tree=1|text=+}}
===專有名詞===
{{en-proper noun}}
# {{dated form of|en|Lisbon}}。
===異序詞===
* {{anagrams|en|a=abilos|bolias|abilos}}
==加泰羅尼亞語==
===發音===
* {{ca-IPA|ó}}
===專有名詞===
{{ca-proper noun|f}}
# {{tcl|ca|里斯本|id=Q597}}
====相關詞彙====
* {{l|ca|lisboeta}}
==加利西亞語==
{{wp|gl:}}
===詞源===
{{ety|gl|:inh|roa-opt:Lixbõa|text=:la|tree=1}}
===專有名詞===
{{gl-proper noun|f}}
# {{tcl|gl|里斯本|id=Q597}}
====相關詞彙====
* {{l|gl|lisboeta}}
==書面挪威語==
{{wp|no:}}
===其他形式===
* {{alt|nb|Lissabon}}
===專有名詞===
{{head|nb|專有名詞}}
# {{tcl|nb|里斯本|id=Q597}}
==新挪威語==
{{wp|nn:}}
===專有名詞===
{{head|nn|專有名詞}}
# {{tcl|nn|里斯本|id=Q597}}
==葡萄牙語==
{{wp|pt:}}
{{wp|pt:Distrito de +}}
[[File:LocalDistritoLisboa.svg|thumb|200px|{{l|pt|[[localização|Localização]] do distrito de Lisboa em Portugal}}]]
[[File:Lisbon (36831596786) (cropped).jpg|thumb|{{lang|pt|[[panorama|Panorama]] [[urbano]] da cidade de Lisboa}}]]
===其他形式===
* {{alt|pt|Lx.ª|Lx.|LX|Lx||縮寫}}
* {{alt|pt|Lesboa||eye dialect}}
* {{alt|pt|Lixboa||棄用|Early Modern}}
===詞源===
{{ety|pt|:inh|roa-opt:Lixbõa|text=:la|tree=1}} {{doublet|pt|Olissipo}}。
===發音===
{{pt-IPA|br=Lisbôua|pt=+}}
* {{IPA|pt|/lɨʒˈbo.ɐ/|[lɨʒˈβo.ɐ]|a=Lisbon}}
* {{audio|pt|pt-pt Lisboa FF.ogg|a=葡萄牙}}
* {{hyph|pt|Lis|bo|a}}
===專有名詞===
{{pt-prop|f}}
# {{tcl|pt|里斯本|id=Q597}}
# {{place|pt|district|中部|c/葡萄牙|t1=里斯本}}
====用法說明====
* {{U:pt:articleless placename}}
====分體詞====
{{list:civil parishes of Lisbon/pt}}
{{col|pt|title=municipalities of Lisbon District
|Alenquer
|Amadora
|Arruda dos Vinhos
|Azambuja
|Cadaval
|Cascais
|Lisboa
|Loures
|Lourinhã
|Mafra
|Odivelas
|Oeiras
|Sintra
|Sobral de Monte Agraço
|Torres Vedras
|Vila Franca de Xira
}}
====派生詞彙====
{{col|pt
|Grande Lisboa
|lisboense
|lisboês
|lisboeta
|lisbonense
|Nova Lisboa
}}
====派生語彙====
{{top2}}
* {{desc|ca|Lisboa|bor=1}}
* {{desc|en|Lisboa|bor=1}}
* {{desc|nb|Lisboa|bor=1}}
* {{desc|nn|Lisboa|bor=1}}
* {{desc|es|Lisboa|bor=1}}
{{bottom}}
==西班牙語==
{{wp|es:}}
===詞源===
{{ety|es|:bor|pt:Lisboa}}
{{bor+|es|pt|Lisboa}},取代了{{cog|es|-}}原本的 {{m|es|Lisbona}};兩者都來自{{der|es|la|Olisīpō}}。
===發音===
{{es-pr}}
===專有名詞===
{{es-proper noun|f}}
# {{tcl|ca|里斯本|id=Q597}}
====相關詞彙====
{{col|es|lisboeta}}
i46fbedn3cqoc7ncmsag1w7e7e6kxd2
鶏冠石
0
937183
9758884
7764612
2026-05-14T01:46:46Z
Sayonzei
40728
9758884
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|けい|かん|せき|yomi=goon2,kanon}}
{{wp|ja:}}
===詞源===
源自 {{ja-com|鶏冠|けいかん|t1=雞冠|石|せき|t2=石頭}},可能對應其顏色。
===發音===
{{ja-pron|けいかんせき|acc=3|acc_ref=DJR}}
===名詞===
{{ja-noun|けいかんせき|hhira=けいくわんせき}}
# {{lb|ja|礦物學}} [[雄黃]]
#: {{syn|ja|鶏冠|tr=keikan}}
====參見====
* {{ja-r|雄%黄|ゆう%おう}}
* {{ja-r|石%黄|せき%おう}}
===參考資料===
<references/>
0swpe6599atvwbuim6jfpjdbv7faob6
Lisbona
0
956269
9758851
7660727
2026-05-13T17:14:20Z
TongcyDai
53191
9758851
wikitext
text/x-wiki
==意大利語==
===詞源===
源自{{der|it|la|Olisipo}}。
===專有名詞===
{{it-proper noun|f}}
# {{tcl|it|里斯本|id=Q597}}
===異序詞===
* {{l|it|blasoni}}
==奧克語==
===發音===
* {{IPA|oc|/lizˈbuno/}}
===專有名詞===
{{head|oc|專有名詞|g=f}}
# {{tcl|oc|里斯本|id=Q597}}
==羅曼什語==
===專有名詞===
{{head|rm|專有名詞|g=f}}
# {{tcl|rm|里斯本|id=Q597}}
mw83ksc1xba52tsmt6nxo9v1d6lyb5j
entrincheirar
0
1019413
9758893
4925751
2026-05-14T02:25:28Z
Sayonzei
40728
9758893
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
{{af|pt|en-|trincheira|-ar}}
===發音===
{{pt-IPA}}
===動詞===
{{pt-verb}}
# {{lb|pt|軍事}} [[挖掘]][[壕溝]]
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
c5o1s9x7ywgxgp5duj0n5u73thi4fb2
Template:Gl-pron
10
1036636
9759335
5373919
2026-05-14T08:59:54Z
TongcyDai
53191
?什麼活化石
9759335
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{head|gl|代詞|head={{{head|}}}|g={{{g|}}}<!--
-->|{{#if:{{{obl|}}}|介詞後}}<!--
-->|{{{obl|}}}<!--
-->|{{#if:{{{acc|}}}|賓格}}<!--
-->|{{{acc|}}}<!--
-->|{{#if:{{{dat|}}}|與格}}<!--
-->|{{{dat|}}}<!--
-->}}<!--
--><noinclude>{{documentation}}{{hwcat}}</noinclude>
3brjysp9lt7hfh32c57z71ulhgwauwx
Category:德語 建築
14
1036897
9758734
7154501
2026-05-13T16:08:29Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758734
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
辛夷
0
1080613
9758876
8466277
2026-05-13T23:24:40Z
P1ayer
5118
/* 名詞 */ 修飾語句
9758876
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Magnolia_liliiflora_Desr.jpg |thumb|200px|right|紫玉兰辛夷]]
===發音===
{{zh-pron
|m=xīnyí
|mn=sin-î
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{w|紫玉蘭}}({{taxlink|Magnolia liliiflora|species}})
# {{lb|zh|TCM}} 木蘭科植物{{w|望春玉兰|望春花}}({{taxlink|Magnolia biondii|species}})、{{w|玉蘭}}({{taxlink|Magnolia denudata|species}})及{{w|武當玉蘭}}({{taxlink|Magnolia sprengeri|species}})的乾燥[[花蕾]],作為[[藥材]]有祛風、通竅之效
# {{w|日本辛夷}}({{taxlink|Magnolia kobus|species}})
====近義詞====
* {{s|紫玉蘭}}
** {{zh-l|木蘭}}
{{C|zh|花|木蘭類植物}}
==日語==
{{ja-kanjitab|yomi=juku|こぶし2}}
{{ja-see|こぶし}}
===使用説明===
漢字拼寫{{obor|ja|zh|nocap=1|sort=こふし|辛夷}}。<ref name="KDJ">{{R:Kokugo Dai Jiten}}</ref>
===參考資料===
<references/>
{{C|ja|木蘭類植物|sort=こぶし}}
7fyhcksoqxx4hh559imgv2fxelcnyjh
雄黃
0
1085614
9758878
6916105
2026-05-14T01:02:51Z
P1ayer
5118
內容擴充
9758878
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=雄黄}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiónghuáng
|c=hung4 wong4
|h=pfs=hiùng-vòng;hrs=h:hiung vong
|mn=xm,zz:hîm-hông/qz,twv:hîn-hông/tw:hiông-hông
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 硫化物類[[礦物]]雄黃族{{w|雄黃}},主要成分為 α-As<sub>4</sub>S<sub>4</sub>
#: {{syn|zh|雞冠石}}
# {{lb|zh|TCM}} 上述礦物,作為[[藥材]]有解毒殺蟲、燥濕祛痰、截瘧之效
====派生詞====
{{col3|zh|雄黃酒}}
nm5ipd6xkk0al3e31nk3dcp0h68sli0
9758883
9758878
2026-05-14T01:44:23Z
Sayonzei
40728
9758883
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=雄黄}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiónghuáng
|c=hung4 wong4
|h=pfs=hiùng-vòng;hrs=h:hiung vong
|mn=xm,zz:hîm-hông/qz,twv:hîn-hông/tw:hiông-hông
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 硫化物類[[礦物]]雄黃族{{w|雄黃}},主要成分為 α-As<sub>4</sub>S<sub>4</sub>
#: {{syn|zh|雞冠石}}
# {{lb|zh|TCM}} 上述礦物,作為[[藥材]]有解毒殺蟲、燥濕祛痰、截瘧之效
====派生詞====
{{col3|zh|雄黃酒}}
====相關詞====
* {{zh-l|雌黃}}
====翻譯====
{{trans-top|礦物}}
* 阿拉伯語:{{t|ar|رَهَج اَلْغَار|m}}
* 亞美尼亞語:{{t+|hy|ռեալգար}}
*: 中古亞美尼亞語:{{t|axm|ջնարակ}}
* 孟加拉語:{{t+|bn|মনঃশিলা}}、{{t+|bn|মনছাল}}
* 英語:{{t+|en|realgar}}
* 芬蘭語:{{t|fi|realgaari}}
* 法語:{{t+|fr|réalgar|m}}
* 加利西亞語:{{t|gl|rosalgar|m}}、{{t|gl|resalgario|m}}
* 德語:{{t|de|Realgar|n}}、{{t|de|Rubinschwefel|m}}、{{t|de|rotes Schwefelarsenik|n}}、{{t|de|rote Arsenblende|f}}、{{t|de|Rauschrot|n}}
* 希臘語:
*: 古希臘語:{{t|grc|σανδαράκη|f}}
* 古吉拉特語:{{t|gu|મનશિલ}}
* 印地語:{{t+|hi|मैनसिल}}
* 意大利語:{{t|it|realgar|m}}
* 日語:{{t|ja|鶏冠石|tr=けいかんせき, keikanseki}}
* 拉丁語:{{t|la|risigallum|n}}、{{t|la|rissigallum|n}}
* 滿語:{{t|mnc|ᠠᠮᡳᡥᡡᠨ}}
* 奧利亞語:{{t+|or|ମନଛାଲ}}
* 波蘭語:{{t+|pl|realgar|m}}
* 旁遮普語:{{t|pa|ਮੈਨਸਿਲ|m}}
* 俄語:{{t+|ru|реальга́р|m}}
* 梵語:{{t+|sa|मनःशिला}}
* 斯洛伐克語:{{t|sk|realgár|m}}
* 西班牙語:{{t|es|rejalgar|m}}
* 瑞典語:{{t|sv|realgar}}
* 他加祿語:{{t|tl|batikos}}
* 泰米爾語:{{t+|ta|மனோசிலை}}
{{trans-bottom}}
==日語==
{{ja-kanjitab|ゆう|おう|yomi=o}}
===名詞===
{{ja-noun|ゆうおう|hhira=ゆうわう}}
# {{ja-kyu sp|雄黄}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=웅황}}
# {{hanja form of|웅황}}
6yr718ea8haaqdm68my3v79ws2j0y54
旋覆花
0
1090351
9759355
6920816
2026-05-14T10:00:19Z
P1ayer
5118
內容擴充
9759355
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Inula japonica 48818030.jpg|thumb|旋覆花]]
===發音===
{{zh-pron
|m=xuánfùhuā,er=y
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 菊科植物{{w|旋覆花}}({{taxlink|Inula japonica|species}}),多年生[[草本植物]]
#: {{syn|zh|滴滴金}}
# {{lb|zh|TCM}} 菊科植物{{w|旋覆花}}({{taxlink|Inula japonica|species}})或{{w|歐亞旋覆花}}({{taxlink|Inula britannica|species}})的乾燥頭狀花序,作為[[藥材]]有降氣、消痰、行水、止嘔之效
oh2wlevi191qwgg363qsn96uj5zqr09
西洋參
0
1107244
9759334
7511307
2026-05-14T08:58:04Z
P1ayer
5118
內容擴充
9759334
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=西洋参|t2=西洋蔘|type=21}}
{{zh-wp}}
[[File:Panax quinquefolius.jpg|thumb]]
===發音===
{{zh-pron
|m=xīyángshēn
|c=sai1 joeng4 sam1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 五加科植物{{w|西洋參}}({{taxlink|Panax quinquefolius|species}}),多年生[[草本植物]]
# {{lb|zh|TCM}} 上述植物的乾燥根,作為[[藥材]]有補氣養陰、清熱生津之效
====近義詞====
{{zh-dial}}
====另見====
* {{zh-l|補益藥}}
aor165be29ubgjv70fu148tgkoeks8q
9759352
9759334
2026-05-14T09:33:20Z
Sayonzei
40728
9759352
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=西洋参|t2=西洋蔘|type=21}}
{{zh-wp}}
[[File:Panax quinquefolius.jpg|thumb]]
===發音===
{{zh-pron
|m=xīyángshēn
|c=sai1 joeng4 sam1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 五加科植物{{w|西洋參}}({{taxlink|Panax quinquefolius|species}}),多年生[[草本植物]]
# {{lb|zh|TCM}} 上述植物的乾燥根,作為[[藥材]]有補氣養陰、清熱生津之效
====近義詞====
{{zh-dial}}
====翻譯====
{{trans-top|''Panax quinquefolius''}}
* 英語:{{t+|en|American ginseng}}
* 芬蘭語:{{t+|fi|amerikanginseng}}、{{t+|fi|amerikanginsengjuuri}}
* 法語:{{t|fr|ginseng américain|m}}
* 葡萄牙語:{{t|pt|ginseng americano|m}}
* 西班牙語:{{t|es|ginseng americano|m}}
* 瑞典語:{{t|sv|amerikansk ginseng|c}}
{{trans-bottom}}
====另見====
* {{zh-l|補益藥}}
jjl7rb2rbupbszz1jqdus8xahvvab3f
豨薟
0
1108980
9759293
8194133
2026-05-14T03:58:49Z
P1ayer
5118
9759293
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=豨莶}}
{{zh-wp|zh:豨莶|zh:豨薟}}
===發音===
{{zh-pron
|m=xī薟
|c=hei1 cim1,hei1 him1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 菊科植物{{w|豨莶|豨薟}}({{taxlink|Siegesbeckia orientalis|species}}),一年生[[草本植物]]
# 菊科植物{{zh-alt-name|天名精|{{taxlink|Carpesium abrotanoides|species}}}}
====派生詞====
* [[豨薟草]]
2ls3vflhuad4lmy6579o4renorlxcbr
9759302
9759293
2026-05-14T06:55:53Z
Sayonzei
40728
/* 派生詞 */
9759302
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=豨莶}}
{{zh-wp|zh:豨莶|zh:豨薟}}
===發音===
{{zh-pron
|m=xī薟
|c=hei1 cim1,hei1 him1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 菊科植物{{w|豨莶|豨薟}}({{taxlink|Siegesbeckia orientalis|species}}),一年生[[草本植物]]
# 菊科植物{{zh-alt-name|天名精|{{taxlink|Carpesium abrotanoides|species}}}}
====派生詞====
{{col|zh|豨薟草}}
65ll2vrehr0m7sauzrijwds5j3ktur8
9759312
9759302
2026-05-14T07:53:07Z
Fglffer
55252
9759312
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=豨莶}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xī薟
|c=hei1 cim1,hei1 him1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 菊科一年生[[草本植物]]({{taxlink|Siegesbeckia orientalis|species}})
# {{zh-alt-name|天名精|{{taxlink|Carpesium abrotanoides|species}}}}
====派生詞====
{{col|zh|豨薟草}}
s4kbb51lpzvga7w2l61lyvn6soc5urd
9759313
9759312
2026-05-14T07:53:27Z
Fglffer
55252
9759313
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=豨莶}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xī薟
|c=hei1 cim1,hei1 him1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# 菊科一年生[[草本植物]]({{taxlink|Siegesbeckia orientalis|species}})
# {{zh-alt-name|天名精|{{taxlink|Carpesium abrotanoides|species}}}}
====派生詞====
{{col|zh|豨薟草}}
{{C|zh|菊科植物}}
j2ml46c1r4knmlza41rmf9zxl0su05t
細辛
0
1111349
9759308
9161181
2026-05-14T07:35:09Z
P1ayer
5118
/* 名詞 */ 內容擴充
9759308
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=细辛}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xìxīn
|mn=sè-sin/sòe-sin
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[馬兜鈴]]科細辛屬植物{{w|細辛}}({{taxlink|Asarum sieboldii|species}})
# {{lb|zh|TCM}} 馬兜鈴科植物北細辛({{taxlink|Asarum heterotropoides|species}})、{{w|細辛}}({{taxlink|Asarum sieboldii|species}})的乾燥根及根莖,作為[[藥材]]有解表散寒、祛風止痛、溫肺化飲、通竅之效
{{C|zh|胡椒目植物}}
==日語==
{{ja-kanjitab|さい|しん|yomi=goon,o}}
===發音===
{{ja-pron|さいしん|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|さいしん}}
# {{syn of|ja|薄葉細辛|tr=usuba saishin|t=[[#漢語|細辛]]}}
# {{lb|ja|TCM}} [[#漢語|細辛]]的根莖
====派生詞====
* {{ja-r|薄%葉細辛|ウス%バ サイシン}}
* {{ja-r|尾%長細辛|オ%ナガ サイシン}}
===參考資料===
<references/>
{{C|ja|胡椒目植物}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=세신}}
# {{hanja form of|세신}}
j4r0fa4jruy1esv9kjie031mptl2n0f
9759311
9759308
2026-05-14T07:49:31Z
P1ayer
5118
/* 名詞 */
9759311
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=细辛}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xìxīn
|mn=sè-sin/sòe-sin
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[馬兜鈴]]科細辛屬植物{{w|細辛}}({{taxlink|Asarum sieboldii|species}})
#: {{syn|zh|華細辛|漢城細辛}}
# {{lb|zh|TCM}} 馬兜鈴科植物北細辛({{taxlink|Asarum heterotropoides|species}})、{{w|細辛}}({{taxlink|Asarum sieboldii|species}})的乾燥根及根莖,作為[[藥材]]有解表散寒、祛風止痛、溫肺化飲、通竅之效
{{C|zh|胡椒目植物}}
==日語==
{{ja-kanjitab|さい|しん|yomi=goon,o}}
===發音===
{{ja-pron|さいしん|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|さいしん}}
# {{syn of|ja|薄葉細辛|tr=usuba saishin|t=[[#漢語|細辛]]}}
# {{lb|ja|TCM}} [[#漢語|細辛]]的根莖
====派生詞====
* {{ja-r|薄%葉細辛|ウス%バ サイシン}}
* {{ja-r|尾%長細辛|オ%ナガ サイシン}}
===參考資料===
<references/>
{{C|ja|胡椒目植物}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=세신}}
# {{hanja form of|세신}}
ff8zy8n23vvrqk2qulv1cejgjhg3kj9
9759314
9759311
2026-05-14T07:57:23Z
Fglffer
55252
9759314
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=细辛}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xìxīn
|mn=sè-sin/sòe-sin
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[馬兜鈴]]科細辛屬植物({{taxlink|Asarum sieboldii|species}})
#: {{syn|zh|華細辛|漢城細辛}}
# {{lb|zh|TCM}} 馬兜鈴科植物北細辛({{taxlink|Asarum heterotropoides|species}})、細辛({{taxlink|Asarum sieboldii|species}})的乾燥根及根莖,作為[[藥材]]有解表散寒、祛風止痛、溫肺化飲、通竅之效
{{C|zh|胡椒目植物}}
==日語==
{{ja-kanjitab|さい|しん|yomi=goon,o}}
===發音===
{{ja-pron|さいしん|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|さいしん}}
# {{syn of|ja|薄葉細辛|tr=usuba saishin|t=[[#漢語|細辛]]}}
# {{lb|ja|TCM}} [[#漢語|細辛]]的根莖
====派生詞====
* {{ja-r|薄%葉細辛|ウス%バ サイシン}}
* {{ja-r|尾%長細辛|オ%ナガ サイシン}}
===參考資料===
<references/>
{{C|ja|胡椒目植物}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=세신}}
# {{hanja form of|세신}}
q55bedi5l9cutypcqz4nfg1iyjsnwpb
Category:解剖學
14
1126620
9758768
8946390
2026-05-13T16:09:42Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758768
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
彰化
0
1199301
9759348
7106476
2026-05-14T09:05:11Z
TongcyDai
53191
9759348
wikitext
text/x-wiki
==漢語==
{{zh-forms|[[教化]]}}
{{zh-wp|zh|yue|lzh|hak:Chông-fa-yen|cdo:Ciŏng-huá|nan:Chiang-hòa|wuu:彰化县}}
[[File:Taiwan ROC political division map Changhua County.svg|thumb|]]
===詞源===
來自1723年創立的{{w|彰化縣}}。
===發音===
{{zh-pron
|m=Zhānghuà
|c=zoeng1 faa3
|h=pfs=Chông-fa
|md=Ciŏng-huá
|mn=xm,tw:Chiang-hòa/xm,tw:Chiong-hòa
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{place|zh|縣|country/臺灣}}
# {{place|zh|市|county/彰化|country/臺灣}}
j9js18ogq0zp3lf0c5512cuacjvfx2u
9759349
9759348
2026-05-14T09:05:34Z
TongcyDai
53191
9759349
wikitext
text/x-wiki
==漢語==
{{zh-forms|[[教化]]}}
{{zh-wp|zh|yue|lzh|hak:Chông-fa-yen|cdo:Ciŏng-huá|nan:Chiang-hòa|wuu:彰化县}}
[[File:Taiwan ROC political division map Changhua County.svg|thumb|]]
===詞源===
來自1723年創立的{{w|彰化縣}}。
===發音===
{{zh-pron
|m=Zhānghuà
|c=zoeng1 faa3
|h=pfs=Chông-fa;hrs=h:zhongˋ faˇ
|md=Ciŏng-huá
|mn=xm,tw:Chiang-hòa/xm,tw:Chiong-hòa
|px=pt:^zyorng1 *hua4/xy:zyoeng1 *hua4
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{place|zh|縣|country/臺灣}}
# {{place|zh|市|county/彰化|country/臺灣}}
9suer7qh0ubtvicqk8op3fglcamo1im
9759353
9759349
2026-05-14T09:34:18Z
Sayonzei
40728
9759353
wikitext
text/x-wiki
==漢語==
{{zh-forms|[[教化]]}}
{{zh-wp|zh|yue|lzh|hak:Chông-fa-yen|cdo:Ciŏng-huá|nan:Chiang-hòa|wuu:彰化县}}
[[File:Taiwan ROC political division map Changhua County.svg|thumb|]]
===詞源===
來自1723年創立的{{w|彰化縣}}。
===發音===
{{zh-pron
|m=Zhānghuà
|c=zoeng1 faa3
|h=pfs=Chông-fa;hrs=h:zhongˋ faˇ
|md=Ciŏng-huá
|mn=xm,tw:Chiang-hòa/xm,tw:Chiong-hòa
|px=pt:^zyorng1 *hua4/xy:zyoeng1 *hua4
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{place|zh|縣|country/臺灣}}
# {{place|zh|市|county/彰化|country/臺灣}}
====翻譯====
{{trans-top|臺灣地名}}
* 英語:{{t+|en|Changhua}}
* 日語:{{t|ja|彰化|tr=しょうか, Shōka}}
* 朝鮮語:{{t+|ko|^장화(彰化)}}
* 波蘭語:{{t|pl|Changhua|n}}
* 越南語:{{t|vi|Chương Hóa}} ({{t|vi|彰化}})
{{trans-bottom}}
rlv4kl2teevikyd3733dkj6fvoj8gqt
9759354
9759353
2026-05-14T09:52:01Z
TongcyDai
53191
9759354
wikitext
text/x-wiki
==漢語==
{{zh-forms|[[教化]]}}
{{zh-wp|zh|yue|lzh|hak:Chông-fa-yen|cdo:Ciŏng-huá|nan:Chiang-hòa|wuu:彰化县}}
[[File:Taiwan ROC political division map Changhua County.svg|thumb|]]
===詞源===
來自1723年創立的{{w|彰化縣}}。
===發音===
{{zh-pron
|m=Zhānghuà
|c=zoeng1 faa3
|h=pfs=Chông-fa;hrs=h:zhongˋ faˇ
|md=Ciŏng-huá
|mn=xm,tw:Chiang-hòa/xm,tw:Chiong-hòa
|px=pt:^zyorng1 *hua4/xy:zyoeng1 *hua4
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{zh-div|縣}} {{sid|zh|Q133865}}{{place|zh|縣|country/臺灣}}
# {{zh-div|市}} {{sid|zh|Q195215}}{{place|zh|市|county/彰化|country/臺灣}}
====翻譯====
{{trans-top|臺灣地名}}
* 英語:{{t+|en|Changhua}}
* 日語:{{t|ja|彰化|tr=しょうか, Shōka}}
* 朝鮮語:{{t+|ko|^장화(彰化)}}
* 波蘭語:{{t|pl|Changhua|n}}
* 越南語:{{t|vi|Chương Hóa}} ({{t|vi|彰化}})
{{trans-bottom}}
lxjvut1p4jao3aru9czetrfnu1opm47
9759358
9759354
2026-05-14T10:31:54Z
TongcyDai
53191
9759358
wikitext
text/x-wiki
==漢語==
{{zh-forms|[[教化]]}}
{{zh-wp|zh|yue|lzh|hak:Chông-fa-yen|cdo:Ciŏng-huá|nan:Chiang-hòa|wuu:彰化县}}
[[File:Taiwan ROC political division map Changhua County.svg|thumb|]]
===詞源===
來自1723年創立的{{w|彰化縣}}。
===發音===
{{zh-pron
|m=Zhānghuà
|c=zoeng1 faa3
|h=pfs=Chông-fa;hrs=h:zhongˋ faˇ
|md=Ciŏng-huá
|mn=xm,tw:Chiang-hòa/xm,tw:Chiong-hòa
|px=pt:^zyorng1 *hua4/xy:zyoeng1 *hua4
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{sid|zh|Q133865}}{{zh-div|縣}} {{place|zh|縣|country/臺灣}}
# {{sid|zh|Q195215}}{{zh-div|市}} {{place|zh|市|county/彰化|country/臺灣}}
====翻譯====
{{trans-top|臺灣地名}}
* 英語:{{t+|en|Changhua}}
* 日語:{{t|ja|彰化|tr=しょうか, Shōka}}
* 朝鮮語:{{t+|ko|^장화(彰化)}}
* 立陶宛語:{{t|lt|Džanghua|f}}
* 波蘭語:{{t|pl|Changhua|n}}
* 越南語:{{t|vi|Chương Hóa}} ({{t|vi|彰化}})
{{trans-bottom}}
ar954vrh5wwawx33j4r9d4qbdor72zp
9759359
9759358
2026-05-14T10:33:42Z
TongcyDai
53191
9759359
wikitext
text/x-wiki
==漢語==
{{zh-forms|[[教化]]}}
{{zh-wp|zh|yue|lzh|hak:Chông-fa-yen|cdo:Ciŏng-huá|nan:Chiang-hòa|wuu:彰化县}}
[[File:Taiwan ROC political division map Changhua County.svg|thumb|]]
===詞源===
來自1723年創立的{{w|彰化縣}}。
===發音===
{{zh-pron
|m=Zhānghuà
|c=zoeng1 faa3
|h=pfs=Chông-fa;hrs=h:zhongˋ faˇ
|md=Ciŏng-huá
|mn=xm,tw:Chiang-hòa/xm,tw:Chiong-hòa
|px=pt:^zyorng1 *hua4/xy:zyoeng1 *hua4
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{sid|zh|Q133865}}{{zh-div|縣}} {{place|zh|縣|西部|country/臺灣}}
# {{sid|zh|Q195215}}{{zh-div|市}} {{place|zh|市|county/彰化|country/臺灣}}
====翻譯====
{{trans-top|臺灣地名}}
* 英語:{{t+|en|Changhua}}
* 日語:{{t|ja|彰化|tr=しょうか, Shōka}}
* 朝鮮語:{{t+|ko|^장화(彰化)}}
* 立陶宛語:{{t|lt|Džanghua|f}}
* 波蘭語:{{t|pl|Changhua|n}}
* 越南語:{{t|vi|Chương Hóa}} ({{t|vi|彰化}})
{{trans-bottom}}
lo66xrbrcg1f1lqmbg0v4eehsercibb
9759360
9759359
2026-05-14T10:35:53Z
TongcyDai
53191
9759360
wikitext
text/x-wiki
==漢語==
{{zh-forms|[[教化]]}}
{{zh-wp|zh|yue|lzh|hak:Chông-fa-yen|cdo:Ciŏng-huá|nan:Chiang-hòa|wuu:彰化县}}
[[File:Taiwan ROC political division map Changhua County.svg|thumb|]]
===詞源===
來自1723年創立的{{w|彰化縣}}。
===發音===
{{zh-pron
|m=Zhānghuà
|c=zoeng1 faa3
|h=pfs=Chông-fa;hrs=h:zhongˋ faˇ
|md=Ciŏng-huá
|mn=xm,tw:Chiang-hòa/xm,tw:Chiong-hòa
|px=pt:^zyorng1 *hua4/xy:zyoeng1 *hua4
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{sid|zh|Q133865}}{{zh-div|縣}} {{place|zh|縣|西部|c/臺灣}}
# {{sid|zh|Q195215}}{{zh-div|市}} {{place|zh|市|county/彰化|c/臺灣}}
====翻譯====
{{trans-top|臺灣地名}}
* 英語:{{t+|en|Changhua}}
* 日語:{{t|ja|彰化|tr=しょうか, Shōka}}
* 朝鮮語:{{t+|ko|^장화(彰化)}}
* 立陶宛語:{{t|lt|Džanghua|f}}
* 波蘭語:{{t|pl|Changhua|n}}
* 越南語:{{t|vi|Chương Hóa}} ({{t|vi|彰化}})
{{trans-bottom}}
7re5kfe00lvyfcp0w3gq83kxza0d386
9759361
9759360
2026-05-14T10:37:18Z
TongcyDai
53191
9759361
wikitext
text/x-wiki
==漢語==
{{zh-forms|[[教化]]}}
{{zh-wp|zh|yue|lzh|hak:Chông-fa-yen|cdo:Ciŏng-huá|nan:Chiang-hòa|wuu:彰化县}}
[[File:Taiwan ROC political division map Changhua County.svg|thumb|]]
===詞源===
來自1723年創立的{{w|彰化縣}}。
===發音===
{{zh-pron
|m=Zhānghuà
|c=zoeng1 faa3
|h=pfs=Chông-fa;hrs=h:zhongˋ faˇ
|md=Ciŏng-huá
|mn=xm,tw:Chiang-hòa/xm,tw:Chiong-hòa
|px=pt:^zyorng1 *hua4/xy:zyoeng1 *hua4
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{sid|zh|Q133865}}{{zh-div|縣}} {{place|zh|縣|西部|c/臺灣}}
# {{sid|zh|Q195215}}{{zh-div|市}} {{place|zh|市/行政中心|county/彰化|c/臺灣}}
====翻譯====
{{trans-top|臺灣地名}}
* 英語:{{t+|en|Changhua}}
* 日語:{{t|ja|彰化|tr=しょうか, Shōka}}
* 朝鮮語:{{t+|ko|^장화(彰化)}}
* 立陶宛語:{{t|lt|Džanghua|f}}
* 波蘭語:{{t|pl|Changhua|n}}
* 越南語:{{t|vi|Chương Hóa}} ({{t|vi|彰化}})
{{trans-bottom}}
n3ezw99r9p58230skke7buw9gnxdnp1
掠食
0
1221131
9759324
6988298
2026-05-14T08:16:22Z
Fglffer
55252
9759324
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{wp}}
===發音===
{{zh-pron
|m=lüèshí
|cat=v
}}
===動詞===
{{zh-verb}}
# [[捕捉]][[食物]]
====衍生詞====
{{col3|zh|掠食者}}
n16t5l9qidurigvuq1rarjsam3p5e4s
9759325
9759324
2026-05-14T08:17:17Z
Fglffer
55252
9759325
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=lüèshí
|cat=v
}}
===動詞===
{{zh-verb}}
# [[捕捉]][[食物]]
#: {{syn|zh|獵食|捕食}}
====衍生詞====
{{col3|zh|掠食者}}
p7fctyc92c3xx931y267duu2kaw918o
破瓦寒窯
0
1286995
9759384
7003999
2026-05-14T11:47:11Z
Apisite
85347
/* 漢語 */ + zh-forms
9759384
wikitext
text/x-wiki
==漢語==
{{zh-forms|t2=破瓦寒窑|s=破瓦寒窑}}
===讀音===
* 汉语拼音:pò wǎ hán yáo
===翻譯===
{{翻譯-頂}}
* {{en}}:lit. broken tiles, cold hearth; fig. a broken-down house;poor and shabby dwelling;
{{翻譯-底}}
{{CC-CEDICT}}
[[Category:待分類的漢語詞]]
[[Category:漢語|石05瓦00宀09穴10]]
8xmawrxh1nkhzzsayszb3tl5mqdat6g
花旗參
0
1315892
9759351
7009206
2026-05-14T09:32:29Z
Sayonzei
40728
9759351
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=花旗参|t2=花旗蔘|type=21}}
{{wp|zh:}}
===發音===
{{zh-pron
|m=huāqíshēn
|c=faa1 kei4 sam1
|c-t=fa1 kei3 lhim1,fa1 kei3 tam1
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[西洋參]] {{gloss|{{taxfmt|Panax quinquefolius|species}}}} {{zh-mw|m,c:條}}
====近義詞====
{{zh-dial|西洋參}}
9kore257wx2fgt3n5kyfxean1qiunav
Wiktionary:词条请求
4
1352129
9759385
9633945
2026-05-14T11:55:06Z
Apisite
85347
9759385
wikitext
text/x-wiki
這裡是中文維基詞典的條目請求頁面。如果您有詞條想創建,可以在這裡提出。
==中文詞彙==
{{Subpagelist}}
==外文詞彙==
* {{l|en|intrapersonal}} - [[:en:intrapersonal|en]]
* {{l|en|excursus}} - [[:en:excursus|en]]
* {{l|zh|夜不能寐}} - [[:en:夜不能寐|en]]
* 列入請求時請註明語種。
[[Category:請求]]
rikaeml82ujatwvxvqmazdczfci6aia
9759386
9759385
2026-05-14T11:55:29Z
Apisite
85347
9759386
wikitext
text/x-wiki
這裡是中文維基詞典的條目請求頁面。如果您有詞條想創建,可以在這裡提出。
==中文詞彙==
{{Subpagelist}}
==外文詞彙==
* {{l|zh|夜不能寐}} - [[:en:夜不能寐|en]]
* {{l|en|excursus}} - [[:en:excursus|en]]
* 列入請求時請註明語種。
[[Category:請求]]
rwdi8qfgkd5o9rriy55pc7o1071qpfd
Category:俄語 航空學
14
1362559
9758759
7158134
2026-05-13T16:09:22Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758759
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:俄語 電視
14
1363535
9758667
7157877
2026-05-13T16:05:56Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758667
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:日語 疾病
14
1365276
9758781
7145878
2026-05-13T16:10:11Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758781
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:政治
14
1366851
9758731
7033132
2026-05-13T16:08:22Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758731
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:家庭
14
1366857
9758789
7033196
2026-05-13T16:10:27Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758789
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:星期名稱
14
1373230
9758758
7033081
2026-05-13T16:09:20Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758758
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Changhua
0
1382418
9759362
7815620
2026-05-14T10:38:09Z
TongcyDai
53191
9759362
wikitext
text/x-wiki
{{also|Chang-hua|chánghuà}}
==英語==
{{wp|en:}}
{{commonscat|Changhua County}}
===其他形式===
* {{alt|en|Chang-hua||also from|_|Wade-Giles}}
* {{alt|en|Changhwa|Chang-hwa}}
* {{alt|en|Jhanghua||Tongyong Pinyin}}
* {{alt|en|Zhanghua||Pinyin}}
===詞源===
借自{{der|en|cmn|-}} {{m|cmn|彰化|tr=Zhānghuà}} 的{{bor|en|cmn-wadegiles|-}}:{{m|cmn||Chang¹-hua⁴}}。
===發音===
* {{IPA|en|/(ˈ)t͡ʃæŋˈhwɑ/}}
* {{enPR|jängʹhwäʹ}}<ref name="seltzer">{{cite-book|en|year=1952|chapter=Changhwa or Chang-hua|editor=Leon E. Seltzer|title=The Columbia Lippincott Gazetteer of the World|url=https://archive.org/details/columbialippinco00selt/|location=Morningside Heights, NY|publisher={{w|Columbia University Press}}|oclc=802473294|page=369|pageurl=https://archive.org/details/columbialippinco00selt/page/369/|column=3|text=Changhwa or Chang-hua (jängʹhwäʹ), Jap. [''Japanese''<!--Jap. = Japanese https://archive.org/details/columbialippinco00selt/page/n14/-->] ''Shoka'' (shōʹkä),{{...}}}}</ref>
* {{hyphenation|en|Chang|hua}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-Changhua.wav|a=Southern England}}
===專有名詞===
{{en-proper noun}}
# {{tcl|en|彰化|id=Q133865}}
#* {{quote-journal
|en
|url=https://archive.org/details/sim_free-china-weekly_1979-02-18_20_6/
|date=February 18, 1979
|title='Cowgirl' finds contentment, prosperity on the land
|journal=Free China Weekly
|volume=XX
|issue=6
|issn=0016-0318
|oclc=1786626
|location=[[Taipei]]
|page=2
|pageurl=https://archive.org/details/sim_free-china-weekly_1979-02-18_20_6/page/n1/
|text=That is why Yeh Hui-chen goes contentedly every day to her family ranch in the Mt. Bank area of '''Changhua''' county in central Taiwan to pursue her chosen profession.[...]In the past, the inhabitants eked out a meager living by growing pineapples and plums, which had to be carried out on foot through the rugged mountain area on the border of '''Changhua''' and Nantou counties.}}
#* {{quote-book
|en
|year=2000
|author=[[w:Chen Shui-bian|Chen Shui-Bian]]
|chapter=Learning and Transformation
|translator=David J. Toman
|title=The Son of Taiwan: The Life of Chen Shui-Bian and His Dreams for Taiwan
|url=https://archive.org/details/sonoftaiwanlifeo0000chen/
|publisher=Taiwan Publishing Co., Ltd.
|ISBN=957-97979-4-3
|OCLC=45640623
|page=26
|pageurl=https://archive.org/details/sonoftaiwanlifeo0000chen/page/26/
|text=In '''Changhua''' County's Fenyuan village<!--芬園鄉-->, I came across some old pineapple growers. The harvest was unexpectedly good this year, but the agricultural cooperative was unable to purchase their surplus.}}
#* {{quote-web
|en
|date=2003-06-18
|url=https://english.president.gov.tw/NEWS/179
|title=President {{w|Chen Shui-bian|Chen}} Inspects an Industrial Park in Changhua County
|work=Office of the President of the Republic of China (Taiwan)
|passage=The president made the remarks during an inspection tour of the central county of '''Changhua''' where he visited a new-style touch fasteners manufacturing firm and an industrial park.
|archiveurl=https://web.archive.org/web/20230417093012/https://english.president.gov.tw/NEWS/179}}
#* {{quote-web
|en
|date=January 20, 2018
|url=http://www.xinhuanet.com/english/2018-01/20/c_136911360.htm
|title=Taiwan reports new bird flu cases
|editor=yan
|work=w:Xinhua News Agency
|passage=Taiwan has confirmed new outbreaks of bird flu at two farms in '''Changhua''' County, and culled more than 13,000 chickens and ducks, the island's animal and plant health inspection and quarantine bureau said on Saturday.
|archiveurl=https://web.archive.org/web/20230404002054/https://www.xinhuanet.com/english/2018-01/20/c_136911360.htm}}
#* {{see more citations|en}}
# {{tcl|en|彰化|id=Q195215}}
#* {{quote-book
|en
|url=https://archive.org/details/in.ernet.dli.2015.104553/
|date=March 12, 1877
|title=Notes of a Journey through Formosa from Tamsui to Taiwanfu
|author=Herbert J. Allen
|volume=21
|series=Proceedings of the Royal Geographical Society
|page=[https://archive.org/details/in.ernet.dli.2015.104553/page/n271/ 261]
|passage=As we were now going to have rougher travelling than we had had, we despatched a courier to Taiwanfu with our surplus baggage, and letters to inform the Consul of our plans. We went S.S.E. for 13 miles over a fertile plain, cultivated with sugar-cane, tobacco, ground-nut, sweet potatoes, &c., drawing gradually towards the range of hills on our left. At the head of the gorge, due east of the district town of '''Changhua''', we were met by a party of thirty or forty tall, stalwart Pepohuans, armed with knives and match-locks, who were to be our bodyguard through the mountains, to protect us from the savages.}}
#* {{quote-book
|en
|url=https://archive.org/details/foreignrelations0000unit_u9e7/
|year=1888
|title=Mr. Denby to Mr. Bayard
|issue=179
|series=Papers Relating to the Foreign Relations of the United States for the Year 1887
|publisher=w:Government Printing Office
|location=[[Washington]], D.C.
|page=[https://archive.org/details/foreignrelations0000unit_u9e7/page/224/ 224]
|passage=SIR: I have the honor to report that the governor of Formosa, Lin Ming-Chuan, has made a contract with Messrs. Jardine, Matheson & Co., for the supply by the latter of rails, rolling stock, and bridge for a narrow-gauge, light-weight railway of 80 miles in length.<br>The line is to be from Tamsui to '''Changhua''', the future capital of the island. The only stream to bridge is the Taikia River. It will be spanned by a lattice girder bridge in two sections, of a joint length of 1,400 feet.}}
#* {{quote-book
|en
|url=https://archive.org/details/monthlyconsular11manugoog/
|date=October 9, 1889
|title=Commerce of Takao and Taiwanfoo
|author=Pelham Warren
|volume=32
|series=Reports from the Consuls of the United States
|publisher=w:Government Printing Office
|location=[[Washington]], D.C.
|page=[https://archive.org/details/monthlyconsular11manugoog/page/n233/ 201]
|passage=The attempts of the governor to raise revenue by increasing the land-tax five-fold resulted in an outbreak of determined opposition and culminated in actual insurrection in the latter part of the summer of 1888. The first rising took place at Pilam, a town on the southeast coast. The Chinese settlers there entered into an alliance with the neighboring savages, and, in spite of the dispatch of some 3,000 troops, appear to have successfully held their own. What the result would have been in the long run it is difficult to estimate, but the anti-land-tax movement having broken out in the district of '''Changhua''', in the very center of the island, the authorities, it is believed, compromised the question at Pilam, so as to have their hands free to cope with the much more formidable state of affairs at '''Changhua'''.}}
#* {{quote-journal
|en
|url=https://archive.org/details/southernpresbyte15dend/
|date=June 27, 1956
|title=Women's Work
|journal=Southern Presbyterian Journal
|author=Charlotte A. Dunlap
|volume=15
|issue=9
|page=[https://archive.org/details/southernpresbyte15dend/page/n182/ 11]
|passage=We gave our '''Changhua''' preacher's wife a gift when her second baby was born at Christmas time just because she is young and badly wants nice things for her infant girl.}}
#* {{quote-book
|en
|year=1957
|author=w:Edgar Snow
|title=Random Notes on Red China
|url=https://archive.org/details/randomnotesonred0000snow/
|publisher=w:Harvard University Press
|year_published=1968
|OCLC=941475366
|page=103
|pageurl=https://archive.org/details/randomnotesonred0000snow/page/103/
|text=Ts'ai Ch'ien {{lang|zh|蔡乾}} was born in 1908 in '''Changhua''' near Taichung, Taiwan (Formosa). His father was an accountant in a rice shop and a descendant of the three hundred Fukienese families who went to Taiwan with Koxinga, who led a rebellion there against the Manchus.<br>At the age of six Ts'ai Ch'ien entered primary school, studied Japanese, and graduated after eight years. He taught at the same school, in '''Changhua''', for one year. In 1924 he came to Shanghai, financed partly by his father and partly by the Chinese Cultural Association of Taiwan. He attended Shanghai University, where Yü Yu-jen was president, in 1924-25.}}
#* {{quote-journal
|en
|url=https://archive.org/details/veliger2519821983cali/
|year=1983
|title=Emergence Pattern of Cercariae from ''Oncomelania hupensis formosana'', Snail Host for Zoophilic Schistosomiasis japonicum
|journal=w:The Veliger
|author=Lois Wong Chi; Robin Dodson; Fred Ung
|volume=25
|issue=3
|page=[https://archive.org/details/veliger2519821983cali/page/194/ 194]
|passage=''Oncomelania hupensis formosana'' collected from the field at '''Changhua''', Taiwan, were used throughout the shedding experiments. They were reared in either 13 cm clay saucers with mud mixture and water (WAGNER & CHI, 1959) or in 20 cm glass bowls.}}
#* {{quote-book
|en
|year=2004
|author=Phil Macdonald
|title=National Geographic Traveler: Taiwan
|publisher=w:National Geographic Society
|ISBN=9780792265559
|OCLC=54962554
|page=212
|passage=About three miles (5 km) south of '''Changhua''', along County Route 137 in Huatan, the '''Taiwan Folk Village''' (''30 Sanfen Rd., Wanya Village Huatan Township, tel (04) 787-0088, $$ closed Mon.'') showcases traditional Taiwanese culture-and more.}}
#* {{quote-web
|en
|date=January 8, 2020
|author=Steven Lee Myers; Chris Horton
|title=China Looms Over Taiwan’s Election, Giving a Boost to the Incumbent
|archiveurl=https://web.archive.org/web/20200108091012/https://www.nytimes.com/2020/01/08/world/asia/china-taiwan-hong-kong-protests.html
|work=w:The New York Times
|issn=0362-4331
|oclc=1645522
|url2=https://archive.is/EhJcB
|text=President Tsai Ing-wen of Taiwan campaigning in the city of '''Changhua''' on Tuesday.}}
#* {{quote-web
|en
|date=July 14, 2020
|url=https://www.washingtonpost.com/opinions/2020/07/14/can-taiwan-survive-second-trump-term/
|title=Can Taiwan survive a second Trump term?
|author=Frida Ghitis
|work=w:The Washington Post
|passage=Taiwanese war planes are parked on a highway during an annual exercise to simulate a response to a Chinese attack on Taiwan's airfields in '''Changhua''' in southern Taiwan.
|archiveurl=https://archive.ph/OCnIR|archivedate=2020-07-16}}
#* {{see more citations|en}}
====近義詞====
* {{qualifier|自泉漳話[[白話字]]借入}} {{l|en|Chiang-hoa}}
* {{qualifier|自[[日語]]借入}} {{l|en|Shoka}}
===參考資料===
<references/>
===延伸閱讀===
* {{R:Collins English Dictionary}}
* {{R:GNV|Changhua, Chang-hua, Zhanghua}}
* {{cite-book|en|year=2008|chapter=Changhua|editor={{w|Saul B. Cohen}}|title=The Columbia Gazetteer of the World|url=https://archive.org/details/columbiagazettee0000unse_l7h3/|edition=2nd|volume=1|location=New York|publisher={{w|Columbia University Press}}|isbn=978-0-231-14554-1|lccn=2008009181|oclc=212893637|page=725|pageurl=https://archive.org/details/columbiagazettee0000unse_l7h3/page/725/|column=1|text=Also spelled Changhwa.}}
===異序詞===
* {{anagrams|en|a=aacghhnu|Hang-chau}}
e06s1bytoag016rky208dn9loi98v3a
9759363
9759362
2026-05-14T10:38:23Z
TongcyDai
53191
9759363
wikitext
text/x-wiki
{{also|Chang-hua|chánghuà}}
==英語==
{{wp|en:}}
{{commonscat|Changhua County}}
===其他形式===
* {{alt|en|Chang-hua||也來自|_|Wade-Giles}}
* {{alt|en|Changhwa|Chang-hwa}}
* {{alt|en|Jhanghua||Tongyong Pinyin}}
* {{alt|en|Zhanghua||Pinyin}}
===詞源===
借自{{der|en|cmn|-}} {{m|cmn|彰化|tr=Zhānghuà}} 的{{bor|en|cmn-wadegiles|-}}:{{m|cmn||Chang¹-hua⁴}}。
===發音===
* {{IPA|en|/(ˈ)t͡ʃæŋˈhwɑ/}}
* {{enPR|jängʹhwäʹ}}<ref name="seltzer">{{cite-book|en|year=1952|chapter=Changhwa or Chang-hua|editor=Leon E. Seltzer|title=The Columbia Lippincott Gazetteer of the World|url=https://archive.org/details/columbialippinco00selt/|location=Morningside Heights, NY|publisher={{w|Columbia University Press}}|oclc=802473294|page=369|pageurl=https://archive.org/details/columbialippinco00selt/page/369/|column=3|text=Changhwa or Chang-hua (jängʹhwäʹ), Jap. [''Japanese''<!--Jap. = Japanese https://archive.org/details/columbialippinco00selt/page/n14/-->] ''Shoka'' (shōʹkä),{{...}}}}</ref>
* {{hyphenation|en|Chang|hua}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-Changhua.wav|a=Southern England}}
===專有名詞===
{{en-proper noun}}
# {{tcl|en|彰化|id=Q133865}}
#* {{quote-journal
|en
|url=https://archive.org/details/sim_free-china-weekly_1979-02-18_20_6/
|date=February 18, 1979
|title='Cowgirl' finds contentment, prosperity on the land
|journal=Free China Weekly
|volume=XX
|issue=6
|issn=0016-0318
|oclc=1786626
|location=[[Taipei]]
|page=2
|pageurl=https://archive.org/details/sim_free-china-weekly_1979-02-18_20_6/page/n1/
|text=That is why Yeh Hui-chen goes contentedly every day to her family ranch in the Mt. Bank area of '''Changhua''' county in central Taiwan to pursue her chosen profession.[...]In the past, the inhabitants eked out a meager living by growing pineapples and plums, which had to be carried out on foot through the rugged mountain area on the border of '''Changhua''' and Nantou counties.}}
#* {{quote-book
|en
|year=2000
|author=[[w:Chen Shui-bian|Chen Shui-Bian]]
|chapter=Learning and Transformation
|translator=David J. Toman
|title=The Son of Taiwan: The Life of Chen Shui-Bian and His Dreams for Taiwan
|url=https://archive.org/details/sonoftaiwanlifeo0000chen/
|publisher=Taiwan Publishing Co., Ltd.
|ISBN=957-97979-4-3
|OCLC=45640623
|page=26
|pageurl=https://archive.org/details/sonoftaiwanlifeo0000chen/page/26/
|text=In '''Changhua''' County's Fenyuan village<!--芬園鄉-->, I came across some old pineapple growers. The harvest was unexpectedly good this year, but the agricultural cooperative was unable to purchase their surplus.}}
#* {{quote-web
|en
|date=2003-06-18
|url=https://english.president.gov.tw/NEWS/179
|title=President {{w|Chen Shui-bian|Chen}} Inspects an Industrial Park in Changhua County
|work=Office of the President of the Republic of China (Taiwan)
|passage=The president made the remarks during an inspection tour of the central county of '''Changhua''' where he visited a new-style touch fasteners manufacturing firm and an industrial park.
|archiveurl=https://web.archive.org/web/20230417093012/https://english.president.gov.tw/NEWS/179}}
#* {{quote-web
|en
|date=January 20, 2018
|url=http://www.xinhuanet.com/english/2018-01/20/c_136911360.htm
|title=Taiwan reports new bird flu cases
|editor=yan
|work=w:Xinhua News Agency
|passage=Taiwan has confirmed new outbreaks of bird flu at two farms in '''Changhua''' County, and culled more than 13,000 chickens and ducks, the island's animal and plant health inspection and quarantine bureau said on Saturday.
|archiveurl=https://web.archive.org/web/20230404002054/https://www.xinhuanet.com/english/2018-01/20/c_136911360.htm}}
#* {{see more citations|en}}
# {{tcl|en|彰化|id=Q195215}}
#* {{quote-book
|en
|url=https://archive.org/details/in.ernet.dli.2015.104553/
|date=March 12, 1877
|title=Notes of a Journey through Formosa from Tamsui to Taiwanfu
|author=Herbert J. Allen
|volume=21
|series=Proceedings of the Royal Geographical Society
|page=[https://archive.org/details/in.ernet.dli.2015.104553/page/n271/ 261]
|passage=As we were now going to have rougher travelling than we had had, we despatched a courier to Taiwanfu with our surplus baggage, and letters to inform the Consul of our plans. We went S.S.E. for 13 miles over a fertile plain, cultivated with sugar-cane, tobacco, ground-nut, sweet potatoes, &c., drawing gradually towards the range of hills on our left. At the head of the gorge, due east of the district town of '''Changhua''', we were met by a party of thirty or forty tall, stalwart Pepohuans, armed with knives and match-locks, who were to be our bodyguard through the mountains, to protect us from the savages.}}
#* {{quote-book
|en
|url=https://archive.org/details/foreignrelations0000unit_u9e7/
|year=1888
|title=Mr. Denby to Mr. Bayard
|issue=179
|series=Papers Relating to the Foreign Relations of the United States for the Year 1887
|publisher=w:Government Printing Office
|location=[[Washington]], D.C.
|page=[https://archive.org/details/foreignrelations0000unit_u9e7/page/224/ 224]
|passage=SIR: I have the honor to report that the governor of Formosa, Lin Ming-Chuan, has made a contract with Messrs. Jardine, Matheson & Co., for the supply by the latter of rails, rolling stock, and bridge for a narrow-gauge, light-weight railway of 80 miles in length.<br>The line is to be from Tamsui to '''Changhua''', the future capital of the island. The only stream to bridge is the Taikia River. It will be spanned by a lattice girder bridge in two sections, of a joint length of 1,400 feet.}}
#* {{quote-book
|en
|url=https://archive.org/details/monthlyconsular11manugoog/
|date=October 9, 1889
|title=Commerce of Takao and Taiwanfoo
|author=Pelham Warren
|volume=32
|series=Reports from the Consuls of the United States
|publisher=w:Government Printing Office
|location=[[Washington]], D.C.
|page=[https://archive.org/details/monthlyconsular11manugoog/page/n233/ 201]
|passage=The attempts of the governor to raise revenue by increasing the land-tax five-fold resulted in an outbreak of determined opposition and culminated in actual insurrection in the latter part of the summer of 1888. The first rising took place at Pilam, a town on the southeast coast. The Chinese settlers there entered into an alliance with the neighboring savages, and, in spite of the dispatch of some 3,000 troops, appear to have successfully held their own. What the result would have been in the long run it is difficult to estimate, but the anti-land-tax movement having broken out in the district of '''Changhua''', in the very center of the island, the authorities, it is believed, compromised the question at Pilam, so as to have their hands free to cope with the much more formidable state of affairs at '''Changhua'''.}}
#* {{quote-journal
|en
|url=https://archive.org/details/southernpresbyte15dend/
|date=June 27, 1956
|title=Women's Work
|journal=Southern Presbyterian Journal
|author=Charlotte A. Dunlap
|volume=15
|issue=9
|page=[https://archive.org/details/southernpresbyte15dend/page/n182/ 11]
|passage=We gave our '''Changhua''' preacher's wife a gift when her second baby was born at Christmas time just because she is young and badly wants nice things for her infant girl.}}
#* {{quote-book
|en
|year=1957
|author=w:Edgar Snow
|title=Random Notes on Red China
|url=https://archive.org/details/randomnotesonred0000snow/
|publisher=w:Harvard University Press
|year_published=1968
|OCLC=941475366
|page=103
|pageurl=https://archive.org/details/randomnotesonred0000snow/page/103/
|text=Ts'ai Ch'ien {{lang|zh|蔡乾}} was born in 1908 in '''Changhua''' near Taichung, Taiwan (Formosa). His father was an accountant in a rice shop and a descendant of the three hundred Fukienese families who went to Taiwan with Koxinga, who led a rebellion there against the Manchus.<br>At the age of six Ts'ai Ch'ien entered primary school, studied Japanese, and graduated after eight years. He taught at the same school, in '''Changhua''', for one year. In 1924 he came to Shanghai, financed partly by his father and partly by the Chinese Cultural Association of Taiwan. He attended Shanghai University, where Yü Yu-jen was president, in 1924-25.}}
#* {{quote-journal
|en
|url=https://archive.org/details/veliger2519821983cali/
|year=1983
|title=Emergence Pattern of Cercariae from ''Oncomelania hupensis formosana'', Snail Host for Zoophilic Schistosomiasis japonicum
|journal=w:The Veliger
|author=Lois Wong Chi; Robin Dodson; Fred Ung
|volume=25
|issue=3
|page=[https://archive.org/details/veliger2519821983cali/page/194/ 194]
|passage=''Oncomelania hupensis formosana'' collected from the field at '''Changhua''', Taiwan, were used throughout the shedding experiments. They were reared in either 13 cm clay saucers with mud mixture and water (WAGNER & CHI, 1959) or in 20 cm glass bowls.}}
#* {{quote-book
|en
|year=2004
|author=Phil Macdonald
|title=National Geographic Traveler: Taiwan
|publisher=w:National Geographic Society
|ISBN=9780792265559
|OCLC=54962554
|page=212
|passage=About three miles (5 km) south of '''Changhua''', along County Route 137 in Huatan, the '''Taiwan Folk Village''' (''30 Sanfen Rd., Wanya Village Huatan Township, tel (04) 787-0088, $$ closed Mon.'') showcases traditional Taiwanese culture-and more.}}
#* {{quote-web
|en
|date=January 8, 2020
|author=Steven Lee Myers; Chris Horton
|title=China Looms Over Taiwan’s Election, Giving a Boost to the Incumbent
|archiveurl=https://web.archive.org/web/20200108091012/https://www.nytimes.com/2020/01/08/world/asia/china-taiwan-hong-kong-protests.html
|work=w:The New York Times
|issn=0362-4331
|oclc=1645522
|url2=https://archive.is/EhJcB
|text=President Tsai Ing-wen of Taiwan campaigning in the city of '''Changhua''' on Tuesday.}}
#* {{quote-web
|en
|date=July 14, 2020
|url=https://www.washingtonpost.com/opinions/2020/07/14/can-taiwan-survive-second-trump-term/
|title=Can Taiwan survive a second Trump term?
|author=Frida Ghitis
|work=w:The Washington Post
|passage=Taiwanese war planes are parked on a highway during an annual exercise to simulate a response to a Chinese attack on Taiwan's airfields in '''Changhua''' in southern Taiwan.
|archiveurl=https://archive.ph/OCnIR|archivedate=2020-07-16}}
#* {{see more citations|en}}
====近義詞====
* {{qualifier|自泉漳話[[白話字]]借入}} {{l|en|Chiang-hoa}}
* {{qualifier|自[[日語]]借入}} {{l|en|Shoka}}
===參考資料===
<references/>
===延伸閱讀===
* {{R:Collins English Dictionary}}
* {{R:GNV|Changhua, Chang-hua, Zhanghua}}
* {{cite-book|en|year=2008|chapter=Changhua|editor={{w|Saul B. Cohen}}|title=The Columbia Gazetteer of the World|url=https://archive.org/details/columbiagazettee0000unse_l7h3/|edition=2nd|volume=1|location=New York|publisher={{w|Columbia University Press}}|isbn=978-0-231-14554-1|lccn=2008009181|oclc=212893637|page=725|pageurl=https://archive.org/details/columbiagazettee0000unse_l7h3/page/725/|column=1|text=Also spelled Changhwa.}}
===異序詞===
* {{anagrams|en|a=aacghhnu|Hang-chau}}
pz2trf77kaftarzhlzxdtx5nzdro6e2
Category:德語 歷史
14
1388823
9758814
7153901
2026-05-13T16:11:16Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758814
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Module:Category tree/topic/Places
828
1391042
9759332
9389328
2026-05-14T08:41:42Z
TongcyDai
53191
9759332
Scribunto
text/plain
-- place-catetree.lua
-- Chinese Wiktionary port of enwikt [[Module:category tree/topic/Places]].
-- Generates descriptions and parent-category specs for place-related category pages.
--
-- Deployment name: TBD — likely [[Module:place/catetree]] or an equivalent path
-- under zhwikt's category-tree infrastructure.
--
-- Architecture mirrors enwikt: two tables exported as LABELS and HANDLERS.
-- LABELS — static label → spec mappings (top-level grouping categories)
-- HANDLERS — ordered list of functions; first non-nil return wins
--
-- Chinese-specific adaptations vs. enwikt:
-- * Pattern matching on 的 instead of English "in"/"of"
-- * Handler 3 bare-location parent: CONTAINER的TYPE (order reversed vs. enwikt)
-- Special case: TYPE=="地名" → CONTAINERTYPE (no 的)
-- * Handler 6 uses forward zh_name lookup (div.type → zh_name) instead of
-- a reverse map, because many English placetypes share the same Chinese name
-- (e.g. state/oblast/canton all → "州"; province/department/voivodeship → "省")
-- * Handler 7 (new): compound capital label + location ("美國的州首府")
-- Compound = zh_name(holonym_type) .. zh_cap_label(holonym_type)
-- Built at load time; skips country/constituent country (no 國首都 category)
-- * No article handling (Chinese has no definite article)
-- * Serial enumeration: 、(non-final) 和(final)
-- * Description format: {{{langname}}}中LOCATION_DESC[[PLACETYPE]]的名稱。
local labels = {}
local handlers = {}
local m_table = require("Module:table")
local m_locations = require("Module:place/locations")
local m_placetypes = require("Module:place/placetypes")
local m_zh_data = require("Module:place/data")
local internal_error = m_locations.internal_error
local zh_strings = m_placetypes.zh_strings
local zh_cap_by_holonym = m_placetypes.zh_capital_label_by_holonym_type
local format_zh_name = m_placetypes.format_zh_name
local insert = table.insert
local concat = table.concat
local function is_callable(val) return type(val) == "function" end
-- Literal-string gsub (no regex metacharacters interpreted in `from` or `to`).
local function gsub_literally(str, from, to)
return (str:gsub(from:gsub("[%(%)%.%%%+%-%*%?%[%^%$]", "%%%1"),
to:gsub("%%", "%%%%")))
end
-- Get the first (primary) placetype from spec.
local function fetch_primary_placetype(key, spec)
local placetype = spec.placetype
if type(placetype) == "table" then placetype = placetype[1] end
return placetype
end
-- ---------------------------------------------------------------------------
-- Chinese serial joiner: {"A","B","C"} → "A、B和C"
-- ---------------------------------------------------------------------------
local function zh_join(items)
local n = #items
if n == 0 then return "" end
if n == 1 then return items[1] end
local parts = {}
for i = 1, n - 1 do
insert(parts, items[i])
if i < n - 1 then insert(parts, zh_strings.enum_sep) end
end
insert(parts, zh_strings.and_conj)
insert(parts, items[n])
return concat(parts)
end
-- ---------------------------------------------------------------------------
-- Placetype class → Chinese bare parent category label
-- ---------------------------------------------------------------------------
local class_to_bare_category_parent = {
["polity"] = "政治實體",
["subpolity"] = "行政區劃",
["settlement"] = "聚落",
["non-admin settlement"] = "聚落",
["capital"] = "首都",
["natural feature"] = "自然地物",
["man-made structure"] = "人工建物",
["geographic region"] = "地理文化區域",
}
local class_is_political_division = {
["polity"] = true,
["subpolity"] = true,
["settlement"] = true,
["non-admin settlement"] = false,
["capital"] = true,
["natural feature"] = false,
["man-made structure"] = false,
["geographic region"] = false,
["generic place"] = false,
}
-- ---------------------------------------------------------------------------
-- Load-time reverse maps
-- ---------------------------------------------------------------------------
-- Chinese capital label → holonym type (e.g. "首都" → "country")
local zh_cap_label_to_holonym = {}
for holonym_type, zh_label in pairs(zh_cap_by_holonym) do
if not zh_cap_label_to_holonym[zh_label] then
zh_cap_label_to_holonym[zh_label] = holonym_type
end
end
-- Chinese placetype name → list of English placetype keys (one-to-many).
-- Used by handler 2 (bare placetype) and handler 4 (generic X的Y).
local zh_name_to_pt_keys = {}
do
local function add(name, en_key)
zh_name_to_pt_keys[name] = zh_name_to_pt_keys[name] or {}
insert(zh_name_to_pt_keys[name], en_key)
end
for en_key, entry in pairs(m_zh_data.zh_placetype_data) do
if entry.zh_name then
local names = type(entry.zh_name) == "table" and entry.zh_name or {entry.zh_name}
for _, name in ipairs(names) do add(name, en_key) end
end
if entry.zh_name_by_holonym_type then
for _, zh_name_val in pairs(entry.zh_name_by_holonym_type) do
local names = type(zh_name_val) == "table" and zh_name_val or {zh_name_val}
for _, name in ipairs(names) do add(name, en_key) end
end
end
end
end
-- Compound capital label → list of holonym placetype keys.
-- Compound = zh_name(holonym_type) .. zh_cap_label(holonym_type).
-- E.g. "州首府" → {"state"}, "地區首府" → {"territory", "region"}.
-- Skip country/constituent country (no 國首都 category per design).
-- Skip entries where compound == cap_label (e.g. "省省會"/"縣縣治" excluded to
-- avoid ambiguous matches — these bare labels are already handled by handler 5).
local zh_compound_cap_to_placetypes = {}
do
local function add_compound(compound, pt)
zh_compound_cap_to_placetypes[compound] = zh_compound_cap_to_placetypes[compound] or {}
insert(zh_compound_cap_to_placetypes[compound], pt)
end
for holonym_type, cap_label in pairs(zh_cap_by_holonym) do
if holonym_type ~= "country" and holonym_type ~= "constituent country" then
local zh_name_raw = m_placetypes.get_zh_placetype_name(holonym_type, nil)
if zh_name_raw then
local zh_name_str = format_zh_name(zh_name_raw)
local compound = zh_name_str .. cap_label
if compound ~= cap_label then
add_compound(compound, holonym_type)
end
end
end
end
end
-- ---------------------------------------------------------------------------
-- Location-linking helpers
-- ---------------------------------------------------------------------------
local function construct_linked_location(group, key, spec)
local full_placename = m_locations.key_to_placename(group, key)
return m_locations.construct_linked_placename(spec, full_placename)
end
-- Returns a location description string for embedding in category descriptions.
-- Shows one level of container for sub-national entries:
-- country → [[法國]]
-- state → [[加州]]([[美國]]的[[州]])
-- city → [[舊金山]]([[加州]]的[[城市]])
local function construct_location_desc(group, key, spec)
local linked = construct_linked_location(group, key, spec)
if spec.no_include_container_in_desc then return linked end
local container_iterator = m_locations.iterate_containers(group, key, spec)
local containers = container_iterator()
if not containers then return linked end
local location_type = spec.placetype
if type(location_type) == "table" then location_type = location_type[1] end
local zh_name_raw = location_type and m_placetypes.get_zh_placetype_name(location_type, nil)
local zh_type = zh_name_raw and format_zh_name(zh_name_raw)
local cont_links = {}
for _, c in ipairs(containers) do
insert(cont_links, construct_linked_location(c.group, c.key, c.spec))
end
local cont_str = zh_join(cont_links)
if zh_type then
return linked .. "(" .. cont_str .. "的" .. zh_type .. ")"
else
return linked .. "(位於" .. cont_str .. ")"
end
end
-- Fetch or construct the location description, substituting "+++" with the
-- auto-constructed description if present in spec.keydesc.
local function fetch_or_construct_location_desc(group, key, spec)
local val = spec.keydesc
if is_callable(val) then
val = val(group, key, spec)
spec.keydesc = val
end
if val then
if val:find("%+%+%+", 1, true) then
local base = construct_location_desc(group, key, spec)
val = gsub_literally(val, "+++", base)
end
return val
end
return construct_location_desc(group, key, spec)
end
-- ---------------------------------------------------------------------------
-- Split label at every occurrence of 的
-- Returns list of {place, placetype} tables (all possible splits left→right).
-- ---------------------------------------------------------------------------
local function split_at_de(label)
local results = {}
local de = "的"
local start = 1
while true do
local s, e = label:find(de, start, true)
if not s then break end
local place_part = label:sub(1, s - 1)
local type_part = label:sub(e + 1)
if #place_part > 0 and #type_part > 0 then
insert(results, {place = place_part, placetype = type_part})
end
start = e + 1
end
return results
end
-- Locate group + key + spec for a Chinese location string.
local function find_place(place_str)
local group, spec = m_locations.find_canonical_key(place_str)
if group then return group, place_str, spec end
return nil
end
-- No articles in Chinese; just return the key.
local function get_prefixed_key(key, spec)
if m_placetypes.get_prefixed_key then
return m_placetypes.get_prefixed_key(key, spec)
end
return key
end
-- Check whether zh_name_val (string or array) contains type_zh.
local function zh_name_has(zh_name_val, type_zh)
if type(zh_name_val) == "table" then
for _, n in ipairs(zh_name_val) do
if n == type_zh then return true end
end
return false
end
return zh_name_val == type_zh
end
-- Search divs list for a div whose Chinese name matches type_zh.
-- Singularizes div.type before zh_name lookup (divs use plural English keys
-- like "states", while zh_placetype_data uses singular keys like "state").
-- Uses forward lookup (English key → zh_name) to handle many-to-one collisions.
-- Returns: div_parent (English key or false), prep, matched_en_type.
-- div_parent == nil means no match; div_parent == false means match but no parent cat.
local function find_div_by_zh_name(divs, type_zh)
if not divs then return nil, nil, nil end
if type(divs) ~= "table" then divs = {divs} end
for _, div in ipairs(divs) do
if type(div) == "string" then div = {type = div} end
local cat_as = div.cat_as or div.type
if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end
for _, pt_cat_as in ipairs(cat_as) do
if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end
-- Singularize plural div type before zh_name lookup.
local lookup_type = m_placetypes.maybe_singularize_placetype(pt_cat_as.type)
or pt_cat_as.type
local div_zh_raw = m_placetypes.get_zh_placetype_name(lookup_type, nil)
if div_zh_raw and zh_name_has(div_zh_raw, type_zh) then
local div_parent = pt_cat_as.container_parent_type
if div_parent == nil then div_parent = div.container_parent_type end
if div_parent == nil then div_parent = pt_cat_as.type end
return div_parent, pt_cat_as.prep or div.prep or "of", lookup_type
end
end
end
return nil, nil, nil
end
-- ===========================================================================
-- Handler 1 — Bare capital category labels
-- e.g. "首都", "省會", "首府", "縣治"
-- ===========================================================================
insert(handlers, function(label)
local holonym_type = zh_cap_label_to_holonym[label]
if not holonym_type then return nil end
local zh_raw = m_placetypes.get_zh_placetype_name(holonym_type, nil)
local zh_holonym = zh_raw and format_zh_name(zh_raw) or holonym_type
return {
type = "name",
topic = label,
description = "{{{langname}}}中" .. zh_holonym .. "[[" .. label .. "]]的名稱。",
parents = {"首都"},
}
end)
-- ===========================================================================
-- Handler 2 — Bare placetype categories
-- e.g. "城市", "河流", "山脈", "國家"
-- ===========================================================================
insert(handlers, function(label)
local en_keys = zh_name_to_pt_keys[label]
if not en_keys then return nil end
for _, en_key in ipairs(en_keys) do
local canon_pt, ptdata = m_placetypes.get_placetype_data(en_key, "from category")
if canon_pt then
local from_cat = {from_category = true, no_split_qualifiers = true}
local bare_parent = m_placetypes.get_equiv_placetype_prop(canon_pt, function(pt)
local bcp = m_placetypes.get_placetype_prop(pt, "bare_category_parent")
if bcp then return bcp end
local cls = m_placetypes.get_placetype_prop(pt, "class")
if cls then return class_to_bare_category_parent[cls] end
end, from_cat) or "地名"
local addl_parents = m_placetypes.get_equiv_placetype_prop(canon_pt, function(pt)
return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents")
end, from_cat)
local breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_pt, function(pt)
return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb")
end, from_cat)
if type(bare_parent) == "string" and breadcrumb then
bare_parent = {name = bare_parent, sort = breadcrumb}
end
local parents = {bare_parent}
if addl_parents then m_table.extend(parents, addl_parents) end
return {
type = "name",
topic = label,
description = "{{{langname}}}中[[" .. label .. "]]的名稱。",
breadcrumb = breadcrumb,
parents = parents,
}
end
end
end)
-- ===========================================================================
-- Handler 3 — Bare placename categories (known locations)
-- e.g. "美國", "法國", "北京", "加利福尼亞州"
-- Supports: overriding_bare_label_parents, bare_category_parent_type,
-- "+++" expansion, addl_parents, wp/wpcat/commonscat, fulldesc.
-- "+++" expands to: CONTAINER的TYPE (Chinese order) or CONTAINERTYPE for "地名".
-- ===========================================================================
insert(handlers, function(label)
local group, spec = m_locations.find_canonical_key(label)
if not group then return nil end
local wp = spec.wp
if wp == nil then wp = true end
local wpcat = spec.wpcat
if wpcat == nil then wpcat = wp end
local commonscat = spec.commonscat
if commonscat == nil then commonscat = wpcat end
local full_placename = m_locations.key_to_placename(group, label)
local full_container_placename
local container_iterator = m_locations.iterate_containers(group, label, spec)
local containers = container_iterator()
if containers then
full_container_placename = m_locations.key_to_placename(
containers[1].group, containers[1].key)
end
-- Substitute %l (full placename), %e (same, no elliptical form in Chinese),
-- %c (container placename) in wp/wpcat/commonscat values.
local function format_boxval(val)
if val == true then val = "%l" end
if type(val) == "string" then
val = gsub_literally(val, "%l", full_placename)
val = gsub_literally(val, "%e", full_placename)
if val:find("%%c", 1, true) and full_container_placename then
val = gsub_literally(val, "%c", full_container_placename)
end
end
return val
end
-- Determine Chinese type label for parent category construction.
-- bare_category_parent_type overrides the location's own placetype.
local parent_zh_type
do
local override = spec.bare_category_parent_type
if override then
local t = type(override) == "table"
and (override.type or override[1]) or override
local raw = type(t) == "string"
and m_placetypes.get_zh_placetype_name(t, nil)
parent_zh_type = raw and format_zh_name(raw)
end
if not parent_zh_type then
local loc_type = fetch_primary_placetype(label, spec)
local raw = loc_type and m_placetypes.get_zh_placetype_name(loc_type, nil)
parent_zh_type = raw and format_zh_name(raw)
end
end
local parents = {}
local bare_label_parents = spec.overriding_bare_label_parents
if not bare_label_parents then
bare_label_parents = {"+++"}
end
local inserted_containers = false
for _, parent in ipairs(bare_label_parents) do
if parent == "+++" then
-- Expand to Chinese parent: CONTAINER的TYPE or CONTAINERTYPE for "地名"
if containers then
for _, container in ipairs(containers) do
local ck = get_prefixed_key(container.key, container.spec)
local parent_cat
if parent_zh_type == "地名" then
parent_cat = ck .. "地名"
elseif parent_zh_type then
parent_cat = ck .. "的" .. parent_zh_type
else
parent_cat = ck
end
m_table.insertIfNot(parents, parent_cat)
end
inserted_containers = true
end
else
m_table.insertIfNot(parents, parent)
end
end
-- If "+++" wasn't present in bare_label_parents and containers exist, insert
-- bare container keys as fallback (mirrors enwikt behaviour).
if not inserted_containers and containers then
for _, container in ipairs(containers) do
m_table.insertIfNot(parents, container.key)
end
end
if spec.addl_parents then
for _, p in ipairs(spec.addl_parents) do
m_table.insertIfNot(parents, p)
end
end
if #parents == 0 then insert(parents, "地名") end
local description = spec.fulldesc or (
"{{{langname}}}中與" ..
fetch_or_construct_location_desc(group, label, spec) ..
"相關的詞語。")
return {
type = "topic",
description = description,
breadcrumb = full_placename,
parents = parents,
wp = format_boxval(wp),
wpcat = format_boxval(wpcat),
commonscat = format_boxval(commonscat),
}
end)
-- ===========================================================================
-- Handler 4 — Generic placetype + location
-- e.g. "法國的城市", "德國的河流", "亞洲的國家"
-- Matches placetypes that carry generic_before_non_cities or generic_before_cities.
-- ===========================================================================
insert(handlers, function(label)
local splits = split_at_de(label)
for _, split in ipairs(splits) do
local place_str = split.place
local type_zh = split.placetype
local en_keys = zh_name_to_pt_keys[type_zh]
if en_keys then
for _, en_key in ipairs(en_keys) do
local canon_pt, ptdata = m_placetypes.get_placetype_data(en_key, "from category")
if canon_pt and ptdata and
(ptdata.generic_before_non_cities or ptdata.generic_before_cities) then
local group, key, spec = find_place(place_str)
if group then
local allow = true
if spec.is_former_place and en_key ~= "place" then allow = false end
if allow then
local loc_desc = fetch_or_construct_location_desc(group, key, spec)
local desc = "{{{langname}}}中" .. loc_desc .. "[[" .. type_zh .. "]]的名稱。"
local parents = {key}
if spec.no_container_parent then
insert(parents, {name = type_zh, sort = key})
local spt = spec.placetype
if spt == "country" or (type(spt) == "table" and m_table.contains(spt, "country")) then
insert(parents, "特定國家的行政區劃")
end
else
local cont_iter = m_locations.iterate_containers(group, key, spec)
local next_conts = cont_iter()
if next_conts then
for _, c in ipairs(next_conts) do
insert(parents, {
name = get_prefixed_key(c.key, c.spec) .. "的" .. type_zh,
sort = key
})
end
else
insert(parents, {name = type_zh, sort = key})
end
end
return {
type = "name",
topic = label,
description = desc,
breadcrumb = type_zh,
parents = parents,
}
end
end
end
end
end
end
end)
-- ===========================================================================
-- Handler 5 — Capital + location (bare capital label)
-- e.g. "美國的首都", "四川省的省會", "德克薩斯州的首府"
-- Handles bare capital labels from zh_cap_label_to_holonym.
-- Must precede handler 6 (compound capital) and handler 7 (division) to avoid
-- mis-matching capital labels that also appear in a location's divs via cat_as.
-- ===========================================================================
insert(handlers, function(label)
local splits = split_at_de(label)
for _, split in ipairs(splits) do
local place_str = split.place
local type_zh = split.placetype
if zh_cap_label_to_holonym[type_zh] then
local group, key, spec = find_place(place_str)
if group then
local loc_desc = fetch_or_construct_location_desc(group, key, spec)
local desc = "{{{langname}}}中" .. loc_desc .. "[[" .. type_zh .. "]]的名稱。"
local parents = {key}
if spec.no_container_parent then
insert(parents, {name = type_zh, sort = key})
else
local cont_iter = m_locations.iterate_containers(group, key, spec)
local next_conts = cont_iter()
if next_conts then
for _, c in ipairs(next_conts) do
insert(parents, {
name = get_prefixed_key(c.key, c.spec) .. "的" .. type_zh,
sort = key
})
end
else
insert(parents, {name = type_zh, sort = key})
end
end
return {
type = "name",
topic = label,
description = desc,
breadcrumb = type_zh,
parents = parents,
}
end
end
end
end)
-- ===========================================================================
-- Handler 6 — Compound capital label + location
-- e.g. "美國的州首府", "法國的行政區首府", "澳大利亞的地區首府"
-- Compound label = zh_name(holonym_type) .. zh_cap_label(holonym_type).
-- Built at load time in zh_compound_cap_to_placetypes.
-- Must precede handler 7 (division) to avoid mis-matching.
-- ===========================================================================
insert(handlers, function(label)
local splits = split_at_de(label)
for _, split in ipairs(splits) do
local place_str = split.place
local type_zh = split.placetype
local target_pts = zh_compound_cap_to_placetypes[type_zh]
if target_pts then
local group, key, spec = find_place(place_str)
if group then
-- Check if any target placetype appears in this location's divs.
-- Div types are plural English strings ("states"); singularize before comparing.
local found = false
for _, divlist in ipairs({spec.divs, spec.addl_divs,
spec.addl_divs_for_categorization}) do
if divlist and not found then
if type(divlist) ~= "table" then divlist = {divlist} end
for _, div in ipairs(divlist) do
if type(div) == "string" then div = {type = div} end
local function check_div_type(pt_type)
local sg = m_placetypes.maybe_singularize_placetype(pt_type)
or pt_type
for _, target_pt in ipairs(target_pts) do
if sg == target_pt or pt_type == target_pt then
found = true
break
end
end
end
check_div_type(div.type)
if not found and div.cat_as then
local ca = div.cat_as
if type(ca) ~= "table" or ca.type then ca = {ca} end
for _, pt_ca in ipairs(ca) do
if type(pt_ca) == "string" then
pt_ca = {type = pt_ca}
end
check_div_type(pt_ca.type)
if found then break end
end
end
if found then break end
end
end
if found then break end
end
if found then
local loc_desc = fetch_or_construct_location_desc(group, key, spec)
local desc = "{{{langname}}}中" .. loc_desc
.. "[[" .. type_zh .. "]]的名稱。"
local parents = {key}
if spec.no_container_parent then
insert(parents, {name = type_zh, sort = key})
local spt = spec.placetype
if spt == "country" or
(type(spt) == "table" and m_table.contains(spt, "country")) then
insert(parents, "特定國家的行政區劃")
end
else
local cont_iter = m_locations.iterate_containers(group, key, spec)
local next_conts = cont_iter()
if next_conts then
for _, c in ipairs(next_conts) do
insert(parents, {
name = get_prefixed_key(c.key, c.spec) .. "的" .. type_zh,
sort = key
})
end
else
insert(parents, {name = type_zh, sort = key})
end
end
return {
type = "name",
topic = label,
description = desc,
breadcrumb = type_zh,
parents = parents,
}
end
end
end
end
end)
-- ===========================================================================
-- Handler 7 — Administrative division + location
-- e.g. "美國的州", "法國的省", "英國的構成國", "日本的縣"
-- Uses forward zh_name lookup (English div type → zh_name) to avoid collision
-- between English types that share the same Chinese name (state/oblast/canton → "州").
-- Singularizes plural div types ("states" → "state") before zh_name lookup.
-- ===========================================================================
insert(handlers, function(label)
local splits = split_at_de(label)
for _, split in ipairs(splits) do
local place_str = split.place
local type_zh = split.placetype
local group, key, spec = find_place(place_str)
if group then
local div_parent, div_prep, matched_type = find_div_by_zh_name(spec.divs, type_zh)
if div_parent == nil then
div_parent, div_prep, matched_type = find_div_by_zh_name(spec.addl_divs, type_zh)
end
if div_parent == nil then
div_parent, div_prep, matched_type =
find_div_by_zh_name(spec.addl_divs_for_categorization, type_zh)
end
if div_parent ~= nil then
local loc_desc = fetch_or_construct_location_desc(group, key, spec)
local desc = "{{{langname}}}中" .. loc_desc .. "[[" .. type_zh .. "]]的名稱。"
local parents = {key}
if div_parent then -- div_parent == false means suppress parent cat
if spec.no_container_parent then
insert(parents, {name = type_zh, sort = " " .. key})
local spt = spec.placetype
if spt == "country" or (type(spt) == "table" and m_table.contains(spt, "country")) then
insert(parents, "特定國家的行政區劃")
end
else
local cont_iter = m_locations.iterate_containers(group, key, spec)
local next_conts = cont_iter()
if next_conts then
for _, c in ipairs(next_conts) do
-- Map English div_parent key back to Chinese for parent category name.
local dp_zh
if type(div_parent) == "string" then
local sg_dp = m_placetypes.maybe_singularize_placetype(div_parent)
or div_parent
local dp_raw = m_placetypes.get_zh_placetype_name(sg_dp, nil)
dp_zh = dp_raw and format_zh_name(dp_raw) or type_zh
else
dp_zh = type_zh
end
insert(parents, {
name = get_prefixed_key(c.key, c.spec) .. "的" .. dp_zh,
sort = key
})
end
else
insert(parents, {name = type_zh, sort = " " .. key})
end
end
end
return {
type = "name",
topic = label,
description = desc,
breadcrumb = type_zh,
parents = parents,
}
end
end
end
end)
-- ===========================================================================
-- Static labels — top-level grouping categories
-- ===========================================================================
labels["地名"] = {
type = "grouping",
description = "{{{langname}}}中地名的分類。",
parents = {"名稱"},
}
labels["政治實體"] = {
type = "grouping",
description = "{{{langname}}}中政治實體的名稱。",
parents = {"地名"},
}
labels["行政區劃"] = {
type = "grouping",
description = "{{{langname}}}中行政區劃的名稱。",
parents = {"地名"},
}
labels["聚落"] = {
type = "grouping",
description = "{{{langname}}}中聚落地名。",
parents = {"地名"},
}
labels["首都"] = {
type = "grouping",
description = "{{{langname}}}中首都及各類首府的名稱。",
parents = {"聚落"},
}
labels["自然地物"] = {
type = "grouping",
description = "{{{langname}}}中自然地物的名稱。",
parents = {"地名"},
}
labels["人工建物"] = {
type = "grouping",
description = "{{{langname}}}中人工建物的名稱。",
parents = {"地名"},
}
labels["地理文化區域"] = {
type = "grouping",
description = "{{{langname}}}中地理及文化區域的名稱。",
parents = {"地名"},
}
labels["特定國家的行政區劃"] = {
type = "grouping",
description = "{{{langname}}}中特定國家行政區劃的分類。",
parents = {"地名"},
}
-- ---------------------------------------------------------------------------
-- Misc. place-related labels
-- ---------------------------------------------------------------------------
labels["外名"] = {
type = "name",
description = "{{{langname}}}[[外名]]。",
parents = {"地名"},
}
labels["古埃及行政區"] = {
type = "name",
description = "{{{langname}}}中[[古埃及]][[行政區]]的名稱。",
breadcrumb = "行政區",
parents = {"古埃及"},
}
-- ---------------------------------------------------------------------------
-- Sui generis place categories (cross-jurisdictional / transcontinental regions)
-- ---------------------------------------------------------------------------
labels["大西洋"] = {
type = "related-to",
description = "{{{langname}}}中與[[大西洋]]相關的詞語。",
parents = {"地球"},
}
labels["不列顛群島"] = {
type = "related-to",
description = "{{{langname}}}中與[[大不列顛島]]、[[愛爾蘭島]]及鄰近島嶼相關的詞語。",
parents = {"歐洲", "島嶼"},
}
labels["歐盟"] = {
type = "related-to",
description = "{{{langname}}}中與[[歐盟]]相關的詞語。",
parents = {"歐洲"},
}
labels["加斯科涅"] = {
type = "related-to",
description = "{{{langname}}}中與[[加斯科涅]]相關的詞語。",
parents = {"法國"},
}
labels["印度次大陸"] = {
type = "related-to",
description = "{{{langname}}}中與[[印度次大陸]]相關的詞語。",
parents = {"南亞"},
}
labels["孟加拉"] = {
type = "related-to",
description = "{{{langname}}}中與[[孟加拉]]地區相關的詞語。",
parents = {"印度次大陸"},
}
labels["克什米爾"] = {
type = "related-to",
description = "{{{langname}}}中與[[克什米爾]]相關的詞語。",
parents = {"印度次大陸"},
}
labels["克什米爾(印度)"] = {
type = "related-to",
description = "{{{langname}}}中[[印度]]管轄的[[克什米爾]]地名。",
parents = {"印度", "克什米爾"},
}
labels["朝鮮半島"] = {
type = "related-to",
description = "{{{langname}}}中與[[朝鮮半島]]相關的詞語。",
parents = {"亞洲"},
}
labels["朗格多克"] = {
type = "related-to",
description = "{{{langname}}}中與[[朗格多克]]相關的詞語。",
parents = {"法國"},
}
labels["拉普蘭"] = {
type = "related-to",
description = "{{{langname}}}中與[[拉普蘭]]相關的詞語。",
parents = {"歐洲", "芬蘭", "挪威", "俄羅斯", "瑞典"},
}
labels["中東"] = {
type = "related-to",
description = "{{{langname}}}中與[[中東]]相關的詞語。",
parents = {"非洲", "亞洲"},
}
labels["荷屬安的列斯"] = {
type = "related-to",
description = "{{{langname}}}中與[[荷屬安的列斯]]相關的詞語。",
parents = {"荷蘭", "北美洲"},
}
labels["海外法國"] = {
type = "related-to",
description = "{{{langname}}}中與[[海外法國]]相關的詞語。",
parents = {"法國"},
}
labels["普羅旺斯"] = {
type = "related-to",
description = "{{{langname}}}中與[[普羅旺斯]]相關的詞語。",
parents = {"法國"},
}
labels["波蘭人民共和國"] = {
type = "related-to",
description = "{{{langname}}}中與[[波蘭人民共和國]]相關的詞語。",
parents = {"波蘭"},
}
labels["南亞"] = {
type = "related-to",
description = "{{{langname}}}中與[[南亞]]相關的詞語。",
parents = {"歐亞大陸", "亞洲"},
}
return {LABELS = labels, HANDLERS = handlers}
3ybvif4tjgdd3fb3vectx04kxeuk00f
9759344
9759332
2026-05-14T09:02:26Z
TongcyDai
53191
9759344
Scribunto
text/plain
-- Chinese Wiktionary port of enwikt [[Module:category tree/topic/Places]].
-- Generates descriptions and parent-category specs for place-related category pages.
--
-- Deployment name: TBD — likely [[Module:place/catetree]] or an equivalent path
-- under zhwikt's category-tree infrastructure.
--
-- Architecture mirrors enwikt: two tables exported as LABELS and HANDLERS.
-- LABELS — static label → spec mappings (top-level grouping categories)
-- HANDLERS — ordered list of functions; first non-nil return wins
--
-- Chinese-specific adaptations vs. enwikt:
-- * Pattern matching on 的 instead of English "in"/"of"
-- * Handler 3 bare-location parent: CONTAINER的TYPE (order reversed vs. enwikt)
-- Special case: TYPE=="地名" → CONTAINERTYPE (no 的)
-- * Handler 6 uses forward zh_name lookup (div.type → zh_name) instead of
-- a reverse map, because many English placetypes share the same Chinese name
-- (e.g. state/oblast/canton all → "州"; province/department/voivodeship → "省")
-- * Handler 7 (new): compound capital label + location ("美國的州首府")
-- Compound = zh_name(holonym_type) .. zh_cap_label(holonym_type)
-- Built at load time; skips country/constituent country (no 國首都 category)
-- * No article handling (Chinese has no definite article)
-- * Serial enumeration: 、(non-final) 和(final)
-- * Description format: {{{langname}}}中LOCATION_DESC[[PLACETYPE]]的名稱。
local labels = {}
local handlers = {}
local m_table = require("Module:table")
local m_locations = require("Module:place/locations")
local m_placetypes = require("Module:place/placetypes")
local m_zh_data = require("Module:place/data")
local internal_error = m_locations.internal_error
local zh_strings = m_placetypes.zh_strings
local zh_cap_by_holonym = m_placetypes.zh_capital_label_by_holonym_type
local format_zh_name = m_placetypes.format_zh_name
local insert = table.insert
local concat = table.concat
local function is_callable(val) return type(val) == "function" end
-- Literal-string gsub (no regex metacharacters interpreted in `from` or `to`).
local function gsub_literally(str, from, to)
return (str:gsub(from:gsub("[%(%)%.%%%+%-%*%?%[%^%$]", "%%%1"),
to:gsub("%%", "%%%%")))
end
-- Get the first (primary) placetype from spec.
local function fetch_primary_placetype(key, spec)
local placetype = spec.placetype
if type(placetype) == "table" then placetype = placetype[1] end
return placetype
end
-- ---------------------------------------------------------------------------
-- Chinese serial joiner: {"A","B","C"} → "A、B和C"
-- ---------------------------------------------------------------------------
local function zh_join(items)
local n = #items
if n == 0 then return "" end
if n == 1 then return items[1] end
local parts = {}
for i = 1, n - 1 do
insert(parts, items[i])
if i < n - 1 then insert(parts, zh_strings.enum_sep) end
end
insert(parts, zh_strings.and_conj)
insert(parts, items[n])
return concat(parts)
end
-- ---------------------------------------------------------------------------
-- Placetype class → Chinese bare parent category label
-- ---------------------------------------------------------------------------
local class_to_bare_category_parent = {
["polity"] = "政治實體",
["subpolity"] = "行政區劃",
["settlement"] = "聚落",
["non-admin settlement"] = "聚落",
["capital"] = "首都",
["natural feature"] = "自然地物",
["man-made structure"] = "人工建物",
["geographic region"] = "地理文化區域",
}
local class_is_political_division = {
["polity"] = true,
["subpolity"] = true,
["settlement"] = true,
["non-admin settlement"] = false,
["capital"] = true,
["natural feature"] = false,
["man-made structure"] = false,
["geographic region"] = false,
["generic place"] = false,
}
-- ---------------------------------------------------------------------------
-- Load-time reverse maps
-- ---------------------------------------------------------------------------
-- Chinese capital label → holonym type (e.g. "首都" → "country")
local zh_cap_label_to_holonym = {}
for holonym_type, zh_label in pairs(zh_cap_by_holonym) do
if not zh_cap_label_to_holonym[zh_label] then
zh_cap_label_to_holonym[zh_label] = holonym_type
end
end
-- Chinese placetype name → list of English placetype keys (one-to-many).
-- Used by handler 2 (bare placetype) and handler 4 (generic X的Y).
local zh_name_to_pt_keys = {}
do
local function add(name, en_key)
zh_name_to_pt_keys[name] = zh_name_to_pt_keys[name] or {}
insert(zh_name_to_pt_keys[name], en_key)
end
for en_key, entry in pairs(m_zh_data.zh_placetype_data) do
if entry.zh_name then
local names = type(entry.zh_name) == "table" and entry.zh_name or {entry.zh_name}
for _, name in ipairs(names) do add(name, en_key) end
end
if entry.zh_name_by_holonym_type then
for _, zh_name_val in pairs(entry.zh_name_by_holonym_type) do
local names = type(zh_name_val) == "table" and zh_name_val or {zh_name_val}
for _, name in ipairs(names) do add(name, en_key) end
end
end
end
end
-- Compound capital label → list of holonym placetype keys.
-- Compound = zh_name(holonym_type) .. zh_cap_label(holonym_type).
-- E.g. "州首府" → {"state"}, "地區首府" → {"territory", "region"}.
-- Skip country/constituent country (no 國首都 category per design).
-- Skip entries where compound == cap_label (e.g. "省省會"/"縣縣治" excluded to
-- avoid ambiguous matches — these bare labels are already handled by handler 5).
local zh_compound_cap_to_placetypes = {}
do
local function add_compound(compound, pt)
zh_compound_cap_to_placetypes[compound] = zh_compound_cap_to_placetypes[compound] or {}
insert(zh_compound_cap_to_placetypes[compound], pt)
end
for holonym_type, cap_label in pairs(zh_cap_by_holonym) do
if holonym_type ~= "country" and holonym_type ~= "constituent country" then
local zh_name_raw = m_placetypes.get_zh_placetype_name(holonym_type, nil)
if zh_name_raw then
local zh_name_str = format_zh_name(zh_name_raw)
local compound = zh_name_str .. cap_label
if compound ~= cap_label then
add_compound(compound, holonym_type)
end
end
end
end
end
-- ---------------------------------------------------------------------------
-- Location-linking helpers
-- ---------------------------------------------------------------------------
local function construct_linked_location(group, key, spec)
local full_placename = m_locations.key_to_placename(group, key)
return m_locations.construct_linked_placename(spec, full_placename)
end
-- Returns a location description string for embedding in category descriptions.
-- Shows one level of container for sub-national entries:
-- country → [[法國]]
-- state → [[加州]]([[美國]]的[[州]])
-- city → [[舊金山]]([[加州]]的[[城市]])
local function construct_location_desc(group, key, spec)
local linked = construct_linked_location(group, key, spec)
if spec.no_include_container_in_desc then return linked end
local container_iterator = m_locations.iterate_containers(group, key, spec)
local containers = container_iterator()
if not containers then return linked end
local location_type = spec.placetype
if type(location_type) == "table" then location_type = location_type[1] end
local zh_name_raw = location_type and m_placetypes.get_zh_placetype_name(location_type, nil)
local zh_type = zh_name_raw and format_zh_name(zh_name_raw)
local cont_links = {}
for _, c in ipairs(containers) do
insert(cont_links, construct_linked_location(c.group, c.key, c.spec))
end
local cont_str = zh_join(cont_links)
if zh_type then
return linked .. "(" .. cont_str .. "的" .. zh_type .. ")"
else
return linked .. "(位於" .. cont_str .. ")"
end
end
-- Fetch or construct the location description, substituting "+++" with the
-- auto-constructed description if present in spec.keydesc.
local function fetch_or_construct_location_desc(group, key, spec)
local val = spec.keydesc
if is_callable(val) then
val = val(group, key, spec)
spec.keydesc = val
end
if val then
if val:find("%+%+%+", 1, true) then
local base = construct_location_desc(group, key, spec)
val = gsub_literally(val, "+++", base)
end
return val
end
return construct_location_desc(group, key, spec)
end
-- ---------------------------------------------------------------------------
-- Split label at every occurrence of 的
-- Returns list of {place, placetype} tables (all possible splits left→right).
-- ---------------------------------------------------------------------------
local function split_at_de(label)
local results = {}
local de = "的"
local start = 1
while true do
local s, e = label:find(de, start, true)
if not s then break end
local place_part = label:sub(1, s - 1)
local type_part = label:sub(e + 1)
if #place_part > 0 and #type_part > 0 then
insert(results, {place = place_part, placetype = type_part})
end
start = e + 1
end
return results
end
-- Locate group + key + spec for a Chinese location string.
local function find_place(place_str)
local group, spec = m_locations.find_canonical_key(place_str)
if group then return group, place_str, spec end
return nil
end
-- No articles in Chinese; just return the key.
local function get_prefixed_key(key, spec)
if m_placetypes.get_prefixed_key then
return m_placetypes.get_prefixed_key(key, spec)
end
return key
end
-- Check whether zh_name_val (string or array) contains type_zh.
local function zh_name_has(zh_name_val, type_zh)
if type(zh_name_val) == "table" then
for _, n in ipairs(zh_name_val) do
if n == type_zh then return true end
end
return false
end
return zh_name_val == type_zh
end
-- Search divs list for a div whose Chinese name matches type_zh.
-- Singularizes div.type before zh_name lookup (divs use plural English keys
-- like "states", while zh_placetype_data uses singular keys like "state").
-- Uses forward lookup (English key → zh_name) to handle many-to-one collisions.
-- Returns: div_parent (English key or false), prep, matched_en_type.
-- div_parent == nil means no match; div_parent == false means match but no parent cat.
local function find_div_by_zh_name(divs, type_zh)
if not divs then return nil, nil, nil end
if type(divs) ~= "table" then divs = {divs} end
for _, div in ipairs(divs) do
if type(div) == "string" then div = {type = div} end
local cat_as = div.cat_as or div.type
if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end
for _, pt_cat_as in ipairs(cat_as) do
if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end
-- Singularize plural div type before zh_name lookup.
local lookup_type = m_placetypes.maybe_singularize_placetype(pt_cat_as.type)
or pt_cat_as.type
local div_zh_raw = m_placetypes.get_zh_placetype_name(lookup_type, nil)
if div_zh_raw and zh_name_has(div_zh_raw, type_zh) then
local div_parent = pt_cat_as.container_parent_type
if div_parent == nil then div_parent = div.container_parent_type end
if div_parent == nil then div_parent = pt_cat_as.type end
return div_parent, pt_cat_as.prep or div.prep or "of", lookup_type
end
end
end
return nil, nil, nil
end
-- ===========================================================================
-- Handler 1 — Bare capital category labels
-- e.g. "首都", "省會", "首府", "縣治"
-- ===========================================================================
insert(handlers, function(label)
local holonym_type = zh_cap_label_to_holonym[label]
if not holonym_type then return nil end
local zh_raw = m_placetypes.get_zh_placetype_name(holonym_type, nil)
local zh_holonym = zh_raw and format_zh_name(zh_raw) or holonym_type
return {
type = "name",
topic = label,
description = "{{{langname}}}中" .. zh_holonym .. "[[" .. label .. "]]的名稱。",
parents = {"首都"},
}
end)
-- ===========================================================================
-- Handler 2 — Bare placetype categories
-- e.g. "城市", "河流", "山脈", "國家"
-- ===========================================================================
insert(handlers, function(label)
local en_keys = zh_name_to_pt_keys[label]
if not en_keys then return nil end
for _, en_key in ipairs(en_keys) do
local canon_pt, ptdata = m_placetypes.get_placetype_data(en_key, "from category")
if canon_pt then
local from_cat = {from_category = true, no_split_qualifiers = true}
local bare_parent = m_placetypes.get_equiv_placetype_prop(canon_pt, function(pt)
local bcp = m_placetypes.get_placetype_prop(pt, "bare_category_parent")
if bcp then return bcp end
local cls = m_placetypes.get_placetype_prop(pt, "class")
if cls then return class_to_bare_category_parent[cls] end
end, from_cat) or "地名"
local addl_parents = m_placetypes.get_equiv_placetype_prop(canon_pt, function(pt)
return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents")
end, from_cat)
local breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_pt, function(pt)
return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb")
end, from_cat)
if type(bare_parent) == "string" and breadcrumb then
bare_parent = {name = bare_parent, sort = breadcrumb}
end
local parents = {bare_parent}
if addl_parents then m_table.extend(parents, addl_parents) end
return {
type = "name",
topic = label,
description = "{{{langname}}}中[[" .. label .. "]]的名稱。",
breadcrumb = breadcrumb,
parents = parents,
}
end
end
end)
-- ===========================================================================
-- Handler 3 — Bare placename categories (known locations)
-- e.g. "美國", "法國", "北京", "加利福尼亞州"
-- Supports: overriding_bare_label_parents, bare_category_parent_type,
-- "+++" expansion, addl_parents, wp/wpcat/commonscat, fulldesc.
-- "+++" expands to: CONTAINER的TYPE (Chinese order) or CONTAINERTYPE for "地名".
-- ===========================================================================
insert(handlers, function(label)
local group, spec = m_locations.find_canonical_key(label)
if not group then return nil end
local wp = spec.wp
if wp == nil then wp = true end
local wpcat = spec.wpcat
if wpcat == nil then wpcat = wp end
local commonscat = spec.commonscat
if commonscat == nil then commonscat = wpcat end
local full_placename = m_locations.key_to_placename(group, label)
local full_container_placename
local container_iterator = m_locations.iterate_containers(group, label, spec)
local containers = container_iterator()
if containers then
full_container_placename = m_locations.key_to_placename(
containers[1].group, containers[1].key)
end
-- Substitute %l (full placename), %e (same, no elliptical form in Chinese),
-- %c (container placename) in wp/wpcat/commonscat values.
local function format_boxval(val)
if val == true then val = "%l" end
if type(val) == "string" then
val = gsub_literally(val, "%l", full_placename)
val = gsub_literally(val, "%e", full_placename)
if val:find("%%c", 1, true) and full_container_placename then
val = gsub_literally(val, "%c", full_container_placename)
end
end
return val
end
-- Determine Chinese type label for parent category construction.
-- bare_category_parent_type overrides the location's own placetype.
local parent_zh_type
do
local override = spec.bare_category_parent_type
if override then
local t = type(override) == "table"
and (override.type or override[1]) or override
local raw = type(t) == "string"
and m_placetypes.get_zh_placetype_name(t, nil)
parent_zh_type = raw and format_zh_name(raw)
end
if not parent_zh_type then
local loc_type = fetch_primary_placetype(label, spec)
local raw = loc_type and m_placetypes.get_zh_placetype_name(loc_type, nil)
parent_zh_type = raw and format_zh_name(raw)
end
end
local parents = {}
local bare_label_parents = spec.overriding_bare_label_parents
if not bare_label_parents then
bare_label_parents = {"+++"}
end
local inserted_containers = false
for _, parent in ipairs(bare_label_parents) do
if parent == "+++" then
-- Expand to Chinese parent: CONTAINER的TYPE or CONTAINERTYPE for "地名"
if containers then
for _, container in ipairs(containers) do
local ck = get_prefixed_key(container.key, container.spec)
local parent_cat
if parent_zh_type == "地名" then
parent_cat = ck .. "地名"
elseif parent_zh_type then
parent_cat = ck .. "的" .. parent_zh_type
else
parent_cat = ck
end
m_table.insertIfNot(parents, parent_cat)
end
inserted_containers = true
end
else
m_table.insertIfNot(parents, parent)
end
end
-- If "+++" wasn't present in bare_label_parents and containers exist, insert
-- bare container keys as fallback (mirrors enwikt behaviour).
if not inserted_containers and containers then
for _, container in ipairs(containers) do
m_table.insertIfNot(parents, container.key)
end
end
if spec.addl_parents then
for _, p in ipairs(spec.addl_parents) do
m_table.insertIfNot(parents, p)
end
end
if #parents == 0 then insert(parents, "地名") end
local description = spec.fulldesc or (
"{{{langname}}}中與" ..
fetch_or_construct_location_desc(group, label, spec) ..
"相關的詞語。")
return {
type = "topic",
description = description,
breadcrumb = full_placename,
parents = parents,
wp = format_boxval(wp),
wpcat = format_boxval(wpcat),
commonscat = format_boxval(commonscat),
}
end)
-- ===========================================================================
-- Handler 4 — Generic placetype + location
-- e.g. "法國的城市", "德國的河流", "亞洲的國家"
-- Matches placetypes that carry generic_before_non_cities or generic_before_cities.
-- ===========================================================================
insert(handlers, function(label)
local splits = split_at_de(label)
for _, split in ipairs(splits) do
local place_str = split.place
local type_zh = split.placetype
local en_keys = zh_name_to_pt_keys[type_zh]
if en_keys then
for _, en_key in ipairs(en_keys) do
local canon_pt, ptdata = m_placetypes.get_placetype_data(en_key, "from category")
if canon_pt and ptdata and
(ptdata.generic_before_non_cities or ptdata.generic_before_cities) then
local group, key, spec = find_place(place_str)
if group then
local allow = true
if spec.is_former_place and en_key ~= "place" then allow = false end
if allow then
local loc_desc = fetch_or_construct_location_desc(group, key, spec)
local desc = "{{{langname}}}中" .. loc_desc .. "[[" .. type_zh .. "]]的名稱。"
local parents = {key}
if spec.no_container_parent then
insert(parents, {name = type_zh, sort = key})
local spt = spec.placetype
if spt == "country" or (type(spt) == "table" and m_table.contains(spt, "country")) then
insert(parents, "特定國家的行政區劃")
end
else
local cont_iter = m_locations.iterate_containers(group, key, spec)
local next_conts = cont_iter()
if next_conts then
for _, c in ipairs(next_conts) do
insert(parents, {
name = get_prefixed_key(c.key, c.spec) .. "的" .. type_zh,
sort = key
})
end
else
insert(parents, {name = type_zh, sort = key})
end
end
return {
type = "name",
topic = label,
description = desc,
breadcrumb = type_zh,
parents = parents,
}
end
end
end
end
end
end
end)
-- ===========================================================================
-- Handler 5 — Capital + location (bare capital label)
-- e.g. "美國的首都", "四川省的省會", "德克薩斯州的首府"
-- Handles bare capital labels from zh_cap_label_to_holonym.
-- Must precede handler 6 (compound capital) and handler 7 (division) to avoid
-- mis-matching capital labels that also appear in a location's divs via cat_as.
-- ===========================================================================
insert(handlers, function(label)
local splits = split_at_de(label)
for _, split in ipairs(splits) do
local place_str = split.place
local type_zh = split.placetype
if zh_cap_label_to_holonym[type_zh] then
local group, key, spec = find_place(place_str)
if group then
local loc_desc = fetch_or_construct_location_desc(group, key, spec)
local desc = "{{{langname}}}中" .. loc_desc .. "[[" .. type_zh .. "]]的名稱。"
local parents = {key}
if spec.no_container_parent then
insert(parents, {name = type_zh, sort = key})
else
local cont_iter = m_locations.iterate_containers(group, key, spec)
local next_conts = cont_iter()
if next_conts then
for _, c in ipairs(next_conts) do
insert(parents, {
name = get_prefixed_key(c.key, c.spec) .. "的" .. type_zh,
sort = key
})
end
else
insert(parents, {name = type_zh, sort = key})
end
end
return {
type = "name",
topic = label,
description = desc,
breadcrumb = type_zh,
parents = parents,
}
end
end
end
end)
-- ===========================================================================
-- Handler 6 — Compound capital label + location
-- e.g. "美國的州首府", "法國的行政區首府", "澳大利亞的地區首府"
-- Compound label = zh_name(holonym_type) .. zh_cap_label(holonym_type).
-- Built at load time in zh_compound_cap_to_placetypes.
-- Must precede handler 7 (division) to avoid mis-matching.
-- ===========================================================================
insert(handlers, function(label)
local splits = split_at_de(label)
for _, split in ipairs(splits) do
local place_str = split.place
local type_zh = split.placetype
local target_pts = zh_compound_cap_to_placetypes[type_zh]
if target_pts then
local group, key, spec = find_place(place_str)
if group then
-- Check if any target placetype appears in this location's divs.
-- Div types are plural English strings ("states"); singularize before comparing.
local found = false
for _, divlist in ipairs({spec.divs, spec.addl_divs,
spec.addl_divs_for_categorization}) do
if divlist and not found then
if type(divlist) ~= "table" then divlist = {divlist} end
for _, div in ipairs(divlist) do
if type(div) == "string" then div = {type = div} end
local function check_div_type(pt_type)
local sg = m_placetypes.maybe_singularize_placetype(pt_type)
or pt_type
for _, target_pt in ipairs(target_pts) do
if sg == target_pt or pt_type == target_pt then
found = true
break
end
end
end
check_div_type(div.type)
if not found and div.cat_as then
local ca = div.cat_as
if type(ca) ~= "table" or ca.type then ca = {ca} end
for _, pt_ca in ipairs(ca) do
if type(pt_ca) == "string" then
pt_ca = {type = pt_ca}
end
check_div_type(pt_ca.type)
if found then break end
end
end
if found then break end
end
end
if found then break end
end
if found then
local loc_desc = fetch_or_construct_location_desc(group, key, spec)
local desc = "{{{langname}}}中" .. loc_desc
.. "[[" .. type_zh .. "]]的名稱。"
local parents = {key}
if spec.no_container_parent then
insert(parents, {name = type_zh, sort = key})
local spt = spec.placetype
if spt == "country" or
(type(spt) == "table" and m_table.contains(spt, "country")) then
insert(parents, "特定國家的行政區劃")
end
else
local cont_iter = m_locations.iterate_containers(group, key, spec)
local next_conts = cont_iter()
if next_conts then
for _, c in ipairs(next_conts) do
insert(parents, {
name = get_prefixed_key(c.key, c.spec) .. "的" .. type_zh,
sort = key
})
end
else
insert(parents, {name = type_zh, sort = key})
end
end
return {
type = "name",
topic = label,
description = desc,
breadcrumb = type_zh,
parents = parents,
}
end
end
end
end
end)
-- ===========================================================================
-- Handler 7 — Administrative division + location
-- e.g. "美國的州", "法國的省", "英國的構成國", "日本的縣"
-- Uses forward zh_name lookup (English div type → zh_name) to avoid collision
-- between English types that share the same Chinese name (state/oblast/canton → "州").
-- Singularizes plural div types ("states" → "state") before zh_name lookup.
-- ===========================================================================
insert(handlers, function(label)
local splits = split_at_de(label)
for _, split in ipairs(splits) do
local place_str = split.place
local type_zh = split.placetype
local group, key, spec = find_place(place_str)
if group then
local div_parent, div_prep, matched_type = find_div_by_zh_name(spec.divs, type_zh)
if div_parent == nil then
div_parent, div_prep, matched_type = find_div_by_zh_name(spec.addl_divs, type_zh)
end
if div_parent == nil then
div_parent, div_prep, matched_type =
find_div_by_zh_name(spec.addl_divs_for_categorization, type_zh)
end
if div_parent ~= nil then
local loc_desc = fetch_or_construct_location_desc(group, key, spec)
local desc = "{{{langname}}}中" .. loc_desc .. "[[" .. type_zh .. "]]的名稱。"
local parents = {key}
if div_parent then -- div_parent == false means suppress parent cat
if spec.no_container_parent then
insert(parents, {name = type_zh, sort = " " .. key})
local spt = spec.placetype
if spt == "country" or (type(spt) == "table" and m_table.contains(spt, "country")) then
insert(parents, "特定國家的行政區劃")
end
else
local cont_iter = m_locations.iterate_containers(group, key, spec)
local next_conts = cont_iter()
if next_conts then
for _, c in ipairs(next_conts) do
-- Map English div_parent key back to Chinese for parent category name.
local dp_zh
if type(div_parent) == "string" then
local sg_dp = m_placetypes.maybe_singularize_placetype(div_parent)
or div_parent
local dp_raw = m_placetypes.get_zh_placetype_name(sg_dp, nil)
dp_zh = dp_raw and format_zh_name(dp_raw) or type_zh
else
dp_zh = type_zh
end
insert(parents, {
name = get_prefixed_key(c.key, c.spec) .. "的" .. dp_zh,
sort = key
})
end
else
insert(parents, {name = type_zh, sort = " " .. key})
end
end
end
return {
type = "name",
topic = label,
description = desc,
breadcrumb = type_zh,
parents = parents,
}
end
end
end
end)
-- ===========================================================================
-- Static labels — top-level grouping categories
-- ===========================================================================
labels["地名"] = {
type = "grouping",
description = "{{{langname}}}中地名的分類。",
parents = {"名稱"},
}
labels["政治實體"] = {
type = "grouping",
description = "{{{langname}}}中政治實體的名稱。",
parents = {"地名"},
}
labels["行政區劃"] = {
type = "grouping",
description = "{{{langname}}}中行政區劃的名稱。",
parents = {"地名"},
}
labels["聚落"] = {
type = "grouping",
description = "{{{langname}}}中聚落地名。",
parents = {"地名"},
}
labels["首都"] = {
type = "grouping",
description = "{{{langname}}}中首都及各類首府的名稱。",
parents = {"聚落"},
}
labels["自然地物"] = {
type = "grouping",
description = "{{{langname}}}中自然地物的名稱。",
parents = {"地名"},
}
labels["人工建物"] = {
type = "grouping",
description = "{{{langname}}}中人工建物的名稱。",
parents = {"地名"},
}
labels["地理文化區域"] = {
type = "grouping",
description = "{{{langname}}}中地理及文化區域的名稱。",
parents = {"地名"},
}
labels["特定國家的行政區劃"] = {
type = "grouping",
description = "{{{langname}}}中特定國家行政區劃的分類。",
parents = {"地名"},
}
-- ---------------------------------------------------------------------------
-- Misc. place-related labels
-- ---------------------------------------------------------------------------
labels["外名"] = {
type = "name",
description = "{{{langname}}}[[外名]]。",
parents = {"地名"},
}
labels["古埃及行政區"] = {
type = "name",
description = "{{{langname}}}中[[古埃及]][[行政區]]的名稱。",
breadcrumb = "行政區",
parents = {"古埃及"},
}
-- ---------------------------------------------------------------------------
-- Sui generis place categories (cross-jurisdictional / transcontinental regions)
-- ---------------------------------------------------------------------------
labels["大西洋"] = {
type = "related-to",
description = "{{{langname}}}中與[[大西洋]]相關的詞語。",
parents = {"地球"},
}
labels["不列顛群島"] = {
type = "related-to",
description = "{{{langname}}}中與[[大不列顛島]]、[[愛爾蘭島]]及鄰近島嶼相關的詞語。",
parents = {"歐洲", "島嶼"},
}
labels["歐盟"] = {
type = "related-to",
description = "{{{langname}}}中與[[歐盟]]相關的詞語。",
parents = {"歐洲"},
}
labels["加斯科涅"] = {
type = "related-to",
description = "{{{langname}}}中與[[加斯科涅]]相關的詞語。",
parents = {"法國"},
}
labels["印度次大陸"] = {
type = "related-to",
description = "{{{langname}}}中與[[印度次大陸]]相關的詞語。",
parents = {"南亞"},
}
labels["孟加拉"] = {
type = "related-to",
description = "{{{langname}}}中與[[孟加拉]]地區相關的詞語。",
parents = {"印度次大陸"},
}
labels["克什米爾"] = {
type = "related-to",
description = "{{{langname}}}中與[[克什米爾]]相關的詞語。",
parents = {"印度次大陸"},
}
labels["克什米爾(印度)"] = {
type = "related-to",
description = "{{{langname}}}中[[印度]]管轄的[[克什米爾]]地名。",
parents = {"印度", "克什米爾"},
}
labels["朝鮮半島"] = {
type = "related-to",
description = "{{{langname}}}中與[[朝鮮半島]]相關的詞語。",
parents = {"亞洲"},
}
labels["朗格多克"] = {
type = "related-to",
description = "{{{langname}}}中與[[朗格多克]]相關的詞語。",
parents = {"法國"},
}
labels["拉普蘭"] = {
type = "related-to",
description = "{{{langname}}}中與[[拉普蘭]]相關的詞語。",
parents = {"歐洲", "芬蘭", "挪威", "俄羅斯", "瑞典"},
}
labels["中東"] = {
type = "related-to",
description = "{{{langname}}}中與[[中東]]相關的詞語。",
parents = {"非洲", "亞洲"},
}
labels["荷屬安的列斯"] = {
type = "related-to",
description = "{{{langname}}}中與[[荷屬安的列斯]]相關的詞語。",
parents = {"荷蘭", "北美洲"},
}
labels["海外法國"] = {
type = "related-to",
description = "{{{langname}}}中與[[海外法國]]相關的詞語。",
parents = {"法國"},
}
labels["普羅旺斯"] = {
type = "related-to",
description = "{{{langname}}}中與[[普羅旺斯]]相關的詞語。",
parents = {"法國"},
}
labels["波蘭人民共和國"] = {
type = "related-to",
description = "{{{langname}}}中與[[波蘭人民共和國]]相關的詞語。",
parents = {"波蘭"},
}
labels["南亞"] = {
type = "related-to",
description = "{{{langname}}}中與[[南亞]]相關的詞語。",
parents = {"歐亞大陸", "亞洲"},
}
return {LABELS = labels, HANDLERS = handlers}
o117xtmqeg8i1ywab1szyrv9iw2kv1l
Category:拉丁語 國家
14
1395230
9758771
5801145
2026-05-13T16:09:48Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758771
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Lisabona
0
1399137
9758847
7660719
2026-05-13T16:36:01Z
TongcyDai
53191
9758847
wikitext
text/x-wiki
==拉脫維亞語==
{{wp|lv:}}
===專有名詞===
{{lv-proper noun|f|4th}}
# {{tcl|zh|里斯本|id=Q597}}
====變格====
{{lv-decl-noun|Lisabon|a|4th|no-pl||||proper|extrawidth=-60}}
==立陶宛語==
{{wp|lt:}}
===發音===
{{lt-pr|Lisabo^nà}}
===專有名詞===
{{lt-proper noun|f|2|head=Lisabonà}}
# {{tcl|lt|里斯本|id=Q597}}
====變格====
{{lt-noun-f-a-2|Lisabon|Lisabòn|n=s}}
===延伸閱讀===
* {{R:lt:BŽ}}
* {{R:lt:VLE}}
==羅馬尼亞語==
[[Image:Igreja_de_Santo_Estêvão,_seen_from_the_Miradouro_S._Luzia,_Lisbon,_Portugal.jpg|thumb|Lisabona]]
===發音===
* {{audio|ro|LL-Q7913 (ron)-KlaudiuMihaila-Lisabona.wav}}
===專有名詞===
{{head|ro|專有名詞|g=f}}
# {{tcl|zh|里斯本|id=Q597}}
4qvmx5yaahstjwhr85a84fg39cts5lo
Lisszabon
0
1399140
9758859
5934916
2026-05-13T17:52:20Z
TongcyDai
53191
9758859
wikitext
text/x-wiki
==匈牙利語==
{{swp|hu:}}
===發音===
* {{hu-IPA}}
* {{hyphenation|hu|Lisz|sza|bon}}
* {{rhymes|hu|on|s=3}}
===專有名詞===
{{head|hu|專有名詞}}
# {{tcl|hu|里斯本|id=Q597}}
====變格====
{{hu-infl-nom|Lisszabono|o|-|n=sg}}{{hu-pos-otok|Lisszabon|j|jai|n=sg}}
====派生詞彙====
* {{l|hu|lisszaboni}}
83tdbj6md380w8w97j2xc3e1yhw7cmr
Olisipo
0
1399568
9758857
9628083
2026-05-13T17:50:54Z
TongcyDai
53191
9758857
wikitext
text/x-wiki
==拉丁語==
===其他寫法===
* {{alter|la|Ulisippō|Olisippō|Olysippō|Ulysippō|Olysīpō}}
===詞源===
未知,可能源自{{der|la|qsb-ibe}}(可能是{{der|la|txr|-}})中的“塔霍河”一詞,通過{{der|la|phn|-}}。有的變體是源於民間傳說與{{l|la|Ulixēs}}/{{l|la|Ulyssēs||[[奧德賽]]}}有關。
===發音===
* {{la-IPA|Olisīpō}}
===專有名詞===
{{la-proper noun|Olisīpō<3.loc>|g=f|g2=m}}
# {{place|la|city|現代|c/葡萄牙|t1=里斯本}}
====使用注意====
* 本詞的性不定。有的詞典(Lewis and Short, Gaffiot)認為是陽性,有的(Kraft and Forbiger, Oxford Latin Dictionary)認為是陰性。
====變格====
{{la-ndecl|Olisīpō<3.loc>}}
====派生詞====
* {{l|la|olisīpōnēnsis}}
====派生語彙====
* {{desc|pt|Olisipo}}, {{l|pt|Olissipo}} {{qualifier|借詞}}
* {{desc|la-vul|Olisipona}}
** {{desc|roa-opt|Lisbõa}}, {{l|roa-opt|Lixbõa}}
*** {{desc|gl|Lisboa}}
*** {{desc|mwl|Lisboua}}
*** {{desc|pt|Lisboa}}
*** {{desc|es|Lisboa}}
** {{desc|osp|Ulixbona}}
===參考資料===
* {{R:la:L&S}}
* {{R:la:Gaffiot}}
* {{R:la:OLD|1|Olisīpō|1246}}
* Friedrich Karl Kraft and M. Albert Forbiger, ''Neues deutsch-lateinisches Handwörterbuch'', Leipzig, 1826, page 1403 (in an appendix of geographical names entitled "Geographischer Anhang"): "'''Liſſabon, (Lisboa),''' Olissipo (Ulisippo, Olisipo), onis, f. ''Plin.'' Lisbona."
[[Category:拉丁語 首都]]
==葡萄牙語==
===專有名詞===
{{pt-proper noun|f}}
# 同{{l|pt|Olissipo}}。
27k3can6s8zeh4ro9ciy3bxrroe0puy
Template:En-categoryTOC
10
1421758
9758865
5780087
2026-05-13T20:13:26Z
Xiplus
25402
已保护“[[Template:En-categoryTOC]]”:高風險模板:535引用([编辑权限=仅允许自动确认用户](无限期)[移动权限=仅允许自动确认用户](无限期))
5780087
wikitext
text/x-wiki
{| id="toc" class="toc plainlinks" summary="Contents" |
|-
| [{{fullurl:{{FULLPAGENAMEE}}}} 頂] – [{{fullurl:{{FULLPAGENAMEE}}|from=A}} A] [{{fullurl:{{FULLPAGENAMEE}}|from=B}} B] [{{fullurl:{{FULLPAGENAMEE}}|from=C}} C] [{{fullurl:{{FULLPAGENAMEE}}|from=D}} D] [{{fullurl:{{FULLPAGENAMEE}}|from=E}} E] [{{fullurl:{{FULLPAGENAMEE}}|from=F}} F] [{{fullurl:{{FULLPAGENAMEE}}|from=G}} G] [{{fullurl:{{FULLPAGENAMEE}}|from=H}} H] [{{fullurl:{{FULLPAGENAMEE}}|from=I}} I] [{{fullurl:{{FULLPAGENAMEE}}|from=J}} J] [{{fullurl:{{FULLPAGENAMEE}}|from=K}} K] [{{fullurl:{{FULLPAGENAMEE}}|from=L}} L] [{{fullurl:{{FULLPAGENAMEE}}|from=M}} M] [{{fullurl:{{FULLPAGENAMEE}}|from=N}} N] [{{fullurl:{{FULLPAGENAMEE}}|from=O}} O] [{{fullurl:{{FULLPAGENAMEE}}|from=P}} P] [{{fullurl:{{FULLPAGENAMEE}}|from=Q}} Q] [{{fullurl:{{FULLPAGENAMEE}}|from=R}} R] [{{fullurl:{{FULLPAGENAMEE}}|from=S}} S] [{{fullurl:{{FULLPAGENAMEE}}|from=T}} T] [{{fullurl:{{FULLPAGENAMEE}}|from=U}} U] [{{fullurl:{{FULLPAGENAMEE}}|from=V}} V] [{{fullurl:{{FULLPAGENAMEE}}|from=W}} W] [{{fullurl:{{FULLPAGENAMEE}}|from=X}} X] [{{fullurl:{{FULLPAGENAMEE}}|from=Y}} Y] [{{fullurl:{{FULLPAGENAMEE}}|from=Z}} Z]
|}<noinclude>
{{documentation}}
</noinclude>
doxrg9ytuu93i9gr5mppmffk63wng91
mune
0
1421782
9759377
9589146
2026-05-14T11:25:03Z
TongcyDai
53191
9759377
wikitext
text/x-wiki
{{also|Mune|MUNE|mûne|muñe}}
==愛沙尼亞語==
===名詞===
{{head|et|名詞變格形}}
# {{noun form of|et|muna||par|p}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|むね}}
==中古英語==
===動詞===
{{head|enm|動詞}}
# {{alt form|enm|mone|t=應|id=應}}
==新挪威語==
===其他形式===
* {{alt|nn|muna|}}
===詞源===
{{root|nn|ine-pro|*men-|id=想}}
{{inh+|nn|non|munu}}。
===動詞===
{{head|nn|動詞|現在時|mun|過去式|munde|過去分詞|munt|祈使語氣|mun}}
# {{lb|nn|古舊}} [[可行]],[[可能]]
====派生詞彙====
* {{l|nn|mun tru}}
====相關詞彙====
* {{l|nn|minne}}
===參考資料===
* {{R:nn:OB}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|munir}}
==低地蘇格蘭語==
===發音===
* {{IPA|sco|/møn/|/mɪn/}}
===名詞===
{{sco-noun}}
# {{alternative spelling of|sco|muin}}
{{cln|sco|1音節詞}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|munir}}
==聰加語==
===詞源===
{{inh+|ts|bnt-pro|*-nàì}}。
===數詞===
{{head|ts|數詞}}
# [[四]]
{{cln|ts|基數詞}}
eilhz6l9vz89hju6sguol0wp9a9ept7
Module:Anchors/templates
828
1429383
9759356
8689862
2026-05-14T10:24:12Z
TongcyDai
53191
9759356
Scribunto
text/plain
-- Prevent substitution.
if mw.isSubsting() then
return require("Module:unsubst")
end
local m_anchors = require("Module:anchors")
local load_data = mw.loadData
local process_params = require("Module:parameters").process
local export = {}
function export.anchor_t(frame)
return m_anchors.make_anchors(process_params(frame:getParent().args, load_data("Module:parameters/data").anchor)[1])
end
function export.senseid_t(frame)
local args = process_params(frame:getParent().args, load_data("Module:parameters/data").senseid)
return m_anchors.senseid(args[1], args[2], args.tag)
end
function export.etymid_t(frame)
local args = process_params(frame:getParent().args, load_data("Module:parameters/data").etymid)
return m_anchors.etymid(args[1], args[2])
end
return export
atlebd9m4unw4xc8k1jsx8y3ma8yi81
Category:社會
14
1429857
9758664
7033064
2026-05-13T16:05:32Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758664
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
𰛭
0
1446433
9759304
5861351
2026-05-14T07:15:15Z
TongcyDai
53191
9759304
wikitext
text/x-wiki
{{character info}}
==跨語言==
===漢字===
{{Han char|rn=85|rad=水|as=7|sn=10|four=|canj=|ids=⿰氵坒}}
====參考資料====
* {{Han ref|kx=|dkj=|dj=|hdz=|uh=306ED}}
==漢語==
{{zh-see|陛|v}}
hpbhovzh76fs2po2clmsl9sg3fxv468
Module:Object usage
828
1584342
9759331
9517321
2026-05-14T08:30:53Z
TongcyDai
53191
9759331
Scribunto
text/plain
local export = {}
local dump = mw.dumpObject
local m_links = require("Module:links")
local form_of_module = "Module:form of"
local labels_module = "Module:labels"
local parse_utilities_module = "Module:parse utilities"
local pron_qualifier_module = "Module:pron qualifier"
local references_module = "Module:references"
local rsubn = mw.ustring.gsub
local rfind = mw.ustring.find
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
-- version of rsubn() that returns a 2nd argument boolean indicating whether
-- a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
function export.show_obj(frame)
local pargs = frame:getParent().args
local params = {
[1] = {required = true, type = "language", default = "und"},
[2] = {list = true},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local lang = args[1]
local m_parse_utilities = require(parse_utilities_module)
local qualifier_label_mod = {"q", "qq", "l", "ll"}
local qualifier_label_mod_with_starred_set = {}
for _, mod in ipairs(qualifier_label_mod) do
qualifier_label_mod_with_starred_set[mod] = true
qualifier_label_mod_with_starred_set[mod .. "*"] = true
end
local function parse_object(object, paramno)
local function parse_one_form(run)
local function parse_err(msg)
error(msg .. ": '" .. table.concat(run) .. "'")
end
if #run == 1 and run[1] == "" then
error("Blank form not allowed")
end
local retval = {}
retval.form = run[1]
retval.form, retval.is_postposition = rsubb(retval.form, "^::", "")
if retval.is_postposition then
retval.is_term = true
else
retval.form, retval.is_term = rsubb(retval.form, "^:", "")
end
for i = 2, #run - 1, 2 do
if run[i + 1] ~= "" then
parse_err("Extraneous text '" .. run[i + 1] .. "' after modifier")
end
if run[i]:find("^%(") then
if not retval.is_term then
parse_err("Can't attach case '" .. run[i] .. "' to non-term")
end
local raw_case = run[i]:gsub("^%((.*)%)$", "%1")
if raw_case:find("[+/&<>()%[%]]") then
retval.case = parse_object(raw_case, ("%s:%s(...)"):format(retval.form, paramno))
else
retval.case = raw_case
end
else
local modtext = run[i]:match("^<(.*)>$")
if not modtext then
parse_err("Internal error: Modifier '" .. modtext .. "' isn't surrounded by angle brackets")
end
local prefix, arg = modtext:match("^([a-z]+%*?):(.*)$")
if prefix then
if qualifier_label_mod_with_starred_set[prefix] or prefix == "t" or prefix == "id" or
prefix == "tr" or prefix == "ts" or prefix == "alt" or prefix == "ref" then
if not retval.is_term and not qualifier_label_mod_with_starred_set[prefix] and
prefix ~= "ref" and prefix ~= "t" then
parse_err("Can't attach prefix '" .. prefix .. "' to non-term")
end
local item_dest = prefix == "ref" and "refs" or prefix
if retval[item_dest] then
parse_err("Can't set two values for prefix '" .. prefix .. "'")
end
if prefix == "l" or prefix == "ll" or prefix == "l*" or prefix == "ll*" then
arg = require(labels_module).split_labels_on_comma(arg)
elseif prefix == "ref" then
arg = require(references_module).parse_references(arg, parse_err)
end
retval[item_dest] = arg
else
parse_err("Unrecognized prefix '" .. prefix .. "' in modifier " .. run[i])
end
else
retval.t = modtext
end
end
end
return retval
end
local parsed_object = {arguments = {}}
local orig_segments =
m_parse_utilities.parse_multi_delimiter_balanced_segment_run(object, {{"[", "]"}, {"(", ")"}, {"<", ">"}})
-- rejoin bracketed segments with nearby ones; we only parse them to ensure that we leave alone parens and
-- angle brackets inside of square brackets.
local joined_segments = {}
local i = 1
while i <= #orig_segments do
local segment = orig_segments[i]
if i % 2 == 0 and segment:find("^%[") then
joined_segments[#joined_segments] = joined_segments[#joined_segments] .. segment .. orig_segments[i + 1]
i = i + 2
else
table.insert(joined_segments, segment)
i = i + 1
end
end
local split_runs =
m_parse_utilities.split_alternating_runs(joined_segments, "%s*[+/&]%s*", "preserve splitchar")
-- Now parse the forms.
i = 1
while i <= #split_runs do
if i == 1 and #split_runs[1] == 1 and split_runs[1][1] == "" and #split_runs > 1 and
rfind(split_runs[2][1], "^%s*&%s*$") then
-- Blank argument at beginning followed by & to suppress the +. Ignore it.
else
local form = parse_one_form(split_runs[i])
local prev_joiner = i > 1 and rsub(split_runs[i - 1][1], "^%s*(.-)%s*$", "%1")
if prev_joiner == "/" then
local this_alternants = parsed_object.arguments[#parsed_object.arguments].alternants
-- Join to the previous alternant.
table.insert(this_alternants, form)
if not form.is_term and form.form == "etc." then
for j = 2, #this_alternants do
this_alternants[j].separator = ", "
end
end
else
local suppress_with = prev_joiner == "&"
-- Create a new argument.
table.insert(parsed_object.arguments, {alternants = {form}, suppress_with = suppress_with})
end
end
i = i + 2
end
-- Now move qualifiers up as necessary.
local function parse_err(msg)
error(("%s: %s=%s"):format(msg, paramno, object))
end
for _, argument in ipairs(parsed_object.arguments) do
for i, alternant in ipairs(argument.alternants) do
if #argument.alternants == 1 then
-- If there's only one alternant, convert regular qualifiers to starred versions if there's not
-- already a starred version.
for _, mod in ipairs(qualifier_label_mod) do
if alternant[mod] and not alternant[mod .. "*"] then
alternant[mod .. "*"] = alternant[mod]
alternant[mod] = nil
end
end
end
if i < #argument.alternants then
-- Starred versions cannot be attached to non-final alternants.
for _, mod in ipairs(qualifier_label_mod) do
if alternant[mod .. "*"] then
parse_err(("Starred version '%s' of label or qualifier must be attached to last alternant"):
format(mod .. "*"))
end
end
else
-- Starred versions attached to final alternants should be moved up to argument level.
for _, mod in ipairs(qualifier_label_mod) do
if alternant[mod .. "*"] then
argument[mod] = alternant[mod .. "*"]
alternant[mod .. "*"] = nil
end
end
end
end
end
return parsed_object
end
local parsed_objects = {}
for argno, object in ipairs(args[2]) do
if object == ";" then
-- bare semicolon separator, to create a higher-level separation between parameters than
-- the normal "; or ..." separator.
if not parsed_objects[1] then
error("Can't have bare semicolon separator parameter as first parameter")
end
else
-- argno + 1 because object arguments begin at 2=
local parsed_object = parse_object(object, argno + 1)
if argno > 1 and args[2][argno - 1] == ";" then
parsed_object.separator = ";"
end
table.insert(parsed_objects, parsed_object)
end
end
local function format_parsed_object(parsed_object, recursive_suppress_with)
local argument_parts = {}
local multiple_alternants = false
for _, argument in ipairs(parsed_object.arguments) do
if #argument.alternants > 1 then
multiple_alternants = true
break
end
end
local used_with_in_prefix = false
for i, argument in ipairs(parsed_object.arguments) do
local alternant_parts = {}
local prefix, separator
local suppress_with = argument.suppress_with or i == 1 and recursive_suppress_with
if not suppress_with then
if not used_with_in_prefix then
separator = i > 1 and " " or ""
prefix = "接 "
used_with_in_prefix = true
elseif multiple_alternants then
separator = ","
prefix = "接 "
else
separator = " "
prefix = "和 "
end
else
separator = i > 1 and " " or ""
prefix = ""
end
-- If there are multiple alternants and a non-final alternant has a gloss, assume that each alternant has
-- its own gloss, or at least that the gloss on the final alternant doesn't apply to all alternants.
-- Otherwise, we assume the gloss on the final alternant applies to all alternants. This affects the
-- placement of right labels and qualifiers vis-à-vis the gloss: if there's a single gloss applying to
-- multiple alternants, we put the right labels and qualifiers before gloss, otherwise after.
local gloss_with_non_final_alternant = false
for j, alternant in ipairs(argument.alternants) do
if j < #argument.alternants and alternant.t then
gloss_with_non_final_alternant = true
break
end
end
-- Process each alternant.
for j, alternant in ipairs(argument.alternants) do
-- Construct the "case text" for the alternant (what goes in parens). We always assume that a given case
-- text goes only with its associated alternant, unlike for the gloss (see above).
local case_text
if alternant.case then
if type(alternant.case) == "string" then
case_text = require(form_of_module).tagged_inflections {
lang = lang, tags = {alternant.case}, text_classes = text_classes
}
else
case_text = format_parsed_object(alternant.case, "suppress with")
end
if alternant.is_postposition then
case_text = "(" .. case_text .. " +)"
else
case_text = "+ " .. case_text
end
end
-- Construct the argument itself (inflection tag or literal word), and add any case text.
local form
--local text_classes = "object-usage-form-of-tag"
local text_classes = "object-usage-tag"
if alternant.is_term then
local term = alternant.form
if term == "" then
term = nil
end
form = m_links.full_link({lang = lang, term = term, alt = alternant.alt, id = alternant.id,
tr = alternant.tr, ts = alternant.ts, pos = not alternant.is_postposition and case_text or nil},
"bold")
if alternant.is_postposition and case_text then
form = case_text .. " " .. form
end
else
form = require(form_of_module).tagged_inflections {
lang = lang, tags = {alternant.form}, text_classes = text_classes
}
form = mw.text.trim(form:gsub("<span[^>]*>", ""):gsub("</span>", ""):gsub("''", "")) -- l10n: 移除斜體標記和首尾空格
if case_text then
if alternant.is_postposition then
form = case_text .. " " .. form
else
form = form .. " (" .. case_text .. ")"
end
end
end
local part = form
local function add_qualifiers_and_labels_to_alternant(refs)
if alternant.q or alternant.qq or alternant.l or alternant.ll or refs then
part = require(pron_qualifier_module).format_qualifiers {
text = part,
lang = lang,
q = alternant.q and {alternant.q} or nil,
qq = alternant.qq and {alternant.qq} or nil,
l = alternant.l,
ll = alternant.ll,
refs = refs,
}
end
end
local meaning_text = ""
if alternant.t then
meaning_text = " <small>「" .. alternant.t .. "」</small>"
end
if gloss_with_non_final_alternant or #argument.alternants == 1 then
-- See above. If there is only one alternant, or multiple alternants where each gloss goes with an
-- individual alternant, right labels and qualifiers go after the gloss, otherwise before. The
-- reference always goes directly after the form (before the gloss), so if the right labels and
-- qualifiers go after the gloss, we need to split up their handling.
if alternant.refs then
part = require(pron_qualifier_module).format_qualifiers {
text = part,
lang = lang,
refs = alternant.refs,
}
end
part = part .. meaning_text
add_qualifiers_and_labels_to_alternant()
else
add_qualifiers_and_labels_to_alternant(alternant.refs)
part = part .. meaning_text
end
if j > 1 and not used_with_in_prefix and not recursive_suppress_with then
-- If we used e.g. {{+obj|ca|&transitve/:en}} to suppress the initial ''with'', we want it
-- to appear after the ''or'' so we get ''transitive or with [[en]]'' rather than just
-- ''transitive or [[en]]''.
part = "接" .. part
used_with_in_prefix = true
end
if j > 1 then
table.insert(alternant_parts, alternant.separator or "或")
end
table.insert(alternant_parts, part)
end
local part = prefix .. table.concat(alternant_parts)
if argument.q or argument.qq or argument.l or argument.ll then
part = require(pron_qualifier_module).format_qualifiers {
text = part,
lang = lang,
q = argument.q and {argument.q} or nil,
qq = argument.qq and {argument.qq} or nil,
l = argument.l,
ll = argument.ll,
}
end
table.insert(argument_parts, separator .. part)
end
return table.concat(argument_parts)
end
-- Now generate the text.
local object_parts = {}
local function ins(txt)
table.insert(object_parts, txt)
end
ins(require("Module:TemplateStyles")("Module:object usage/style.css"))
ins("[")
for i, parsed_object in ipairs(parsed_objects) do
if i > 1 then
if parsed_object.separator == ";" then
ins(";此外,")
else
ins(";或")
end
end
ins(format_parsed_object(parsed_object, false))
end
ins("]")
return table.concat(object_parts)
end
function export.show_aux(frame)
local pargs = frame:getParent().args
local params = {
[1] = {required = true, default = "und"},
[2] = {list = true, allow_holes = true},
["alt"] = {list = true, allow_holes = true},
["q"] = {list = true, allow_holes = true},
["id"] = {list = true, allow_holes = true},
["senseid"] = {list = true, allow_holes = true, alias_of = "id"},
["means"] = {list = true, allow_holes = true},
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local lang = require("Module:languages").getByCode(args[1], 1)
-- Find the maximum index among any of the list parameters.
local maxmaxindex = 0
for k, v in pairs(args) do
if type(v) == "table" and v.maxindex and v.maxindex > maxmaxindex then
maxmaxindex = v.maxindex
end
end
if mw.title.getCurrentTitle().nsText == "Template" and mw.title.getCurrentTitle().text == "+aux" then
return "[助動詞 " .. m_links.full_link({lang = lang, term = "助動詞"}, "term") .. " = meaning]"
end
local parts = {}
for i = 1, maxmaxindex do
local term = m_links.full_link({lang = lang, term = args[2][i], alt = args.alt[i], id = args.id[i]}, "term")
if args.means[i] then
term = term .. " = " .. args.means[i]
end
if args.q[i] then
term = require("Module:qualifier").format_qualifier(args.q[i]) .. " " .. term
end
table.insert(parts, term)
end
return "[助動詞 " .. require("Module:table").serialCommaJoin(parts, {conj = "或"}) .. "]"
end
return export
3oylblshmk3vgzqnbp9uceilmkzqrsn
Module:Place
828
1629826
9758804
9431006
2026-05-13T16:10:57Z
TongcyDai
53191
9758804
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")
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
2p64pk7o2inpid35ni77jpzti7hgtfc
9758848
9758804
2026-05-13T16:48:49Z
TongcyDai
53191
9758848
Scribunto
text/plain
-- zhwikt
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")
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 zhlang = require(languages_module).getByCode("zh")
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 zhlang)
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
zhlang)
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, "zh", 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 "zh" 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 = zhlang} .. ")"
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
ppr7vbf26p2ip5yzqrmyuw2cits5gea
9758849
9758848
2026-05-13T16:49:13Z
TongcyDai
53191
9758849
Scribunto
text/plain
-- zhwikt
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")
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 zhlang = require(languages_module).getByCode("zh")
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 zhlang)
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
zhlang)
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, "zh", 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 "zh" 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 = zhlang} .. ")"
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 ~= "zh" then
track(tracking_prefix .. "/non-chinese")
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
mm8adsuybbun2hfyjngkdnxz30mkebm
9758850
9758849
2026-05-13T16:49:51Z
TongcyDai
53191
9758850
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")
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 zhlang = require(languages_module).getByCode("zh")
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 zhlang)
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
zhlang)
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, "zh", 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 "zh" 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 = zhlang} .. ")"
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 ~= "zh" then
track(tracking_prefix .. "/non-chinese")
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
3te8vm7wx22528lt2j2pddcm544gytr
9758852
9758850
2026-05-13T17:45:48Z
TongcyDai
53191
9758852
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")
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 zhlang = require(languages_module).getByCode("zh")
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.language_link( -- l10n, avoid simp/trad or applying special fonts
{
term = text,
alt = text,
lang = require(languages_module).getByCode(langcode, true, "allow etym"),
id = id
}
)
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 zhlang)
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
zhlang)
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, "zh", 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 "zh" 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 = zhlang} .. ")"
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 ~= "zh" then
track(tracking_prefix .. "/non-chinese")
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
5w9t3yvvhmy8hxlk0qqtak31653ybeu
Module:Place/data
828
1629828
9758832
9294764
2026-05-13T16:11:54Z
TongcyDai
53191
9758832
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 = "縣",
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
99n9rtn0e9gepvxm97epdnb4iug5tik
Wiktionary:啤酒馆/topic list
4
1705276
9758863
9756581
2026-05-13T18:20:15Z
Cewbot
61744
[[User:Cewbot/log/20170915/configuration|生成議題列表:10個議題]]; new reply: [[:Wiktionary:啤酒馆#Template:place|Template:place]]
9758863
wikitext
text/x-wiki
<!-- 本頁面由機器人自動更新。若要改進,請聯繫機器人操作者。 -->
{| class="wikitable sortable mw-collapsible" style="float:left;"
|-
! data-sort-type="number" style="font-weight: normal;" | <small>#</small> !! 💭 話題 !! <span title="發言數/發言人次 (實際上為計算簽名數)">💬</span> !! <span title="參與討論人數/發言人數">👥</span> !! 🙋 最新發言 !! data-sort-type="isoDate" | <span title="最後更新">🕒 <small>(UTC+8)</small></span>
|-
| style="text-align: right;" | 1
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Subscribe_to_the_This_Month_in_Education_newsletter_-_learn_from_others_and_share_your_stories|Subscribe to the This Month in Education newsletter - learn from others and share your stories]]</small>
| style="text-align: right;background-color: #fcc;" | 0
| style="text-align: right;background-color: #fcc;" | 0
| style="background-color: #ffd;" |
| style="background-color: #ffd;" |
|-
| style="text-align: right;" | 2
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Do_you_use_Wikidata_in_Wikimedia_sibling_projects?_Tell_us_about_your_experiences|Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences]]</small>
| style="text-align: right;background-color: #fcc;" | 0
| style="text-align: right;background-color: #fcc;" | 0
| style="background-color: #ffd;" |
| style="background-color: #ffd;" |
|-
| style="text-align: right;" | 3
| [[:Wiktionary:啤酒馆#重構:原始斯拉夫語/頁面|重構:原始斯拉夫語/頁面]]
| style="text-align: right;" | 4
| style="text-align: right;" | 2
| style="background-color: #bbb;" | [[User:Chihunglu83|Chihunglu83]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-26T13:07:00.000Z" | 2026-03-26 <span style="color: blue;">21:07</span>
|-
| style="text-align: right;" | 4
| [[:Wiktionary:啤酒馆#缺失ISO693-3的語言|缺失ISO693-3的語言]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:Chihunglu83|Chihunglu83]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-27T03:12:00.000Z" | 2026-03-27 <span style="color: blue;">11:12</span>
|-
| style="text-align: right;" | 5
| [[:Wiktionary:啤酒馆#台灣分會2026年3月對話時間|台灣分會2026年3月對話時間]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-28T06:28:00.000Z" | 2026-03-28 <span style="color: blue;">14:28</span>
|-
| style="text-align: right;" | 6
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Action_Required:_Update_templates/modules_for_electoral_maps_(Migrating_from_P1846_to_P14226)|Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226)]]</small>
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-03T17:11:00.000Z" | 2026-04-04 <span style="color: blue;">01:11</span>
|-
| style="text-align: right;" | 7
| [[:Wiktionary:啤酒馆#維基詞典:翻譯不充實|維基詞典:翻譯不充實]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:Intolerable situation|<small style="word-wrap: break-word; word-break: break-all;">Intolerable situation</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-10T08:26:00.000Z" | 2026-04-10 <span style="color: blue;">16:26</span>
|-
| style="text-align: right;" | 8
| [[:Wiktionary:啤酒馆#Request_for_comment_(global_AI_policy)|Request for comment (global AI policy)]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #ddd;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-04-26T00:58:00.000Z" | 2026-04-26 <span style="color: blue;">08:58</span>
|-
| style="text-align: right;" | 9
| [[:Wiktionary:啤酒馆#台灣分會2026年4月對話時間|台灣分會2026年4月對話時間]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #ddd;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-04-27T22:52:00.000Z" | 2026-04-28 <span style="color: blue;">06:52</span>
|-
| style="text-align: right;" | 10
| [[:Wiktionary:啤酒馆#Template:place|Template:place]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #efe;" | [[User:TongcyDai|TongcyDai]]
| style="background-color: #efe;" data-sort-type="isoDate" data-sort-value="2026-05-13T18:20:00.000Z" | 2026-05-14 <span style="color: blue;">02:20</span>
|}
{| class="wikitable mw-collapsible mw-collapsed" style="float: left; margin-left: .5em;;{{#if:{{{no_time_legend|}}}|display:none;|}}"
! title="From the latest bot edit" | 發言更新圖例
|-
| style="background-color: #efe;" |
* 最近一小時內
|-
| style="background-color: #eef;" |
* 最近一日內
|-
| |
* 一週內
|-
| style="background-color: #ddd;" |
* 一個月內
|-
| style="background-color: #bbb;" |
* 逾一個月
|-
! 特殊狀態
|-
| style="text-decoration: line-through" | 已移動至其他頁面<br />或完成討論之議題
|-
! 手動設定
|-
| style="max-width: 12em;" | <small>當列表出現異常時,<br />請先檢查[[User:Cewbot/log/20170915/configuration|設定]]是否有誤</small>
|-
|}
{{Clear}}
f83j5g0yq9jc0iusw8059eegbwk9h7j
9758877
9758863
2026-05-14T00:20:29Z
Cewbot
61744
[[User:Cewbot/log/20170915/configuration|生成議題列表:10個議題]]
9758877
wikitext
text/x-wiki
<!-- 本頁面由機器人自動更新。若要改進,請聯繫機器人操作者。 -->
{| class="wikitable sortable mw-collapsible" style="float:left;"
|-
! data-sort-type="number" style="font-weight: normal;" | <small>#</small> !! 💭 話題 !! <span title="發言數/發言人次 (實際上為計算簽名數)">💬</span> !! <span title="參與討論人數/發言人數">👥</span> !! 🙋 最新發言 !! data-sort-type="isoDate" | <span title="最後更新">🕒 <small>(UTC+8)</small></span>
|-
| style="text-align: right;" | 1
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Subscribe_to_the_This_Month_in_Education_newsletter_-_learn_from_others_and_share_your_stories|Subscribe to the This Month in Education newsletter - learn from others and share your stories]]</small>
| style="text-align: right;background-color: #fcc;" | 0
| style="text-align: right;background-color: #fcc;" | 0
| style="background-color: #ffd;" |
| style="background-color: #ffd;" |
|-
| style="text-align: right;" | 2
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Do_you_use_Wikidata_in_Wikimedia_sibling_projects?_Tell_us_about_your_experiences|Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences]]</small>
| style="text-align: right;background-color: #fcc;" | 0
| style="text-align: right;background-color: #fcc;" | 0
| style="background-color: #ffd;" |
| style="background-color: #ffd;" |
|-
| style="text-align: right;" | 3
| [[:Wiktionary:啤酒馆#重構:原始斯拉夫語/頁面|重構:原始斯拉夫語/頁面]]
| style="text-align: right;" | 4
| style="text-align: right;" | 2
| style="background-color: #bbb;" | [[User:Chihunglu83|Chihunglu83]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-26T13:07:00.000Z" | 2026-03-26 <span style="color: blue;">21:07</span>
|-
| style="text-align: right;" | 4
| [[:Wiktionary:啤酒馆#缺失ISO693-3的語言|缺失ISO693-3的語言]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:Chihunglu83|Chihunglu83]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-27T03:12:00.000Z" | 2026-03-27 <span style="color: blue;">11:12</span>
|-
| style="text-align: right;" | 5
| [[:Wiktionary:啤酒馆#台灣分會2026年3月對話時間|台灣分會2026年3月對話時間]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-28T06:28:00.000Z" | 2026-03-28 <span style="color: blue;">14:28</span>
|-
| style="text-align: right;" | 6
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Action_Required:_Update_templates/modules_for_electoral_maps_(Migrating_from_P1846_to_P14226)|Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226)]]</small>
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-03T17:11:00.000Z" | 2026-04-04 <span style="color: blue;">01:11</span>
|-
| style="text-align: right;" | 7
| [[:Wiktionary:啤酒馆#維基詞典:翻譯不充實|維基詞典:翻譯不充實]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:Intolerable situation|<small style="word-wrap: break-word; word-break: break-all;">Intolerable situation</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-10T08:26:00.000Z" | 2026-04-10 <span style="color: blue;">16:26</span>
|-
| style="text-align: right;" | 8
| [[:Wiktionary:啤酒馆#Request_for_comment_(global_AI_policy)|Request for comment (global AI policy)]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #ddd;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-04-26T00:58:00.000Z" | 2026-04-26 <span style="color: blue;">08:58</span>
|-
| style="text-align: right;" | 9
| [[:Wiktionary:啤酒馆#台灣分會2026年4月對話時間|台灣分會2026年4月對話時間]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #ddd;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-04-27T22:52:00.000Z" | 2026-04-28 <span style="color: blue;">06:52</span>
|-
| style="text-align: right;" | 10
| [[:Wiktionary:啤酒馆#Template:place|Template:place]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #eef;" | [[User:TongcyDai|TongcyDai]]
| style="background-color: #eef;" data-sort-type="isoDate" data-sort-value="2026-05-13T18:20:00.000Z" | 2026-05-14 <span style="color: blue;">02:20</span>
|}
{| class="wikitable mw-collapsible mw-collapsed" style="float: left; margin-left: .5em;;{{#if:{{{no_time_legend|}}}|display:none;|}}"
! title="From the latest bot edit" | 發言更新圖例
|-
| style="background-color: #efe;" |
* 最近一小時內
|-
| style="background-color: #eef;" |
* 最近一日內
|-
| |
* 一週內
|-
| style="background-color: #ddd;" |
* 一個月內
|-
| style="background-color: #bbb;" |
* 逾一個月
|-
! 特殊狀態
|-
| style="text-decoration: line-through" | 已移動至其他頁面<br />或完成討論之議題
|-
! 手動設定
|-
| style="max-width: 12em;" | <small>當列表出現異常時,<br />請先檢查[[User:Cewbot/log/20170915/configuration|設定]]是否有誤</small>
|-
|}
{{Clear}}
0tk0ws103uwzdxaitkcx9d7vzck7805
9758892
9758877
2026-05-14T02:09:20Z
Cewbot
61744
[[User:Cewbot/log/20170915/configuration|生成議題列表:10個議題]]; new reply: [[:Wiktionary:啤酒馆#Template:place|Template:place]]
9758892
wikitext
text/x-wiki
<!-- 本頁面由機器人自動更新。若要改進,請聯繫機器人操作者。 -->
{| class="wikitable sortable mw-collapsible" style="float:left;"
|-
! data-sort-type="number" style="font-weight: normal;" | <small>#</small> !! 💭 話題 !! <span title="發言數/發言人次 (實際上為計算簽名數)">💬</span> !! <span title="參與討論人數/發言人數">👥</span> !! 🙋 最新發言 !! data-sort-type="isoDate" | <span title="最後更新">🕒 <small>(UTC+8)</small></span>
|-
| style="text-align: right;" | 1
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Subscribe_to_the_This_Month_in_Education_newsletter_-_learn_from_others_and_share_your_stories|Subscribe to the This Month in Education newsletter - learn from others and share your stories]]</small>
| style="text-align: right;background-color: #fcc;" | 0
| style="text-align: right;background-color: #fcc;" | 0
| style="background-color: #ffd;" |
| style="background-color: #ffd;" |
|-
| style="text-align: right;" | 2
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Do_you_use_Wikidata_in_Wikimedia_sibling_projects?_Tell_us_about_your_experiences|Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences]]</small>
| style="text-align: right;background-color: #fcc;" | 0
| style="text-align: right;background-color: #fcc;" | 0
| style="background-color: #ffd;" |
| style="background-color: #ffd;" |
|-
| style="text-align: right;" | 3
| [[:Wiktionary:啤酒馆#重構:原始斯拉夫語/頁面|重構:原始斯拉夫語/頁面]]
| style="text-align: right;" | 4
| style="text-align: right;" | 2
| style="background-color: #bbb;" | [[User:Chihunglu83|Chihunglu83]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-26T13:07:00.000Z" | 2026-03-26 <span style="color: blue;">21:07</span>
|-
| style="text-align: right;" | 4
| [[:Wiktionary:啤酒馆#缺失ISO693-3的語言|缺失ISO693-3的語言]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:Chihunglu83|Chihunglu83]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-27T03:12:00.000Z" | 2026-03-27 <span style="color: blue;">11:12</span>
|-
| style="text-align: right;" | 5
| [[:Wiktionary:啤酒馆#台灣分會2026年3月對話時間|台灣分會2026年3月對話時間]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-28T06:28:00.000Z" | 2026-03-28 <span style="color: blue;">14:28</span>
|-
| style="text-align: right;" | 6
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Action_Required:_Update_templates/modules_for_electoral_maps_(Migrating_from_P1846_to_P14226)|Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226)]]</small>
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-03T17:11:00.000Z" | 2026-04-04 <span style="color: blue;">01:11</span>
|-
| style="text-align: right;" | 7
| [[:Wiktionary:啤酒馆#維基詞典:翻譯不充實|維基詞典:翻譯不充實]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:Intolerable situation|<small style="word-wrap: break-word; word-break: break-all;">Intolerable situation</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-10T08:26:00.000Z" | 2026-04-10 <span style="color: blue;">16:26</span>
|-
| style="text-align: right;" | 8
| [[:Wiktionary:啤酒馆#Request_for_comment_(global_AI_policy)|Request for comment (global AI policy)]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #ddd;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-04-26T00:58:00.000Z" | 2026-04-26 <span style="color: blue;">08:58</span>
|-
| style="text-align: right;" | 9
| [[:Wiktionary:啤酒馆#台灣分會2026年4月對話時間|台灣分會2026年4月對話時間]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #ddd;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-04-27T22:52:00.000Z" | 2026-04-28 <span style="color: blue;">06:52</span>
|-
| style="text-align: right;" | 10
| [[:Wiktionary:啤酒馆#Template:place|Template:place]]
| style="text-align: right;" | 2
| style="text-align: right;" | 2
| style="background-color: #efe;" | [[User:Sayonzei|Sayonzei]]
| style="background-color: #efe;" data-sort-type="isoDate" data-sort-value="2026-05-14T02:09:00.000Z" | 2026-05-14 <span style="color: blue;">10:09</span>
|}
{| class="wikitable mw-collapsible mw-collapsed" style="float: left; margin-left: .5em;;{{#if:{{{no_time_legend|}}}|display:none;|}}"
! title="From the latest bot edit" | 發言更新圖例
|-
| style="background-color: #efe;" |
* 最近一小時內
|-
| style="background-color: #eef;" |
* 最近一日內
|-
| |
* 一週內
|-
| style="background-color: #ddd;" |
* 一個月內
|-
| style="background-color: #bbb;" |
* 逾一個月
|-
! 特殊狀態
|-
| style="text-decoration: line-through" | 已移動至其他頁面<br />或完成討論之議題
|-
! 手動設定
|-
| style="max-width: 12em;" | <small>當列表出現異常時,<br />請先檢查[[User:Cewbot/log/20170915/configuration|設定]]是否有誤</small>
|-
|}
{{Clear}}
37qn7rmumno4fgrapfn62wlk0xp8qdi
9759301
9758892
2026-05-14T06:20:03Z
Cewbot
61744
[[User:Cewbot/log/20170915/configuration|生成議題列表:10個議題]]; new reply: [[:Wiktionary:啤酒馆#Template:place|Template:place]]
9759301
wikitext
text/x-wiki
<!-- 本頁面由機器人自動更新。若要改進,請聯繫機器人操作者。 -->
{| class="wikitable sortable mw-collapsible" style="float:left;"
|-
! data-sort-type="number" style="font-weight: normal;" | <small>#</small> !! 💭 話題 !! <span title="發言數/發言人次 (實際上為計算簽名數)">💬</span> !! <span title="參與討論人數/發言人數">👥</span> !! 🙋 最新發言 !! data-sort-type="isoDate" | <span title="最後更新">🕒 <small>(UTC+8)</small></span>
|-
| style="text-align: right;" | 1
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Subscribe_to_the_This_Month_in_Education_newsletter_-_learn_from_others_and_share_your_stories|Subscribe to the This Month in Education newsletter - learn from others and share your stories]]</small>
| style="text-align: right;background-color: #fcc;" | 0
| style="text-align: right;background-color: #fcc;" | 0
| style="background-color: #ffd;" |
| style="background-color: #ffd;" |
|-
| style="text-align: right;" | 2
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Do_you_use_Wikidata_in_Wikimedia_sibling_projects?_Tell_us_about_your_experiences|Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences]]</small>
| style="text-align: right;background-color: #fcc;" | 0
| style="text-align: right;background-color: #fcc;" | 0
| style="background-color: #ffd;" |
| style="background-color: #ffd;" |
|-
| style="text-align: right;" | 3
| [[:Wiktionary:啤酒馆#重構:原始斯拉夫語/頁面|重構:原始斯拉夫語/頁面]]
| style="text-align: right;" | 4
| style="text-align: right;" | 2
| style="background-color: #bbb;" | [[User:Chihunglu83|Chihunglu83]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-26T13:07:00.000Z" | 2026-03-26 <span style="color: blue;">21:07</span>
|-
| style="text-align: right;" | 4
| [[:Wiktionary:啤酒馆#缺失ISO693-3的語言|缺失ISO693-3的語言]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:Chihunglu83|Chihunglu83]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-27T03:12:00.000Z" | 2026-03-27 <span style="color: blue;">11:12</span>
|-
| style="text-align: right;" | 5
| [[:Wiktionary:啤酒馆#台灣分會2026年3月對話時間|台灣分會2026年3月對話時間]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-03-28T06:28:00.000Z" | 2026-03-28 <span style="color: blue;">14:28</span>
|-
| style="text-align: right;" | 6
| style="max-width: 24em" | <small>[[:Wiktionary:啤酒馆#Action_Required:_Update_templates/modules_for_electoral_maps_(Migrating_from_P1846_to_P14226)|Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226)]]</small>
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-03T17:11:00.000Z" | 2026-04-04 <span style="color: blue;">01:11</span>
|-
| style="text-align: right;" | 7
| [[:Wiktionary:啤酒馆#維基詞典:翻譯不充實|維基詞典:翻譯不充實]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #bbb;" | [[User:Intolerable situation|<small style="word-wrap: break-word; word-break: break-all;">Intolerable situation</small>]]
| style="background-color: #bbb;" data-sort-type="isoDate" data-sort-value="2026-04-10T08:26:00.000Z" | 2026-04-10 <span style="color: blue;">16:26</span>
|-
| style="text-align: right;" | 8
| [[:Wiktionary:啤酒馆#Request_for_comment_(global_AI_policy)|Request for comment (global AI policy)]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #ddd;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-04-26T00:58:00.000Z" | 2026-04-26 <span style="color: blue;">08:58</span>
|-
| style="text-align: right;" | 9
| [[:Wiktionary:啤酒馆#台灣分會2026年4月對話時間|台灣分會2026年4月對話時間]]
| style="text-align: right;background-color: #fcc;" | 1
| style="text-align: right;background-color: #fcc;" | 1
| style="background-color: #ddd;" | [[User:MediaWiki message delivery|<small style="word-wrap: break-word; word-break: break-all;">MediaWiki message delivery</small>]]
| style="background-color: #ddd;" data-sort-type="isoDate" data-sort-value="2026-04-27T22:52:00.000Z" | 2026-04-28 <span style="color: blue;">06:52</span>
|-
| style="text-align: right;" | 10
| [[:Wiktionary:啤酒馆#Template:place|Template:place]]
| style="text-align: right;" | 3
| style="text-align: right;" | 2
| style="background-color: #efe;" | [[User:TongcyDai|TongcyDai]]
| style="background-color: #efe;" data-sort-type="isoDate" data-sort-value="2026-05-14T06:20:00.000Z" | 2026-05-14 <span style="color: blue;">14:20</span>
|}
{| class="wikitable mw-collapsible mw-collapsed" style="float: left; margin-left: .5em;;{{#if:{{{no_time_legend|}}}|display:none;|}}"
! title="From the latest bot edit" | 發言更新圖例
|-
| style="background-color: #efe;" |
* 最近一小時內
|-
| style="background-color: #eef;" |
* 最近一日內
|-
| |
* 一週內
|-
| style="background-color: #ddd;" |
* 一個月內
|-
| style="background-color: #bbb;" |
* 逾一個月
|-
! 特殊狀態
|-
| style="text-decoration: line-through" | 已移動至其他頁面<br />或完成討論之議題
|-
! 手動設定
|-
| style="max-width: 12em;" | <small>當列表出現異常時,<br />請先檢查[[User:Cewbot/log/20170915/configuration|設定]]是否有誤</small>
|-
|}
{{Clear}}
mr3fyj6xbscg296egnq8rwail528xrj
Category:通信
14
1729022
9758836
7033068
2026-05-13T16:12:00Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758836
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:語言學
14
1729023
9758819
7033069
2026-05-13T16:11:25Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758819
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:辭書學
14
1729024
9758709
7033103
2026-05-13T16:07:32Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758709
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:媒體
14
1729029
9758749
7033072
2026-05-13T16:09:00Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758749
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:大眾媒體
14
1729031
9758813
7033071
2026-05-13T16:11:14Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758813
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:娛樂
14
1729034
9758750
7033114
2026-05-13T16:09:03Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758750
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:人類行為
14
1729037
9758835
7033109
2026-05-13T16:11:58Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758835
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:書寫
14
1729039
9758799
7033116
2026-05-13T16:10:48Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758799
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:文學
14
1729040
9758776
7033102
2026-05-13T16:09:59Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758776
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:書
14
1729041
9758798
7033101
2026-05-13T16:10:46Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758798
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:工具書
14
1729042
9758748
7033104
2026-05-13T16:08:58Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758748
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:物質
14
1732345
9758826
7033034
2026-05-13T16:11:41Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758826
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:自然
14
1732346
9758842
7033036
2026-05-13T16:12:13Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758842
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:生物學
14
1732347
9758825
7033037
2026-05-13T16:11:38Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758825
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:地球科學
14
1732348
9758794
7033040
2026-05-13T16:10:37Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758794
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:地理學
14
1732350
9758747
7033042
2026-05-13T16:08:56Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758747
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:政體
14
1732351
9758812
7033046
2026-05-13T16:11:12Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758812
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:名稱
14
1732353
9758830
7033049
2026-05-13T16:11:50Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758830
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:聖經
14
1732355
9758764
7033051
2026-05-13T16:09:34Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758764
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:聖經人物
14
1732356
9758701
7033052
2026-05-13T16:07:15Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758701
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:基督教
14
1732357
9758742
7033053
2026-05-13T16:08:45Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758742
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:亞伯拉罕諸教
14
1732358
9758807
7033054
2026-05-13T16:11:02Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758807
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:猶太教
14
1732359
9758708
7033062
2026-05-13T16:07:30Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758708
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:神經解剖學
14
1732360
9758699
7033073
2026-05-13T16:07:10Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758699
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:神經學
14
1732361
9758693
7033075
2026-05-13T16:06:56Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758693
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:神經科學
14
1732362
9758692
7033076
2026-05-13T16:06:54Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758692
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:週期事件
14
1732363
9758797
7033082
2026-05-13T16:10:43Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758797
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:季節
14
1732364
9758702
7033084
2026-05-13T16:07:17Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758702
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:香料
14
1732365
9758700
7033085
2026-05-13T16:07:13Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758700
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:香草
14
1732366
9758712
7033086
2026-05-13T16:07:38Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758712
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:香料和香草
14
1732367
9758746
7033087
2026-05-13T16:08:54Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758746
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:飲食
14
1732369
9758833
7033090
2026-05-13T16:11:54Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758833
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:酒
14
1732370
9758788
7033093
2026-05-13T16:10:25Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758788
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:飲料
14
1732371
9758808
7033094
2026-05-13T16:11:04Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758808
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:娛樂性藥物
14
1732372
9758711
7033095
2026-05-13T16:07:36Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758711
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:飲酒
14
1732373
9758707
7033096
2026-05-13T16:07:28Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758707
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:藥
14
1732374
9758766
7033098
2026-05-13T16:09:38Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758766
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:藥理學
14
1732375
9758698
7033099
2026-05-13T16:07:08Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758698
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:液體
14
1732376
9758765
7033100
2026-05-13T16:09:36Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758765
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:葡萄酒
14
1732377
9758710
7033105
2026-05-13T16:07:34Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758710
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:人類活動
14
1732378
9758834
7033110
2026-05-13T16:11:56Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758834
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:科技
14
1732380
9758837
7033112
2026-05-13T16:12:02Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758837
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:語法
14
1732381
9758800
7033113
2026-05-13T16:10:50Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758800
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:消遣
14
1732382
9758790
7033115
2026-05-13T16:10:29Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758790
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:國籍
14
1732383
9758691
7033117
2026-05-13T16:06:51Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758691
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:居民稱謂詞
14
1732384
9758740
7033118
2026-05-13T16:08:41Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758740
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:職業
14
1732385
9758803
7033119
2026-05-13T16:10:56Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758803
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:光
14
1732386
9758763
7033120
2026-05-13T16:09:32Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758763
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:能量
14
1732387
9758802
7033121
2026-05-13T16:10:54Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758802
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:心智
14
1732388
9758817
7033124
2026-05-13T16:11:21Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758817
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:聲音
14
1732390
9758741
7033126
2026-05-13T16:08:43Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758741
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:曆法
14
1732391
9758775
7033127
2026-05-13T16:09:56Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758775
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:計時
14
1732392
9758787
7033128
2026-05-13T16:10:23Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758787
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:假期
14
1732393
9758745
7033129
2026-05-13T16:08:52Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758745
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:節日
14
1732394
9758690
7033130
2026-05-13T16:06:49Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758690
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:商業
14
1732395
9758824
7033133
2026-05-13T16:11:36Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758824
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:烹飪
14
1732396
9758688
7033134
2026-05-13T16:06:43Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758688
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:形式科學
14
1732397
9758821
7033136
2026-05-13T16:11:29Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758821
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:性
14
1732400
9758805
7033139
2026-05-13T16:10:58Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758805
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:應用科學
14
1732402
9758822
7033142
2026-05-13T16:11:31Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758822
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:應用數學
14
1732403
9758777
7033143
2026-05-13T16:10:01Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758777
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:建築物和構築物
14
1732405
9758795
7033145
2026-05-13T16:10:39Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758795
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:建築
14
1732406
9758743
7033146
2026-05-13T16:08:48Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758743
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:房間
14
1732407
9758744
7033147
2026-05-13T16:08:50Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758744
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:廚房
14
1732408
9758689
7033148
2026-05-13T16:06:46Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758689
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:氣象學
14
1732410
9758697
7033160
2026-05-13T16:07:06Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758697
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:大氣
14
1732411
9758796
7033161
2026-05-13T16:10:41Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758796
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:大氣現象
14
1732415
9758751
7033167
2026-05-13T16:09:05Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758751
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:金屬
14
1732416
9758785
7033168
2026-05-13T16:10:19Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758785
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:冶金學
14
1732417
9758695
7033169
2026-05-13T16:07:01Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758695
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:礦物學
14
1732418
9758714
7033172
2026-05-13T16:07:44Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758714
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:幾何學
14
1732419
9758739
7033173
2026-05-13T16:08:39Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758739
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:脊索動物
14
1732420
9758839
7033176
2026-05-13T16:12:07Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758839
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:遺傳學
14
1732421
9758706
7033177
2026-05-13T16:07:26Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758706
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:節肢動物
14
1732422
9758815
7033178
2026-05-13T16:11:19Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758815
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:憤怒
14
1732423
9758687
7033179
2026-05-13T16:06:41Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758687
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:身體部位
14
1732425
9758806
7033181
2026-05-13T16:11:00Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758806
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:感覺
14
1732426
9758793
7033182
2026-05-13T16:10:35Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758793
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:視覺
14
1732427
9758696
7033184
2026-05-13T16:07:03Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758696
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:聽覺
14
1732428
9758715
7033185
2026-05-13T16:07:47Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758715
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:嗅覺
14
1732429
9758713
7033186
2026-05-13T16:07:41Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758713
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:觸覺
14
1732430
9758704
7033187
2026-05-13T16:07:21Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758704
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:性別
14
1732432
9758786
7033190
2026-05-13T16:10:21Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758786
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:骨骼
14
1732434
9758694
7033192
2026-05-13T16:06:59Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758694
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:男性
14
1732436
9758703
7033194
2026-05-13T16:07:19Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758703
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:女性
14
1732437
9758685
7033195
2026-05-13T16:06:37Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758685
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:統計學
14
1732467
9758705
7033228
2026-05-13T16:07:23Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758705
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:代數
14
1732506
9758686
7033419
2026-05-13T16:06:39Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758686
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:形狀
14
1732514
9758738
7033428
2026-05-13T16:08:37Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758738
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:經濟學
14
1732627
9758828
7033565
2026-05-13T16:11:45Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758828
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:個人
14
1732703
9758676
7033648
2026-05-13T16:06:18Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758676
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:年齡
14
1732705
9758679
7033651
2026-05-13T16:06:24Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758679
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:嬰兒
14
1732711
9758678
7033660
2026-05-13T16:06:22Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758678
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:孩童
14
1732712
9758737
7033661
2026-05-13T16:08:35Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758737
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:病理學
14
1732715
9758680
7033665
2026-05-13T16:06:26Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758680
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:死亡
14
1732716
9758677
7033667
2026-05-13T16:06:20Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758677
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:性慾
14
1732892
9758778
7033893
2026-05-13T16:10:03Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758778
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:性取向
14
1732893
9758723
7033894
2026-05-13T16:08:04Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758723
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:愛
14
1732894
9758722
7033895
2026-05-13T16:08:02Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758722
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:賣淫
14
1732895
9758721
7033896
2026-05-13T16:08:00Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758721
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:性姿勢
14
1732896
9758753
7033900
2026-05-13T16:09:09Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758753
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:跨性別
14
1732951
9758720
7033975
2026-05-13T16:07:58Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758720
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:建築要素
14
1733178
9758716
7034257
2026-05-13T16:07:49Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758716
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:馬克思主義
14
1733187
9758717
7034285
2026-05-13T16:07:51Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758717
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:社會主義
14
1733188
9758728
7034286
2026-05-13T16:08:15Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758728
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:意識形態
14
1733189
9758791
7034287
2026-05-13T16:10:31Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758791
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:左翼主義
14
1733193
9758725
7034297
2026-05-13T16:08:09Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758725
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:酶
14
1733244
9758718
7034373
2026-05-13T16:07:53Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758718
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:蛋白質
14
1733245
9758752
7034374
2026-05-13T16:09:07Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758752
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:生物分子
14
1733246
9758779
7034375
2026-05-13T16:10:05Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758779
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:有機化合物
14
1733247
9758767
7034376
2026-05-13T16:09:40Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758767
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:乳製品
14
1733248
9758726
7034377
2026-05-13T16:08:11Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758726
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:乳
14
1733528
9758724
7034715
2026-05-13T16:08:06Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758724
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:體液
14
1733529
9758719
7034716
2026-05-13T16:07:56Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758719
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:農業
14
1733949
9758754
7035262
2026-05-13T16:09:11Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758754
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:印度教
14
1734349
9758727
7036058
2026-05-13T16:08:13Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758727
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:礦物
14
1736322
9758736
7038117
2026-05-13T16:08:33Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758736
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:動物住處
14
1738987
9758675
7040819
2026-05-13T16:06:15Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758675
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:動物學
14
1738988
9758784
7040820
2026-05-13T16:10:17Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758784
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:容器
14
1739009
9758762
7040841
2026-05-13T16:09:29Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758762
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:魚
14
1739015
9758783
7040847
2026-05-13T16:10:15Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758783
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:哲學
14
1739070
9758760
7040904
2026-05-13T16:09:25Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758760
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:中醫學
14
1739071
9758673
7040905
2026-05-13T16:06:11Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758673
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:替代醫學
14
1739072
9758735
7040906
2026-05-13T16:08:31Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758735
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:偽科學
14
1739073
9758761
7040907
2026-05-13T16:09:27Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758761
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:鍊金術
14
1739103
9758674
7040942
2026-05-13T16:06:13Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758674
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:聖經書目
14
1739401
9758671
7041375
2026-05-13T16:06:06Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758671
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:年
14
1739582
9758670
7041741
2026-05-13T16:06:04Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758670
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:天文學
14
1739583
9758782
7041742
2026-05-13T16:10:13Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758782
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:太空
14
1739584
9758672
7041743
2026-05-13T16:06:09Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758672
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:正寫法
14
1739597
9758772
7041761
2026-05-13T16:09:50Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758772
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:頭飾
14
1739610
9758669
7041776
2026-05-13T16:06:01Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758669
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:貨幣
14
1740858
9758733
7043481
2026-05-13T16:08:27Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758733
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:通貨
14
1740859
9758681
7043482
2026-05-13T16:06:29Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758681
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:金融
14
1740860
9758773
7043483
2026-05-13T16:09:52Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758773
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:產業
14
1740861
9758774
7043484
2026-05-13T16:09:54Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758774
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:銀行業
14
1740862
9758682
7043485
2026-05-13T16:06:31Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758682
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:海洋學
14
1740863
9758683
7043486
2026-05-13T16:06:33Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758683
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:生態學
14
1740880
9758684
7043520
2026-05-13T16:06:35Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758684
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Template:Transcluded pagename/doc
10
1757148
9758648
9597576
2026-05-13T12:48:33Z
TongcyDai
53191
TongcyDai移动页面[[Template:Transclude/doc]]至[[Template:Transcluded pagename/doc]],不留重定向
9597576
wikitext
text/x-wiki
<noinclude><!-- 本頁面複製自[[w:zh:Template:Transclude/doc]],由機器人定期更新。請直接編輯原維基項目頁面,或自設定頁面[[User:Cewbot/log/20211203/configuration]]去除本頁面之後再編輯。 --></noinclude>{{NoteTA|G1=MediaWiki}}
{{Documentation subpage}}
{{Used in system}}
{{High-use}}
參數1填的是一個頁面,如果參數1沒有指定名字空間,也無前導冒號的話,就會在前面自動加上{{Focus|Template:}}。
<includeonly>{{sandbox other||
[[Category:格式模板]]
}}</includeonly>
7y3q2ey755zgi0z7wlaa98a26usevkx
Category:庫米欽語 一天裡的時刻
14
1869793
9758665
7198984
2026-05-13T16:05:51Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758665
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:跨語言 國際象棋
14
1889757
9758666
7231663
2026-05-13T16:05:54Z
TongcyBot
83009
/* top */ 更新 topic cat 為 auto cat
9758666
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
User:Sayonzei/Kotori
2
2129326
9758906
9758171
2026-05-14T02:39:28Z
Sayonzei
40728
9758906
wikitext
text/x-wiki
精製鳥飼料:[[User:KotoriBot]]
==列表==
===法語===
*一個-er結尾的第一類法語動詞(連同本體)理論上可產出'''40'''個新詞條。<br>
:{{col3|fr|}}<!--明日:
;需自行創建
:{{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|entrincheirar|engraxar|engordurar|entreouvir}}<!--明日:-->
===西===
*一個-ar結尾的普通西班牙語動詞(連同本體、不含合詞)理論上可產出'''58'''個新詞條。<br>
:{{col3|es|engravecer|entreoír}}<!--明日:
;需自行創建
:{{col3|es|bestializar|zollipar|zampuzar}}-->
===德語===
:{{col3|de|}}
===拉丁語===
:{{col3|la|}}<!--明日:-->
:{{col3|la|}}<!--明日:-->
===意大利語===
:{{col3|it|}}<!--明日:-->
===俄語===
:{{col3|ru|}}
:{{col3|ru|}}
gmziycxxllif65e3fx3kqrjy7cjmgsz
Module:Zh/data/dial-syn/海嘯
828
2251192
9759299
7895597
2026-05-14T06:12:59Z
TongcyDai
53191
9759299
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"] = { "" },
["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"] = { "" },
["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"] = { "" },
["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"] = { "" },
["Wuzhong"] = { "" },
["Zhongwei"] = { "" },
["Bayanhot"] = { "" },
["Lanzhou"] = { "" },
["Jiuquan"] = { "" },
["Dunhuang"] = { "" },
["Shandan"] = { "" },
["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"] = { "" },
["Jingzhou-SS"] = { "" },
["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"] = { "" },
["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"] = { "" },
["Qinzhou-M"] = { "" },
["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"] = { "" },
["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"] = { "" },
["Najiahu"] = { "" },
["Dianbai-Jun"] = { "" },
["Ningguo-GK"] = { "" },
["Langxi"] = { "" },
["Changle-QJ"] = { "" },
["Yanping"] = { "" },
["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-JX"] = { "" },
["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"] = { "" },
["Guangfeng"] = { "" },
["Yushan"] = { "" },
["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"] = { "" },
["Miluo-CL"] = { "" },
["Xiangxiang"] = { "" },
["Xiangxiang-MQ"] = { "" },
["Loudi"] = { "" },
["Shuangfeng"] = { "" },
["Xinhua"] = { "" },
["Lianyuan"] = { "" },
["Shaoyang"] = { "" },
["Lengshuitan"] = { "" },
["Zhuzhou"] = { "" },
["Longhui"] = { "" },
["Suining-X"] = { "" },
["Dongkou-HQ"] = { "" },
["Wugang"] = { "" },
["Hengyang"] = { "" },
["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"] = { "" },
["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-XH"] = { "" },
["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"] = { "" },
["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"] = { "" },
["Xinfeng-MT"] = { "" },
["Xinfeng-DX"] = { "" },
["Xiaosanjiang"] = { "" },
["Liannan"] = { "" },
["Conghua-H"] = { "" },
["Jiexi"] = { "" },
["Luhe"] = { "" },
["Raoping-XF"] = { "" },
["Xiuzhuan"] = { "" },
["Pinghe-JF"] = { "" },
["Nanjing-ML"] = { "" },
["Nanjing-BL"] = { "" },
["Changting"] = { "" },
["Shanghang"] = { "" },
["Yongding"] = { "" },
["Yongding-XY"] = { "" },
["Yongding-GB"] = { "" },
["Yongding-HK"] = { "" },
["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"] = { "" },
["Liudui"] = { "" },
["Wuluo"] = { "" },
["Meinong"] = { "" },
["Shanlin"] = { "" },
["Hsinchu"] = { "" },
["Dongshi"] = { "" },
["Raoping"] = { "" },
["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"] = { "" },
["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"] = { "" },
["Tunxi"] = { "" },
["Huizhou-HZ"] = { "" },
["Xiuning"] = { "" },
["Yixian"] = { "" },
["Qimen"] = { "" },
["Qimen-AL-Min"] = { "" },
["Wuyuan"] = { "" },
["Fuliang"] = { "" },
["Dexing"] = { "" },
["Jingde"] = { "" },
["Zhanda"] = { "" },
["Chun'an"] = { "" },
["Sui'an"] = { "" },
["Jiande"] = { "" },
["Shouchang"] = { "" },
["Guangzhou"] = { "" },
["Hong Kong"] = { "海嘯" },
["HK Weitou"] = { "" },
["Kam Tin"] = { "" },
["Shek Pik"] = { "" },
["Ting Kok"] = { "" },
["Tung Ping Chau"] = { "" },
["Macau"] = { "" },
["Panyu"] = { "" },
["Huadu"] = { "" },
["Conghua"] = { "" },
["Zengcheng"] = { "" },
["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"] = { "" },
["Zhuhai"] = { "" },
["Doumen-T"] = { "" },
["Doumen-S"] = { "" },
["Jiangmen"] = { "" },
["Xinhui"] = { "" },
["Taishan"] = { "" },
["Taishan-GH"] = { "" },
["Kaiping"] = { "" },
["Enping"] = { "" },
["Heshan"] = { "" },
["Malan"] = { "" },
["Malan-BTQ"] = { "" },
["Malan-MHD"] = { "" },
["Malan-SZP"] = { "" },
["Malan-BLH"] = { "" },
["Dongguan"] = { "" },
["Shenzhen-C-LH"] = { "" },
["Bao'an"] = { "" },
["Dapeng"] = { "" },
["Shenzhen-PD"] = { "" },
["Pingshan-ZM"] = { "" },
["Ebu-ZM"] = { "" },
["Qingyuan"] = { "" },
["Fogang"] = { "" },
["Yingde"] = { "" },
["Yangshan"] = { "" },
["Lianshan"] = { "" },
["Lianshan-YH"] = { "" },
["Lianzhou"] = { "" },
["Shaoguan"] = { "" },
["Qujiang-C"] = { "" },
["Renhua"] = { "" },
["Lechang"] = { "" },
["Gaoyao"] = { "" },
["Sihui"] = { "" },
["Guangning"] = { "" },
["Deqing"] = { "" },
["Huaiji"] = { "" },
["Fengkai"] = { "" },
["Yunfu"] = { "" },
["Xinxing"] = { "" },
["Luoding"] = { "" },
["Yunan"] = { "" },
["Yangjiang"] = { "" },
["Yangdong"] = { "" },
["Yangdong-YS"] = { "" },
["Yangchun"] = { "" },
["Yangxi"] = { "" },
["Xinyi"] = { "" },
["Maoming"] = { "" },
["Maoming-YJ"] = { "" },
["Gaozhou"] = { "" },
["Huazhou"] = { "" },
["Huazhou-CQ"] = { "" },
["Zhanjiang"] = { "" },
["Lianjiang"] = { "" },
["Wuchuan"] = { "" },
["Nanning"] = { "" },
["Nanning-Tanka"] = { "" },
["Wuzhou"] = { "" },
["Cangwu-LB"] = { "" },
["Yulin"] = { "" },
["Rongxian"] = { "" },
["Hepu"] = { "" },
["Hepu-ST"] = { "" },
["Guiping"] = { "" },
["Guiping-JT"] = { "" },
["Guiping-JK"] = { "" },
["Guiping-MD"] = { "" },
["Guiping-ML"] = { "" },
["Pingnan-PN"] = { "" },
["Pingnan-DZ"] = { "" },
["Mengshan"] = { "" },
["Mengshan-XX"] = { "" },
["Mengshan-CT"] = { "" },
["Guigang-GC"] = { "" },
["Guigang-NJ"] = { "" },
["Guigang-PD"] = { "" },
["Beiliu"] = { "" },
["Beiliu-TL"] = { "" },
["Beiliu-XL"] = { "" },
["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"] = { "" },
["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"] = { "" },
["Yilan"] = { "" },
["Luodong"] = { "" },
["Toucheng"] = { "" },
["Lukang"] = { "" },
["Yongjing-MN"] = { "" },
["Taichung"] = { "" },
["Wuqi"] = { "" },
["Tainan"] = { "" },
["Anping"] = { "" },
["Shanhua"] = { "" },
["Taitung"] = { "" },
["Green Island"] = { "" },
["Hsinchu-MN"] = { "" },
["Miaoli-MN"] = { "" },
["Mailiao"] = { "" },
["Chiayi"] = { "" },
["Chiayi-DS"] = { "" },
["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"] = { "" },
["Zhangping"] = { "" },
["Yongfu"] = { "" },
["Datian"] = { "" },
["Datian-GP"] = { "" },
["Youxi-JM"] = { "" },
["Youxi-XQ"] = { "" },
["Shunchang-PS"] = { "" },
["Pingnan"] = { "" },
["Pingnan-PT"] = { "" },
["Pingnan-SJ"] = { "" },
["Guiping-XW"] = { "" },
["Guiping-DS"] = { "" },
["Guilin-MN-BYG"] = { "" },
["Pingle-MN"] = { "" },
["Qinzhou-MN"] = { "" },
["Lechang-TT"] = { "" },
["Renhua-CSB"] = { "" },
["Yingde-YZ"] = { "" },
["Yunan-LT"] = { "" },
["Hangzhou-PF"] = { "" },
["Cangnan-MN"] = { "" },
["Yuhuan-KM"] = { "" },
["Wenling-RS"] = { "" },
["Yixing-SB"] = { "" },
["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"] = { "" },
["Fuzhou"] = { "海亂" },
["Changle"] = { "" },
["Lianjiang-MD"] = { "" },
["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"] = { "" },
["Singapore-MD-FQ"] = { "" },
["Sitiawan-MD-GT"] = { "" },
["Sibu-MD-MQ"] = { "" },
["Jian'ou"] = { "" },
["Dikou"] = { "" },
["Yanping-XY"] = { "" },
["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"] = { "" },
["Guixi-She"] = { "" },
["Yanshan-She"] = { "" },
["Cangnan-She"] = { "" },
["Jingning-She"] = { "" },
["Jingning-ZK-She"] = { "" },
["Lishui-She"] = { "" },
["Longyou-She"] = { "" },
["Lin'an-She"] = { "" },
["Jiande-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"] = { "" },
}
return export
5lrfbjrfcbh69y6ndoce9cihnmdguwy
Module:Anchors
828
2750984
9759357
9612705
2026-05-14T10:25:59Z
TongcyDai
53191
9759357
Scribunto
text/plain
local export = {}
local string_utilities_module = "Module:string utilities"
local anchor_encode = mw.uri.anchorEncode
local concat = table.concat
local insert = table.insert
local language_anchor -- Defined below.
local function decode_entities(...)
decode_entities = require(string_utilities_module).decode_entities
return decode_entities(...)
end
local function encode_entities(...)
encode_entities = require(string_utilities_module).encode_entities
return encode_entities(...)
end
-- Returns the anchor text to be used as the fragment of a link to a language section.
function export.language_anchor(lang, id)
return anchor_encode(lang:getFullName() .. ": " .. id)
end
language_anchor = export.language_anchor
-- Normalizes input text (removes formatting etc.), which can then be used as an anchor in an `id=` field.
function export.normalize_anchor(str)
return decode_entities(anchor_encode(str))
end
function export.make_anchors(ids)
local anchors = {}
for i = 1, #ids do
local id = ids[i]
local el = mw.html.create("span")
:addClass("template-anchor")
:attr("id", anchor_encode(id))
:attr("data-id", id)
insert(anchors, tostring(el))
end
return concat(anchors)
end
function export.senseid(lang, id, tag_name)
-- The following tag is opened but never closed, where is it supposed to be closed?
-- with <li> it doesn't matter, as it is closed automatically.
-- with <p> it is a problem
-- Cannot use mw.html here as it always closes tags
return "<" .. tag_name .. " class=\"senseid\" id=\"" .. language_anchor(lang, id) .. "\" data-lang=\"" .. lang:getCode() .. "\" data-id=\"" .. encode_entities(id) .. "\">"
end
function export.etymid(lang, id)
-- Use a <ul> tag to ensure spacing doesn't get messed up.
local el = mw.html.create("ul")
:addClass("etymid")
:attr("id", language_anchor(lang, id))
:attr("data-lang", lang:getCode())
:attr("data-id", id)
return tostring(el)
end
function export.etymonid(lang, id, opts)
opts = opts or {}
-- Use a <ul> tag to ensure spacing doesn't get messed up.
local el = mw.html.create("ul")
:addClass("etymonid")
:attr("data-lang", lang:getCode())
if id then
el:attr("id", language_anchor(lang, id))
el:attr("data-id", id)
end
if opts.no_tree then
el:attr("data-no-tree", "1")
end
if opts.title then
el:attr("data-title", opts.title)
end
if opts.empty_tree then
el:attr("data-empty-tree", "1")
end
if opts.ety_tree_json then
el:attr("data-ety-tree-json", opts.ety_tree_json)
end
return tostring(el)
end
return export
2o0jqln8y0bxvpfhe66eogs2k88qkap
리스본
0
2847755
9758855
8825785
2026-05-13T17:49:36Z
TongcyDai
53191
9758855
wikitext
text/x-wiki
==朝鮮語==
===發音===
{{ko-IPA|cap=y}}
===專有名詞===
{{ko-pos|proper}}
# {{tcl|ko|里斯本|id=Q597}}
#: {{syn|ko|^리스보아}}
3afpzqw1niw8p92ekwsjrtveoh0p3q2
Module:Place/data/sandbox
828
3034684
9758655
9758121
2026-05-13T15:06:11Z
TongcyDai
53191
9758655
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 = "縣",
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
99n9rtn0e9gepvxm97epdnb4iug5tik
dummymander
0
3427136
9758654
9746193
2026-05-13T14:21:43Z
~2026-28940-29
133353
9758654
wikitext
text/x-wiki
==英语==
===词源===
{{blend|en|dummy|gerrymander}}.
===名词===
{{en-noun}}
# {{lb|en|pejorative}} 一种在[[选举]]中为本党谋利但优势微弱、且可能产生[[反效果]]的杰利蝾螈 ([[gerrymander]]) 选区划分。
===动词===
{{en-verb}}
# 采取上述的杰利蝾螈划分。
5nljwr3tiakluz24nwcb3ie2yt5au0l
Module:Place/locations
828
3437749
9758656
9758644
2026-05-13T15:12:43Z
TongcyDai
53191
// Edit via Wikiplus
9758656
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 = {
"special municipalities",
"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
02w80y5aohriluhpbvv8qj2lu1jsvdq
9758860
9758656
2026-05-13T18:14:59Z
TongcyDai
53191
// Edit via Wikiplus
9758860
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 = "阿爾及利亞"},
["安哥拉"] = {container = "非洲", divs = {"provinces", "municipalities"}, wp = "安哥拉"},
["貝寧"] = {container = "非洲", wp = "貝寧"},
["貝南"] = {alias_of = "貝寧"},
["博茨瓦納"] = {container = "非洲", wp = "博茨瓦納"},
["波札那"] = {alias_of = "博茨瓦納"},
["布基納法索"] = {container = "非洲", wp = "布基納法索"},
["布吉納法索"] = {alias_of = "布基納法索"},
["布隆迪"] = {container = "非洲", wp = "布隆迪"},
["蒲隆地"] = {alias_of = "布隆迪"},
["佛得角"] = {container = "非洲", wp = "佛得角"},
["維德角"] = {alias_of = "佛得角"},
["中非共和國"] = {container = "非洲", wp = "中非共和國"},
["乍得"] = {container = "非洲", wp = "乍得"},
["查德"] = {alias_of = "乍得"},
["科摩羅"] = {container = "非洲", wp = "科摩羅"},
["葛摩"] = {alias_of = "科摩羅"},
["剛果共和國"] = {container = "非洲", wp = "剛果共和國"},
["剛果(布)"] = {alias_of = "剛果共和國"},
["剛果民主共和國"] = {container = "非洲", divs = {"provinces"}, wp = "剛果民主共和國"},
["剛果(金)"] = {alias_of = "剛果民主共和國"},
["吉布提"] = {container = "非洲", wp = "吉布提"},
["吉布地"] = {alias_of = "吉布提"},
["埃及"] = {container = "非洲", divs = {"governorates"}, wp = "埃及"},
["赤道幾內亞"] = {container = "非洲", wp = "赤道幾內亞"},
["厄立特里亞"] = {container = "非洲", wp = "厄立特里亞"},
["厄利垂亞"] = {alias_of = "厄立特里亞"},
["斯威士蘭"] = {container = "非洲", wp = "斯威士蘭"},
["史瓦帝尼"] = {alias_of = "斯威士蘭"},
["埃塞俄比亞"] = {container = "非洲", divs = {"regions"}, wp = "埃塞俄比亞"},
["衣索比亞"] = {alias_of = "埃塞俄比亞"},
["加蓬"] = {container = "非洲", wp = "加蓬"},
["加彭"] = {alias_of = "加蓬"},
["岡比亞"] = {container = "非洲", wp = "岡比亞"},
["甘比亞"] = {alias_of = "岡比亞"},
["加納"] = {container = "非洲", wp = "加納"},
["迦納"] = {alias_of = "加納"},
["幾內亞"] = {container = "非洲", wp = "幾內亞"},
["幾內亞比紹"] = {container = "非洲", wp = "幾內亞比紹"},
["幾內亞比索"] = {alias_of = "幾內亞比紹"},
["科特迪瓦"] = {container = "非洲", wp = "科特迪瓦"},
["象牙海岸"] = {alias_of = "科特迪瓦"},
["肯尼亞"] = {container = "非洲", divs = {"counties"}, wp = "肯尼亞"},
["肯亞"] = {alias_of = "肯尼亞"},
["萊索托"] = {container = "非洲", wp = "萊索托"},
["賴索托"] = {alias_of = "萊索托"},
["利比里亞"] = {container = "非洲", wp = "利比里亞"},
["賴比瑞亞"] = {alias_of = "利比里亞"},
["利比亞"] = {container = "非洲", wp = "利比亞"},
["馬達加斯加"] = {container = "非洲", wp = "馬達加斯加"},
["馬拉維"] = {container = "非洲", wp = "馬拉維"},
["馬拉威"] = {alias_of = "馬拉維"},
["馬里"] = {container = "非洲", wp = "馬里"},
["馬利"] = {alias_of = "馬里"},
["毛里塔尼亞"] = {container = "非洲", wp = "毛里塔尼亞"},
["茅利塔尼亞"] = {alias_of = "毛里塔尼亞"},
["毛里求斯"] = {container = "非洲", wp = "毛里求斯"},
["模里西斯"] = {alias_of = "毛里求斯"},
["摩洛哥"] = {container = "非洲", wp = "摩洛哥"},
["莫桑比克"] = {container = "非洲", wp = "莫桑比克"},
["莫三比克"] = {alias_of = "莫桑比克"},
["納米比亞"] = {container = "非洲", wp = "納米比亞"},
["尼日爾"] = {container = "非洲", wp = "尼日爾"},
["尼日"] = {alias_of = "尼日爾"},
["尼日利亞"] = {container = "非洲", divs = {
{type = "states", cat_as = "states and FCT"},
"local government areas",
}, wp = "尼日利亞"},
["奈及利亞"] = {alias_of = "尼日利亞"},
["盧旺達"] = {container = "非洲", wp = "盧旺達"},
["盧安達"] = {alias_of = "盧旺達"},
["聖多美和普林西比"] = {container = "非洲", wp = "聖多美和普林西比"},
["塞內加爾"] = {container = "非洲", wp = "塞內加爾"},
["塞舌爾"] = {container = "非洲", wp = "塞舌爾"},
["塞席爾"] = {alias_of = "塞舌爾"},
["塞拉利昂"] = {container = "非洲", wp = "塞拉利昂"},
["獅子山"] = {alias_of = "塞拉利昂"},
["索馬里"] = {container = "非洲", wp = "索馬里"},
["索馬利亞"] = {alias_of = "索馬里"},
["南非"] = {container = "非洲", divs = {"provinces"}, wp = "南非"},
["南蘇丹"] = {container = "非洲", wp = "南蘇丹"},
["蘇丹"] = {container = "非洲", wp = "蘇丹"},
["坦桑尼亞"] = {container = "非洲", wp = "坦桑尼亞"},
["坦尚尼亞"] = {alias_of = "坦桑尼亞"},
["多哥"] = {container = "非洲", wp = "多哥"},
["突尼斯"] = {container = "非洲", wp = "突尼斯"},
["突尼西亞"] = {alias_of = "突尼斯"},
["烏干達"] = {container = "非洲", wp = "烏干達"},
["贊比亞"] = {container = "非洲", wp = "贊比亞"},
["尚比亞"] = {alias_of = "贊比亞"},
["津巴布韋"] = {container = "非洲", wp = "津巴布韋"},
["辛巴威"] = {alias_of = "津巴布韋"},
-- Asia
["阿富汗"] = {container = "亞洲", wp = "阿富汗"},
["亞美尼亞"] = {container = {"歐洲", "亞洲"}, wp = "亞美尼亞"},
["阿塞拜疆"] = {container = {"歐洲", "亞洲"}, wp = "阿塞拜疆"},
["亞塞拜然"] = {alias_of = "阿塞拜疆"},
["巴林"] = {container = "亞洲", wp = "巴林"},
["孟加拉國"] = {container = "亞洲", divs = {"divisions", "districts"}, wp = "孟加拉國"},
["孟加拉"] = {alias_of = "孟加拉國"},
["不丹"] = {container = "亞洲", wp = "不丹"},
["文萊"] = {container = "亞洲", wp = "文萊"},
["汶萊"] = {alias_of = "文萊"},
["柬埔寨"] = {container = "亞洲", wp = "柬埔寨"},
["中國"] = {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 = "中國"},
["東帝汶"] = {container = "亞洲", wp = "東帝汶"},
["帝汶島"] = {alias_of = "東帝汶"},
["印度"] = {container = "亞洲", divs = {
{type = "states", cat_as = "states and union territories"},
{type = "union territories", cat_as = "states and union territories"},
}, wp = "印度"},
["印度尼西亞"] = {container = "亞洲", divs = {"provinces"}, wp = "印度尼西亞"},
["印尼"] = {alias_of = "印度尼西亞"},
["伊朗"] = {container = "亞洲", wp = "伊朗"},
["伊拉克"] = {container = "亞洲", wp = "伊拉克"},
["以色列"] = {container = "亞洲", wp = "以色列"},
["日本"] = {container = "亞洲", divs = {"prefectures"}, wp = "日本"},
["約旦"] = {container = "亞洲", wp = "約旦"},
["哈薩克斯坦"] = {container = {"歐洲", "亞洲"}, wp = "哈薩克斯坦"},
["哈薩克"] = {alias_of = "哈薩克斯坦"},
["朝鮮"] = {container = "亞洲", wp = "朝鮮民主主義人民共和國"},
["北韓"] = {alias_of = "朝鮮"},
["韓國"] = {container = "亞洲", divs = {"provinces", "special cities", "metropolitan cities"}, wp = "韓國"},
["南韓"] = {alias_of = "韓國"},
["科威特"] = {container = "亞洲", wp = "科威特"},
["吉爾吉斯斯坦"] = {container = "亞洲", wp = "吉爾吉斯斯坦"},
["吉爾吉斯"] = {alias_of = "吉爾吉斯斯坦"},
["老撾"] = {container = "亞洲", wp = "老撾"},
["寮國"] = {alias_of = "老撾"},
["黎巴嫩"] = {container = "亞洲", wp = "黎巴嫩"},
["馬來西亞"] = {container = "亞洲", divs = {"states"}, wp = "馬來西亞"},
["馬爾代夫"] = {container = "亞洲", wp = "馬爾代夫"},
["馬爾地夫"] = {alias_of = "馬爾代夫"},
["蒙古"] = {container = "亞洲", wp = "蒙古"},
["緬甸"] = {container = "亞洲", wp = "緬甸"},
["尼泊爾"] = {container = "亞洲", wp = "尼泊爾"},
["阿曼"] = {container = "亞洲", wp = "阿曼"},
["巴基斯坦"] = {container = "亞洲", divs = {"provinces"}, wp = "巴基斯坦"},
["菲律賓"] = {container = "亞洲", divs = {"regions"}, wp = "菲律賓"},
["卡塔爾"] = {container = "亞洲", wp = "卡塔爾"},
["卡達"] = {alias_of = "卡塔爾"},
["俄羅斯"] = {container = {"歐洲", "亞洲"}, divs = {"federal subjects"}, wp = "俄羅斯"},
["俄國"] = {alias_of = "俄羅斯"},
["沙特阿拉伯"] = {container = "亞洲", wp = "沙特阿拉伯"},
["沙烏地阿拉伯"] = {alias_of = "沙特阿拉伯"},
["新加坡"] = {container = "亞洲", is_city = true, wp = "新加坡"},
["斯里蘭卡"] = {container = "亞洲", wp = "斯里蘭卡"},
["敘利亞"] = {container = "亞洲", wp = "敘利亞"},
["臺灣"] = {container = "亞洲", divs = {
"special municipalities",
"counties",
}, wp = "臺灣"},
["台灣"] = {alias_of = "臺灣"},
["塔吉克斯坦"] = {container = "亞洲", wp = "塔吉克斯坦"},
["塔吉克"] = {alias_of = "塔吉克斯坦"},
["泰國"] = {container = "亞洲", divs = {"provinces"}, wp = "泰國"},
["土耳其"] = {container = {"歐洲", "亞洲"}, wp = "土耳其"},
["土庫曼斯坦"] = {container = "亞洲", wp = "土庫曼斯坦"},
["土庫曼"] = {alias_of = "土庫曼斯坦"},
["阿拉伯聯合酋長國"] = {container = "亞洲", wp = "阿拉伯聯合酋長國"},
["阿拉伯聯合大公國"] = {alias_of = "阿拉伯聯合酋長國"},
["阿聯酋"] = {alias_of = "阿拉伯聯合酋長國"},
["烏茲別克斯坦"] = {container = "亞洲", wp = "烏茲別克斯坦"},
["烏茲別克"] = {alias_of = "烏茲別克斯坦"},
["越南"] = {container = "亞洲", divs = {"provinces", "municipalities"}, wp = "越南"},
["也門"] = {container = "亞洲", wp = "也門"},
["葉門"] = {alias_of = "也門"},
-- Europe
["阿爾巴尼亞"] = {container = "歐洲", wp = "阿爾巴尼亞"},
["安道爾"] = {container = "歐洲", wp = "安道爾"},
["奧地利"] = {container = "歐洲", divs = {"states"}, wp = "奧地利"},
["白俄羅斯"] = {container = "歐洲", divs = {"regions"}, wp = "白俄羅斯"},
["比利時"] = {container = "歐洲", divs = {"regions", "provinces"}, wp = "比利時"},
["波斯尼亞和黑塞哥維那"] = {container = "歐洲", wp = "波斯尼亞和黑塞哥維那"},
["波士尼亞與赫塞哥維納"] = {alias_of = "波斯尼亞和黑塞哥維那"},
["保加利亞"] = {container = "歐洲", wp = "保加利亞"},
["克羅地亞"] = {container = "歐洲", wp = "克羅地亞"},
["克羅埃西亞"] = {alias_of = "克羅地亞"},
["塞浦路斯"] = {container = "亞洲", addl_parents = {"歐洲"}, wp = "塞浦路斯"},
["賽普勒斯"] = {alias_of = "塞浦路斯"},
["捷克"] = {container = "歐洲", wp = "捷克"},
["丹麥"] = {container = "歐洲", wp = "丹麥"},
["愛沙尼亞"] = {container = "歐洲", wp = "愛沙尼亞"},
["芬蘭"] = {container = "歐洲", divs = {"regions"}, wp = "芬蘭"},
["法國"] = {container = "歐洲", divs = {
{type = "regions", cat_as = "metropolitan regions"},
"departments",
"communes",
}, wp = "法國"},
["格魯吉亞"] = {container = {"歐洲", "亞洲"}, wp = "格魯吉亞"},
["喬治亞"] = {alias_of = "格魯吉亞"},
["德國"] = {container = "歐洲", divs = {"states"}, wp = "德國"},
["希臘"] = {container = "歐洲", divs = {"regions"}, wp = "希臘"},
["匈牙利"] = {container = "歐洲", wp = "匈牙利"},
["冰島"] = {container = "歐洲", wp = "冰島"},
["愛爾蘭"] = {container = "歐洲", divs = {"provinces", "counties"}, wp = "愛爾蘭"},
["意大利"] = {container = "歐洲", divs = {"regions"}, wp = "意大利"},
["義大利"] = {alias_of = "意大利"},
["科索沃"] = {container = "歐洲", wp = "科索沃"},
["拉脫維亞"] = {container = "歐洲", wp = "拉脫維亞"},
["拉托維亞"] = {alias_of = "拉脫維亞"},
["列支敦士登"] = {container = "歐洲", wp = "列支敦士登"},
["列支敦斯登"] = {alias_of = "列支敦士登"},
["立陶宛"] = {container = "歐洲", wp = "立陶宛"},
["盧森堡"] = {container = "歐洲", wp = "盧森堡"},
["北馬其頓"] = {container = "歐洲", wp = "北馬其頓"},
["馬耳他"] = {container = "歐洲", wp = "馬耳他"},
["馬爾他"] = {alias_of = "馬耳他"},
["摩爾多瓦"] = {container = "歐洲", wp = "摩爾多瓦"},
["摩納哥"] = {container = "歐洲", is_city = true, wp = "摩納哥"},
["黑山"] = {container = "歐洲", wp = "黑山"},
["蒙特內哥羅"] = {alias_of = "黑山"},
["荷蘭"] = {container = "歐洲", divs = {"provinces"}, wp = "荷蘭"},
["尼德蘭"] = {alias_of = "荷蘭"},
["挪威"] = {container = "歐洲", wp = "挪威"},
["波蘭"] = {container = "歐洲", divs = {"voivodeships"}, wp = "波蘭"},
["葡萄牙"] = {container = "歐洲", divs = {"districts"}, wp = "葡萄牙"},
["羅馬尼亞"] = {container = "歐洲", wp = "羅馬尼亞"},
["聖馬力諾"] = {container = "歐洲", wp = "聖馬力諾"},
["聖馬利諾"] = {alias_of = "聖馬力諾"},
["塞爾維亞"] = {container = "歐洲", wp = "塞爾維亞"},
["斯洛伐克"] = {container = "歐洲", wp = "斯洛伐克"},
["斯洛文尼亞"] = {container = "歐洲", wp = "斯洛文尼亞"},
["斯洛維尼亞"] = {alias_of = "斯洛文尼亞"},
["西班牙"] = {container = "歐洲", divs = {"autonomous communities"}, wp = "西班牙"},
["瑞典"] = {container = "歐洲", wp = "瑞典"},
["瑞士"] = {container = "歐洲", divs = {"cantons"}, wp = "瑞士"},
["烏克蘭"] = {container = "歐洲", divs = {"oblasts"}, wp = "烏克蘭"},
["英國"] = {container = "歐洲", divs = {
{type = "constituent countries", cat_as = "constituent countries"},
}, wp = "英國"},
-- North America
["加拿大"] = {container = "北美洲", divs = {
{type = "provinces", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
}, wp = "加拿大"},
["墨西哥"] = {container = "北美洲", divs = {"states"}, wp = "墨西哥"},
["美國"] = {container = "北美洲", divs = {"states"}, wp = "美國"},
-- Central America
["伯利茲"] = {container = "中美洲", wp = "伯利茲"},
["貝里斯"] = {alias_of = "伯利茲"},
["哥斯達黎加"] = {container = "中美洲", wp = "哥斯達黎加"},
["哥斯大黎加"] = {alias_of = "哥斯達黎加"},
["薩爾瓦多"] = {container = "中美洲", wp = "薩爾瓦多"},
["危地馬拉"] = {container = "中美洲", wp = "危地馬拉"},
["瓜地馬拉"] = {alias_of = "危地馬拉"},
["洪都拉斯"] = {container = "中美洲", wp = "洪都拉斯"},
["宏都拉斯"] = {alias_of = "洪都拉斯"},
["尼加拉瓜"] = {container = "中美洲", wp = "尼加拉瓜"},
["巴拿馬"] = {container = "中美洲", wp = "巴拿馬"},
-- Caribbean
["安提瓜和巴布達"] = {container = "加勒比地區", wp = "安提瓜和巴布達"},
["安地卡及巴布達"] = {alias_of = "安提瓜和巴布達"},
["巴哈馬"] = {container = "加勒比地區", wp = "巴哈馬"},
["巴巴多斯"] = {container = "加勒比地區", wp = "巴巴多斯"},
["巴貝多"] = {alias_of = "巴巴多斯"},
["古巴"] = {container = "加勒比地區", wp = "古巴"},
["多米尼克"] = {container = "加勒比地區", wp = "多米尼克"},
["多米尼加共和國"] = {container = "加勒比地區", wp = "多米尼加"},
["多明尼加共和國"] = {alias_of = "多米尼加共和國"},
["格林納達"] = {container = "加勒比地區", wp = "格林納達"},
["格瑞那達"] = {alias_of = "格林納達"},
["海地"] = {container = "加勒比地區", wp = "海地"},
["牙買加"] = {container = "加勒比地區", wp = "牙買加"},
["聖基茨和尼維斯"] = {container = "加勒比地區", wp = "聖基茨和尼維斯"},
["聖克里斯多福及尼維斯"] = {alias_of = "聖基茨和尼維斯"},
["聖盧西亞"] = {container = "加勒比地區", wp = "聖盧西亞"},
["聖露西亞"] = {alias_of = "聖盧西亞"},
["聖文森特和格林納丁斯"] = {container = "加勒比地區", wp = "聖文森特和格林納丁斯"},
["聖文森及格瑞那丁"] = {alias_of = "聖文森特和格林納丁斯"},
["特立尼達和多巴哥"] = {container = "加勒比地區", wp = "特立尼達和多巴哥"},
["千里達及托巴哥"] = {alias_of = "特立尼達和多巴哥"},
-- South America
["阿根廷"] = {container = "南美洲", divs = {"provinces"}, wp = "阿根廷"},
["玻利維亞"] = {container = "南美洲", wp = "玻利維亞"},
["巴西"] = {container = "南美洲", divs = {"states"}, wp = "巴西"},
["智利"] = {container = "南美洲", wp = "智利"},
["哥倫比亞"] = {container = "南美洲", wp = "哥倫比亞"},
["厄瓜多爾"] = {container = "南美洲", wp = "厄瓜多爾"},
["厄瓜多"] = {alias_of = "厄瓜多爾"},
["圭亞那"] = {container = "南美洲", wp = "圭亞那"},
["蓋亞那"] = {alias_of = "圭亞那"},
["巴拉圭"] = {container = "南美洲", wp = "巴拉圭"},
["秘魯"] = {container = "南美洲", wp = "秘魯"},
["蘇里南"] = {container = "南美洲", wp = "蘇里南"},
["蘇利南"] = {alias_of = "蘇里南"},
["烏拉圭"] = {container = "南美洲", wp = "烏拉圭"},
["委內瑞拉"] = {container = "南美洲", wp = "委內瑞拉"},
-- Oceania
["澳大利亞"] = {container = "大洋洲", divs = {
{type = "states", cat_as = "states and territories"},
{type = "territories", cat_as = "states and territories"},
}, wp = "澳大利亞"},
["澳洲"] = {alias_of = "澳大利亞"},
["斐濟"] = {container = "大洋洲", wp = "斐濟"},
["基里巴斯"] = {container = "大洋洲", wp = "基里巴斯"},
["吉里巴斯"] = {alias_of = "基里巴斯"},
["馬紹爾群島"] = {container = "大洋洲", wp = "馬紹爾群島"},
["密克羅尼西亞聯邦"] = {container = "大洋洲", wp = "密克羅尼西亞聯邦"},
["瑙魯"] = {container = "大洋洲", wp = "瑙魯"},
["諾魯"] = {alias_of = "瑙魯"},
["新西蘭"] = {container = "大洋洲", wp = "新西蘭"},
["紐西蘭"] = {alias_of = "新西蘭"},
["帕勞"] = {container = "大洋洲", wp = "帕勞"},
["帛琉"] = {alias_of = "帕勞"},
["巴布亞新幾內亞"] = {container = "大洋洲", wp = "巴布亞新幾內亞"},
["巴布亞紐幾內亞"] = {alias_of = "巴布亞新幾內亞"},
["薩摩亞"] = {container = "大洋洲", wp = "薩摩亞"},
["所羅門群島"] = {container = "大洋洲", wp = "所羅門群島"},
["湯加"] = {container = "大洋洲", wp = "湯加"},
["東加"] = {alias_of = "湯加"},
["圖瓦盧"] = {container = "大洋洲", wp = "圖瓦盧"},
["吐瓦魯"] = {alias_of = "圖瓦盧"},
["瓦努阿圖"] = {container = "大洋洲", wp = "瓦努阿圖"},
["萬那杜"] = {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
jxzz8l9ya8lxb2b83j2sh3029y03bej
9758867
9758860
2026-05-13T20:13:56Z
Xiplus
25402
已保护“[[Module:Place/locations]]”:高風險模板:9557引用([编辑权限=仅允许自动确认用户](无限期)[移动权限=仅允许自动确认用户](无限期))
9758860
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 = "阿爾及利亞"},
["安哥拉"] = {container = "非洲", divs = {"provinces", "municipalities"}, wp = "安哥拉"},
["貝寧"] = {container = "非洲", wp = "貝寧"},
["貝南"] = {alias_of = "貝寧"},
["博茨瓦納"] = {container = "非洲", wp = "博茨瓦納"},
["波札那"] = {alias_of = "博茨瓦納"},
["布基納法索"] = {container = "非洲", wp = "布基納法索"},
["布吉納法索"] = {alias_of = "布基納法索"},
["布隆迪"] = {container = "非洲", wp = "布隆迪"},
["蒲隆地"] = {alias_of = "布隆迪"},
["佛得角"] = {container = "非洲", wp = "佛得角"},
["維德角"] = {alias_of = "佛得角"},
["中非共和國"] = {container = "非洲", wp = "中非共和國"},
["乍得"] = {container = "非洲", wp = "乍得"},
["查德"] = {alias_of = "乍得"},
["科摩羅"] = {container = "非洲", wp = "科摩羅"},
["葛摩"] = {alias_of = "科摩羅"},
["剛果共和國"] = {container = "非洲", wp = "剛果共和國"},
["剛果(布)"] = {alias_of = "剛果共和國"},
["剛果民主共和國"] = {container = "非洲", divs = {"provinces"}, wp = "剛果民主共和國"},
["剛果(金)"] = {alias_of = "剛果民主共和國"},
["吉布提"] = {container = "非洲", wp = "吉布提"},
["吉布地"] = {alias_of = "吉布提"},
["埃及"] = {container = "非洲", divs = {"governorates"}, wp = "埃及"},
["赤道幾內亞"] = {container = "非洲", wp = "赤道幾內亞"},
["厄立特里亞"] = {container = "非洲", wp = "厄立特里亞"},
["厄利垂亞"] = {alias_of = "厄立特里亞"},
["斯威士蘭"] = {container = "非洲", wp = "斯威士蘭"},
["史瓦帝尼"] = {alias_of = "斯威士蘭"},
["埃塞俄比亞"] = {container = "非洲", divs = {"regions"}, wp = "埃塞俄比亞"},
["衣索比亞"] = {alias_of = "埃塞俄比亞"},
["加蓬"] = {container = "非洲", wp = "加蓬"},
["加彭"] = {alias_of = "加蓬"},
["岡比亞"] = {container = "非洲", wp = "岡比亞"},
["甘比亞"] = {alias_of = "岡比亞"},
["加納"] = {container = "非洲", wp = "加納"},
["迦納"] = {alias_of = "加納"},
["幾內亞"] = {container = "非洲", wp = "幾內亞"},
["幾內亞比紹"] = {container = "非洲", wp = "幾內亞比紹"},
["幾內亞比索"] = {alias_of = "幾內亞比紹"},
["科特迪瓦"] = {container = "非洲", wp = "科特迪瓦"},
["象牙海岸"] = {alias_of = "科特迪瓦"},
["肯尼亞"] = {container = "非洲", divs = {"counties"}, wp = "肯尼亞"},
["肯亞"] = {alias_of = "肯尼亞"},
["萊索托"] = {container = "非洲", wp = "萊索托"},
["賴索托"] = {alias_of = "萊索托"},
["利比里亞"] = {container = "非洲", wp = "利比里亞"},
["賴比瑞亞"] = {alias_of = "利比里亞"},
["利比亞"] = {container = "非洲", wp = "利比亞"},
["馬達加斯加"] = {container = "非洲", wp = "馬達加斯加"},
["馬拉維"] = {container = "非洲", wp = "馬拉維"},
["馬拉威"] = {alias_of = "馬拉維"},
["馬里"] = {container = "非洲", wp = "馬里"},
["馬利"] = {alias_of = "馬里"},
["毛里塔尼亞"] = {container = "非洲", wp = "毛里塔尼亞"},
["茅利塔尼亞"] = {alias_of = "毛里塔尼亞"},
["毛里求斯"] = {container = "非洲", wp = "毛里求斯"},
["模里西斯"] = {alias_of = "毛里求斯"},
["摩洛哥"] = {container = "非洲", wp = "摩洛哥"},
["莫桑比克"] = {container = "非洲", wp = "莫桑比克"},
["莫三比克"] = {alias_of = "莫桑比克"},
["納米比亞"] = {container = "非洲", wp = "納米比亞"},
["尼日爾"] = {container = "非洲", wp = "尼日爾"},
["尼日"] = {alias_of = "尼日爾"},
["尼日利亞"] = {container = "非洲", divs = {
{type = "states", cat_as = "states and FCT"},
"local government areas",
}, wp = "尼日利亞"},
["奈及利亞"] = {alias_of = "尼日利亞"},
["盧旺達"] = {container = "非洲", wp = "盧旺達"},
["盧安達"] = {alias_of = "盧旺達"},
["聖多美和普林西比"] = {container = "非洲", wp = "聖多美和普林西比"},
["塞內加爾"] = {container = "非洲", wp = "塞內加爾"},
["塞舌爾"] = {container = "非洲", wp = "塞舌爾"},
["塞席爾"] = {alias_of = "塞舌爾"},
["塞拉利昂"] = {container = "非洲", wp = "塞拉利昂"},
["獅子山"] = {alias_of = "塞拉利昂"},
["索馬里"] = {container = "非洲", wp = "索馬里"},
["索馬利亞"] = {alias_of = "索馬里"},
["南非"] = {container = "非洲", divs = {"provinces"}, wp = "南非"},
["南蘇丹"] = {container = "非洲", wp = "南蘇丹"},
["蘇丹"] = {container = "非洲", wp = "蘇丹"},
["坦桑尼亞"] = {container = "非洲", wp = "坦桑尼亞"},
["坦尚尼亞"] = {alias_of = "坦桑尼亞"},
["多哥"] = {container = "非洲", wp = "多哥"},
["突尼斯"] = {container = "非洲", wp = "突尼斯"},
["突尼西亞"] = {alias_of = "突尼斯"},
["烏干達"] = {container = "非洲", wp = "烏干達"},
["贊比亞"] = {container = "非洲", wp = "贊比亞"},
["尚比亞"] = {alias_of = "贊比亞"},
["津巴布韋"] = {container = "非洲", wp = "津巴布韋"},
["辛巴威"] = {alias_of = "津巴布韋"},
-- Asia
["阿富汗"] = {container = "亞洲", wp = "阿富汗"},
["亞美尼亞"] = {container = {"歐洲", "亞洲"}, wp = "亞美尼亞"},
["阿塞拜疆"] = {container = {"歐洲", "亞洲"}, wp = "阿塞拜疆"},
["亞塞拜然"] = {alias_of = "阿塞拜疆"},
["巴林"] = {container = "亞洲", wp = "巴林"},
["孟加拉國"] = {container = "亞洲", divs = {"divisions", "districts"}, wp = "孟加拉國"},
["孟加拉"] = {alias_of = "孟加拉國"},
["不丹"] = {container = "亞洲", wp = "不丹"},
["文萊"] = {container = "亞洲", wp = "文萊"},
["汶萊"] = {alias_of = "文萊"},
["柬埔寨"] = {container = "亞洲", wp = "柬埔寨"},
["中國"] = {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 = "中國"},
["東帝汶"] = {container = "亞洲", wp = "東帝汶"},
["帝汶島"] = {alias_of = "東帝汶"},
["印度"] = {container = "亞洲", divs = {
{type = "states", cat_as = "states and union territories"},
{type = "union territories", cat_as = "states and union territories"},
}, wp = "印度"},
["印度尼西亞"] = {container = "亞洲", divs = {"provinces"}, wp = "印度尼西亞"},
["印尼"] = {alias_of = "印度尼西亞"},
["伊朗"] = {container = "亞洲", wp = "伊朗"},
["伊拉克"] = {container = "亞洲", wp = "伊拉克"},
["以色列"] = {container = "亞洲", wp = "以色列"},
["日本"] = {container = "亞洲", divs = {"prefectures"}, wp = "日本"},
["約旦"] = {container = "亞洲", wp = "約旦"},
["哈薩克斯坦"] = {container = {"歐洲", "亞洲"}, wp = "哈薩克斯坦"},
["哈薩克"] = {alias_of = "哈薩克斯坦"},
["朝鮮"] = {container = "亞洲", wp = "朝鮮民主主義人民共和國"},
["北韓"] = {alias_of = "朝鮮"},
["韓國"] = {container = "亞洲", divs = {"provinces", "special cities", "metropolitan cities"}, wp = "韓國"},
["南韓"] = {alias_of = "韓國"},
["科威特"] = {container = "亞洲", wp = "科威特"},
["吉爾吉斯斯坦"] = {container = "亞洲", wp = "吉爾吉斯斯坦"},
["吉爾吉斯"] = {alias_of = "吉爾吉斯斯坦"},
["老撾"] = {container = "亞洲", wp = "老撾"},
["寮國"] = {alias_of = "老撾"},
["黎巴嫩"] = {container = "亞洲", wp = "黎巴嫩"},
["馬來西亞"] = {container = "亞洲", divs = {"states"}, wp = "馬來西亞"},
["馬爾代夫"] = {container = "亞洲", wp = "馬爾代夫"},
["馬爾地夫"] = {alias_of = "馬爾代夫"},
["蒙古"] = {container = "亞洲", wp = "蒙古"},
["緬甸"] = {container = "亞洲", wp = "緬甸"},
["尼泊爾"] = {container = "亞洲", wp = "尼泊爾"},
["阿曼"] = {container = "亞洲", wp = "阿曼"},
["巴基斯坦"] = {container = "亞洲", divs = {"provinces"}, wp = "巴基斯坦"},
["菲律賓"] = {container = "亞洲", divs = {"regions"}, wp = "菲律賓"},
["卡塔爾"] = {container = "亞洲", wp = "卡塔爾"},
["卡達"] = {alias_of = "卡塔爾"},
["俄羅斯"] = {container = {"歐洲", "亞洲"}, divs = {"federal subjects"}, wp = "俄羅斯"},
["俄國"] = {alias_of = "俄羅斯"},
["沙特阿拉伯"] = {container = "亞洲", wp = "沙特阿拉伯"},
["沙烏地阿拉伯"] = {alias_of = "沙特阿拉伯"},
["新加坡"] = {container = "亞洲", is_city = true, wp = "新加坡"},
["斯里蘭卡"] = {container = "亞洲", wp = "斯里蘭卡"},
["敘利亞"] = {container = "亞洲", wp = "敘利亞"},
["臺灣"] = {container = "亞洲", divs = {
"special municipalities",
"counties",
}, wp = "臺灣"},
["台灣"] = {alias_of = "臺灣"},
["塔吉克斯坦"] = {container = "亞洲", wp = "塔吉克斯坦"},
["塔吉克"] = {alias_of = "塔吉克斯坦"},
["泰國"] = {container = "亞洲", divs = {"provinces"}, wp = "泰國"},
["土耳其"] = {container = {"歐洲", "亞洲"}, wp = "土耳其"},
["土庫曼斯坦"] = {container = "亞洲", wp = "土庫曼斯坦"},
["土庫曼"] = {alias_of = "土庫曼斯坦"},
["阿拉伯聯合酋長國"] = {container = "亞洲", wp = "阿拉伯聯合酋長國"},
["阿拉伯聯合大公國"] = {alias_of = "阿拉伯聯合酋長國"},
["阿聯酋"] = {alias_of = "阿拉伯聯合酋長國"},
["烏茲別克斯坦"] = {container = "亞洲", wp = "烏茲別克斯坦"},
["烏茲別克"] = {alias_of = "烏茲別克斯坦"},
["越南"] = {container = "亞洲", divs = {"provinces", "municipalities"}, wp = "越南"},
["也門"] = {container = "亞洲", wp = "也門"},
["葉門"] = {alias_of = "也門"},
-- Europe
["阿爾巴尼亞"] = {container = "歐洲", wp = "阿爾巴尼亞"},
["安道爾"] = {container = "歐洲", wp = "安道爾"},
["奧地利"] = {container = "歐洲", divs = {"states"}, wp = "奧地利"},
["白俄羅斯"] = {container = "歐洲", divs = {"regions"}, wp = "白俄羅斯"},
["比利時"] = {container = "歐洲", divs = {"regions", "provinces"}, wp = "比利時"},
["波斯尼亞和黑塞哥維那"] = {container = "歐洲", wp = "波斯尼亞和黑塞哥維那"},
["波士尼亞與赫塞哥維納"] = {alias_of = "波斯尼亞和黑塞哥維那"},
["保加利亞"] = {container = "歐洲", wp = "保加利亞"},
["克羅地亞"] = {container = "歐洲", wp = "克羅地亞"},
["克羅埃西亞"] = {alias_of = "克羅地亞"},
["塞浦路斯"] = {container = "亞洲", addl_parents = {"歐洲"}, wp = "塞浦路斯"},
["賽普勒斯"] = {alias_of = "塞浦路斯"},
["捷克"] = {container = "歐洲", wp = "捷克"},
["丹麥"] = {container = "歐洲", wp = "丹麥"},
["愛沙尼亞"] = {container = "歐洲", wp = "愛沙尼亞"},
["芬蘭"] = {container = "歐洲", divs = {"regions"}, wp = "芬蘭"},
["法國"] = {container = "歐洲", divs = {
{type = "regions", cat_as = "metropolitan regions"},
"departments",
"communes",
}, wp = "法國"},
["格魯吉亞"] = {container = {"歐洲", "亞洲"}, wp = "格魯吉亞"},
["喬治亞"] = {alias_of = "格魯吉亞"},
["德國"] = {container = "歐洲", divs = {"states"}, wp = "德國"},
["希臘"] = {container = "歐洲", divs = {"regions"}, wp = "希臘"},
["匈牙利"] = {container = "歐洲", wp = "匈牙利"},
["冰島"] = {container = "歐洲", wp = "冰島"},
["愛爾蘭"] = {container = "歐洲", divs = {"provinces", "counties"}, wp = "愛爾蘭"},
["意大利"] = {container = "歐洲", divs = {"regions"}, wp = "意大利"},
["義大利"] = {alias_of = "意大利"},
["科索沃"] = {container = "歐洲", wp = "科索沃"},
["拉脫維亞"] = {container = "歐洲", wp = "拉脫維亞"},
["拉托維亞"] = {alias_of = "拉脫維亞"},
["列支敦士登"] = {container = "歐洲", wp = "列支敦士登"},
["列支敦斯登"] = {alias_of = "列支敦士登"},
["立陶宛"] = {container = "歐洲", wp = "立陶宛"},
["盧森堡"] = {container = "歐洲", wp = "盧森堡"},
["北馬其頓"] = {container = "歐洲", wp = "北馬其頓"},
["馬耳他"] = {container = "歐洲", wp = "馬耳他"},
["馬爾他"] = {alias_of = "馬耳他"},
["摩爾多瓦"] = {container = "歐洲", wp = "摩爾多瓦"},
["摩納哥"] = {container = "歐洲", is_city = true, wp = "摩納哥"},
["黑山"] = {container = "歐洲", wp = "黑山"},
["蒙特內哥羅"] = {alias_of = "黑山"},
["荷蘭"] = {container = "歐洲", divs = {"provinces"}, wp = "荷蘭"},
["尼德蘭"] = {alias_of = "荷蘭"},
["挪威"] = {container = "歐洲", wp = "挪威"},
["波蘭"] = {container = "歐洲", divs = {"voivodeships"}, wp = "波蘭"},
["葡萄牙"] = {container = "歐洲", divs = {"districts"}, wp = "葡萄牙"},
["羅馬尼亞"] = {container = "歐洲", wp = "羅馬尼亞"},
["聖馬力諾"] = {container = "歐洲", wp = "聖馬力諾"},
["聖馬利諾"] = {alias_of = "聖馬力諾"},
["塞爾維亞"] = {container = "歐洲", wp = "塞爾維亞"},
["斯洛伐克"] = {container = "歐洲", wp = "斯洛伐克"},
["斯洛文尼亞"] = {container = "歐洲", wp = "斯洛文尼亞"},
["斯洛維尼亞"] = {alias_of = "斯洛文尼亞"},
["西班牙"] = {container = "歐洲", divs = {"autonomous communities"}, wp = "西班牙"},
["瑞典"] = {container = "歐洲", wp = "瑞典"},
["瑞士"] = {container = "歐洲", divs = {"cantons"}, wp = "瑞士"},
["烏克蘭"] = {container = "歐洲", divs = {"oblasts"}, wp = "烏克蘭"},
["英國"] = {container = "歐洲", divs = {
{type = "constituent countries", cat_as = "constituent countries"},
}, wp = "英國"},
-- North America
["加拿大"] = {container = "北美洲", divs = {
{type = "provinces", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
}, wp = "加拿大"},
["墨西哥"] = {container = "北美洲", divs = {"states"}, wp = "墨西哥"},
["美國"] = {container = "北美洲", divs = {"states"}, wp = "美國"},
-- Central America
["伯利茲"] = {container = "中美洲", wp = "伯利茲"},
["貝里斯"] = {alias_of = "伯利茲"},
["哥斯達黎加"] = {container = "中美洲", wp = "哥斯達黎加"},
["哥斯大黎加"] = {alias_of = "哥斯達黎加"},
["薩爾瓦多"] = {container = "中美洲", wp = "薩爾瓦多"},
["危地馬拉"] = {container = "中美洲", wp = "危地馬拉"},
["瓜地馬拉"] = {alias_of = "危地馬拉"},
["洪都拉斯"] = {container = "中美洲", wp = "洪都拉斯"},
["宏都拉斯"] = {alias_of = "洪都拉斯"},
["尼加拉瓜"] = {container = "中美洲", wp = "尼加拉瓜"},
["巴拿馬"] = {container = "中美洲", wp = "巴拿馬"},
-- Caribbean
["安提瓜和巴布達"] = {container = "加勒比地區", wp = "安提瓜和巴布達"},
["安地卡及巴布達"] = {alias_of = "安提瓜和巴布達"},
["巴哈馬"] = {container = "加勒比地區", wp = "巴哈馬"},
["巴巴多斯"] = {container = "加勒比地區", wp = "巴巴多斯"},
["巴貝多"] = {alias_of = "巴巴多斯"},
["古巴"] = {container = "加勒比地區", wp = "古巴"},
["多米尼克"] = {container = "加勒比地區", wp = "多米尼克"},
["多米尼加共和國"] = {container = "加勒比地區", wp = "多米尼加"},
["多明尼加共和國"] = {alias_of = "多米尼加共和國"},
["格林納達"] = {container = "加勒比地區", wp = "格林納達"},
["格瑞那達"] = {alias_of = "格林納達"},
["海地"] = {container = "加勒比地區", wp = "海地"},
["牙買加"] = {container = "加勒比地區", wp = "牙買加"},
["聖基茨和尼維斯"] = {container = "加勒比地區", wp = "聖基茨和尼維斯"},
["聖克里斯多福及尼維斯"] = {alias_of = "聖基茨和尼維斯"},
["聖盧西亞"] = {container = "加勒比地區", wp = "聖盧西亞"},
["聖露西亞"] = {alias_of = "聖盧西亞"},
["聖文森特和格林納丁斯"] = {container = "加勒比地區", wp = "聖文森特和格林納丁斯"},
["聖文森及格瑞那丁"] = {alias_of = "聖文森特和格林納丁斯"},
["特立尼達和多巴哥"] = {container = "加勒比地區", wp = "特立尼達和多巴哥"},
["千里達及托巴哥"] = {alias_of = "特立尼達和多巴哥"},
-- South America
["阿根廷"] = {container = "南美洲", divs = {"provinces"}, wp = "阿根廷"},
["玻利維亞"] = {container = "南美洲", wp = "玻利維亞"},
["巴西"] = {container = "南美洲", divs = {"states"}, wp = "巴西"},
["智利"] = {container = "南美洲", wp = "智利"},
["哥倫比亞"] = {container = "南美洲", wp = "哥倫比亞"},
["厄瓜多爾"] = {container = "南美洲", wp = "厄瓜多爾"},
["厄瓜多"] = {alias_of = "厄瓜多爾"},
["圭亞那"] = {container = "南美洲", wp = "圭亞那"},
["蓋亞那"] = {alias_of = "圭亞那"},
["巴拉圭"] = {container = "南美洲", wp = "巴拉圭"},
["秘魯"] = {container = "南美洲", wp = "秘魯"},
["蘇里南"] = {container = "南美洲", wp = "蘇里南"},
["蘇利南"] = {alias_of = "蘇里南"},
["烏拉圭"] = {container = "南美洲", wp = "烏拉圭"},
["委內瑞拉"] = {container = "南美洲", wp = "委內瑞拉"},
-- Oceania
["澳大利亞"] = {container = "大洋洲", divs = {
{type = "states", cat_as = "states and territories"},
{type = "territories", cat_as = "states and territories"},
}, wp = "澳大利亞"},
["澳洲"] = {alias_of = "澳大利亞"},
["斐濟"] = {container = "大洋洲", wp = "斐濟"},
["基里巴斯"] = {container = "大洋洲", wp = "基里巴斯"},
["吉里巴斯"] = {alias_of = "基里巴斯"},
["馬紹爾群島"] = {container = "大洋洲", wp = "馬紹爾群島"},
["密克羅尼西亞聯邦"] = {container = "大洋洲", wp = "密克羅尼西亞聯邦"},
["瑙魯"] = {container = "大洋洲", wp = "瑙魯"},
["諾魯"] = {alias_of = "瑙魯"},
["新西蘭"] = {container = "大洋洲", wp = "新西蘭"},
["紐西蘭"] = {alias_of = "新西蘭"},
["帕勞"] = {container = "大洋洲", wp = "帕勞"},
["帛琉"] = {alias_of = "帕勞"},
["巴布亞新幾內亞"] = {container = "大洋洲", wp = "巴布亞新幾內亞"},
["巴布亞紐幾內亞"] = {alias_of = "巴布亞新幾內亞"},
["薩摩亞"] = {container = "大洋洲", wp = "薩摩亞"},
["所羅門群島"] = {container = "大洋洲", wp = "所羅門群島"},
["湯加"] = {container = "大洋洲", wp = "湯加"},
["東加"] = {alias_of = "湯加"},
["圖瓦盧"] = {container = "大洋洲", wp = "圖瓦盧"},
["吐瓦魯"] = {alias_of = "圖瓦盧"},
["瓦努阿圖"] = {container = "大洋洲", wp = "瓦努阿圖"},
["萬那杜"] = {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
jxzz8l9ya8lxb2b83j2sh3029y03bej
9759346
9758867
2026-05-14T09:04:08Z
TongcyDai
53191
9759346
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 = "阿爾及利亞"},
["安哥拉"] = {container = "非洲", divs = {"provinces", "municipalities"}, wp = "安哥拉"},
["貝寧"] = {container = "非洲", wp = "貝寧"},
["貝南"] = {alias_of = "貝寧"},
["博茨瓦納"] = {container = "非洲", wp = "博茨瓦納"},
["波札那"] = {alias_of = "博茨瓦納"},
["布基納法索"] = {container = "非洲", wp = "布基納法索"},
["布吉納法索"] = {alias_of = "布基納法索"},
["布隆迪"] = {container = "非洲", wp = "布隆迪"},
["蒲隆地"] = {alias_of = "布隆迪"},
["佛得角"] = {container = "非洲", wp = "佛得角"},
["維德角"] = {alias_of = "佛得角"},
["中非共和國"] = {container = "非洲", wp = "中非共和國"},
["乍得"] = {container = "非洲", wp = "乍得"},
["查德"] = {alias_of = "乍得"},
["科摩羅"] = {container = "非洲", wp = "科摩羅"},
["葛摩"] = {alias_of = "科摩羅"},
["剛果共和國"] = {container = "非洲", wp = "剛果共和國"},
["剛果(布)"] = {alias_of = "剛果共和國"},
["剛果民主共和國"] = {container = "非洲", divs = {"provinces"}, wp = "剛果民主共和國"},
["剛果(金)"] = {alias_of = "剛果民主共和國"},
["吉布提"] = {container = "非洲", wp = "吉布提"},
["吉布地"] = {alias_of = "吉布提"},
["埃及"] = {container = "非洲", divs = {"governorates"}, wp = "埃及"},
["赤道幾內亞"] = {container = "非洲", wp = "赤道幾內亞"},
["厄立特里亞"] = {container = "非洲", wp = "厄立特里亞"},
["厄利垂亞"] = {alias_of = "厄立特里亞"},
["斯威士蘭"] = {container = "非洲", wp = "斯威士蘭"},
["史瓦帝尼"] = {alias_of = "斯威士蘭"},
["埃塞俄比亞"] = {container = "非洲", divs = {"regions"}, wp = "埃塞俄比亞"},
["衣索比亞"] = {alias_of = "埃塞俄比亞"},
["加蓬"] = {container = "非洲", wp = "加蓬"},
["加彭"] = {alias_of = "加蓬"},
["岡比亞"] = {container = "非洲", wp = "岡比亞"},
["甘比亞"] = {alias_of = "岡比亞"},
["加納"] = {container = "非洲", wp = "加納"},
["迦納"] = {alias_of = "加納"},
["幾內亞"] = {container = "非洲", wp = "幾內亞"},
["幾內亞比紹"] = {container = "非洲", wp = "幾內亞比紹"},
["幾內亞比索"] = {alias_of = "幾內亞比紹"},
["科特迪瓦"] = {container = "非洲", wp = "科特迪瓦"},
["象牙海岸"] = {alias_of = "科特迪瓦"},
["肯尼亞"] = {container = "非洲", divs = {"counties"}, wp = "肯尼亞"},
["肯亞"] = {alias_of = "肯尼亞"},
["萊索托"] = {container = "非洲", wp = "萊索托"},
["賴索托"] = {alias_of = "萊索托"},
["利比里亞"] = {container = "非洲", wp = "利比里亞"},
["賴比瑞亞"] = {alias_of = "利比里亞"},
["利比亞"] = {container = "非洲", wp = "利比亞"},
["馬達加斯加"] = {container = "非洲", wp = "馬達加斯加"},
["馬拉維"] = {container = "非洲", wp = "馬拉維"},
["馬拉威"] = {alias_of = "馬拉維"},
["馬里"] = {container = "非洲", wp = "馬里"},
["馬利"] = {alias_of = "馬里"},
["毛里塔尼亞"] = {container = "非洲", wp = "毛里塔尼亞"},
["茅利塔尼亞"] = {alias_of = "毛里塔尼亞"},
["毛里求斯"] = {container = "非洲", wp = "毛里求斯"},
["模里西斯"] = {alias_of = "毛里求斯"},
["摩洛哥"] = {container = "非洲", wp = "摩洛哥"},
["莫桑比克"] = {container = "非洲", wp = "莫桑比克"},
["莫三比克"] = {alias_of = "莫桑比克"},
["納米比亞"] = {container = "非洲", wp = "納米比亞"},
["尼日爾"] = {container = "非洲", wp = "尼日爾"},
["尼日"] = {alias_of = "尼日爾"},
["尼日利亞"] = {container = "非洲", divs = {
{type = "states", cat_as = "states and FCT"},
"local government areas",
}, wp = "尼日利亞"},
["奈及利亞"] = {alias_of = "尼日利亞"},
["盧旺達"] = {container = "非洲", wp = "盧旺達"},
["盧安達"] = {alias_of = "盧旺達"},
["聖多美和普林西比"] = {container = "非洲", wp = "聖多美和普林西比"},
["塞內加爾"] = {container = "非洲", wp = "塞內加爾"},
["塞舌爾"] = {container = "非洲", wp = "塞舌爾"},
["塞席爾"] = {alias_of = "塞舌爾"},
["塞拉利昂"] = {container = "非洲", wp = "塞拉利昂"},
["獅子山"] = {alias_of = "塞拉利昂"},
["索馬里"] = {container = "非洲", wp = "索馬里"},
["索馬利亞"] = {alias_of = "索馬里"},
["南非"] = {container = "非洲", divs = {"provinces"}, wp = "南非"},
["南蘇丹"] = {container = "非洲", wp = "南蘇丹"},
["蘇丹"] = {container = "非洲", wp = "蘇丹"},
["坦桑尼亞"] = {container = "非洲", wp = "坦桑尼亞"},
["坦尚尼亞"] = {alias_of = "坦桑尼亞"},
["多哥"] = {container = "非洲", wp = "多哥"},
["突尼斯"] = {container = "非洲", wp = "突尼斯"},
["突尼西亞"] = {alias_of = "突尼斯"},
["烏干達"] = {container = "非洲", wp = "烏干達"},
["贊比亞"] = {container = "非洲", wp = "贊比亞"},
["尚比亞"] = {alias_of = "贊比亞"},
["津巴布韋"] = {container = "非洲", wp = "津巴布韋"},
["辛巴威"] = {alias_of = "津巴布韋"},
-- Asia
["阿富汗"] = {container = "亞洲", wp = "阿富汗"},
["亞美尼亞"] = {container = {"歐洲", "亞洲"}, wp = "亞美尼亞"},
["阿塞拜疆"] = {container = {"歐洲", "亞洲"}, wp = "阿塞拜疆"},
["亞塞拜然"] = {alias_of = "阿塞拜疆"},
["巴林"] = {container = "亞洲", wp = "巴林"},
["孟加拉國"] = {container = "亞洲", divs = {"divisions", "districts"}, wp = "孟加拉國"},
["孟加拉"] = {alias_of = "孟加拉國"},
["不丹"] = {container = "亞洲", wp = "不丹"},
["文萊"] = {container = "亞洲", wp = "文萊"},
["汶萊"] = {alias_of = "文萊"},
["柬埔寨"] = {container = "亞洲", wp = "柬埔寨"},
["中國"] = {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 = "中國"},
["東帝汶"] = {container = "亞洲", wp = "東帝汶"},
["帝汶島"] = {alias_of = "東帝汶"},
["印度"] = {container = "亞洲", divs = {
{type = "states", cat_as = "states and union territories"},
{type = "union territories", cat_as = "states and union territories"},
}, wp = "印度"},
["印度尼西亞"] = {container = "亞洲", divs = {"provinces"}, wp = "印度尼西亞"},
["印尼"] = {alias_of = "印度尼西亞"},
["伊朗"] = {container = "亞洲", wp = "伊朗"},
["伊拉克"] = {container = "亞洲", wp = "伊拉克"},
["以色列"] = {container = "亞洲", wp = "以色列"},
["日本"] = {container = "亞洲", divs = {"prefectures"}, wp = "日本"},
["約旦"] = {container = "亞洲", wp = "約旦"},
["哈薩克斯坦"] = {container = {"歐洲", "亞洲"}, wp = "哈薩克斯坦"},
["哈薩克"] = {alias_of = "哈薩克斯坦"},
["朝鮮"] = {container = "亞洲", wp = "朝鮮民主主義人民共和國"},
["北韓"] = {alias_of = "朝鮮"},
["韓國"] = {container = "亞洲", divs = {"provinces", "special cities", "metropolitan cities"}, wp = "韓國"},
["南韓"] = {alias_of = "韓國"},
["科威特"] = {container = "亞洲", wp = "科威特"},
["吉爾吉斯斯坦"] = {container = "亞洲", wp = "吉爾吉斯斯坦"},
["吉爾吉斯"] = {alias_of = "吉爾吉斯斯坦"},
["老撾"] = {container = "亞洲", wp = "老撾"},
["寮國"] = {alias_of = "老撾"},
["黎巴嫩"] = {container = "亞洲", wp = "黎巴嫩"},
["馬來西亞"] = {container = "亞洲", divs = {"states"}, wp = "馬來西亞"},
["馬爾代夫"] = {container = "亞洲", wp = "馬爾代夫"},
["馬爾地夫"] = {alias_of = "馬爾代夫"},
["蒙古"] = {container = "亞洲", wp = "蒙古"},
["緬甸"] = {container = "亞洲", wp = "緬甸"},
["尼泊爾"] = {container = "亞洲", wp = "尼泊爾"},
["阿曼"] = {container = "亞洲", wp = "阿曼"},
["巴基斯坦"] = {container = "亞洲", divs = {"provinces"}, wp = "巴基斯坦"},
["菲律賓"] = {container = "亞洲", divs = {"regions"}, wp = "菲律賓"},
["卡塔爾"] = {container = "亞洲", wp = "卡塔爾"},
["卡達"] = {alias_of = "卡塔爾"},
["俄羅斯"] = {container = {"歐洲", "亞洲"}, divs = {"federal subjects"}, wp = "俄羅斯"},
["俄國"] = {alias_of = "俄羅斯"},
["沙特阿拉伯"] = {container = "亞洲", wp = "沙特阿拉伯"},
["沙烏地阿拉伯"] = {alias_of = "沙特阿拉伯"},
["新加坡"] = {container = "亞洲", is_city = true, wp = "新加坡"},
["斯里蘭卡"] = {container = "亞洲", wp = "斯里蘭卡"},
["敘利亞"] = {container = "亞洲", wp = "敘利亞"},
["臺灣"] = {container = "亞洲", divs = {
"special municipalities",
"counties",
}, wp = "臺灣"},
["台灣"] = {alias_of = "臺灣"},
["塔吉克斯坦"] = {container = "亞洲", wp = "塔吉克斯坦"},
["塔吉克"] = {alias_of = "塔吉克斯坦"},
["泰國"] = {container = "亞洲", divs = {"provinces"}, wp = "泰國"},
["土耳其"] = {container = {"歐洲", "亞洲"}, wp = "土耳其"},
["土庫曼斯坦"] = {container = "亞洲", wp = "土庫曼斯坦"},
["土庫曼"] = {alias_of = "土庫曼斯坦"},
["阿拉伯聯合酋長國"] = {container = "亞洲", wp = "阿拉伯聯合酋長國"},
["阿拉伯聯合大公國"] = {alias_of = "阿拉伯聯合酋長國"},
["阿聯酋"] = {alias_of = "阿拉伯聯合酋長國"},
["烏茲別克斯坦"] = {container = "亞洲", wp = "烏茲別克斯坦"},
["烏茲別克"] = {alias_of = "烏茲別克斯坦"},
["越南"] = {container = "亞洲", divs = {"provinces", "municipalities"}, wp = "越南"},
["也門"] = {container = "亞洲", wp = "也門"},
["葉門"] = {alias_of = "也門"},
-- Europe
["阿爾巴尼亞"] = {container = "歐洲", wp = "阿爾巴尼亞"},
["安道爾"] = {container = "歐洲", wp = "安道爾"},
["奧地利"] = {container = "歐洲", divs = {"states"}, wp = "奧地利"},
["白俄羅斯"] = {container = "歐洲", divs = {"regions"}, wp = "白俄羅斯"},
["比利時"] = {container = "歐洲", divs = {"regions", "provinces"}, wp = "比利時"},
["波斯尼亞和黑塞哥維那"] = {container = "歐洲", wp = "波斯尼亞和黑塞哥維那"},
["波士尼亞與赫塞哥維納"] = {alias_of = "波斯尼亞和黑塞哥維那"},
["保加利亞"] = {container = "歐洲", wp = "保加利亞"},
["克羅地亞"] = {container = "歐洲", wp = "克羅地亞"},
["克羅埃西亞"] = {alias_of = "克羅地亞"},
["塞浦路斯"] = {container = "亞洲", addl_parents = {"歐洲"}, wp = "塞浦路斯"},
["賽普勒斯"] = {alias_of = "塞浦路斯"},
["捷克"] = {container = "歐洲", wp = "捷克"},
["丹麥"] = {container = "歐洲", wp = "丹麥"},
["愛沙尼亞"] = {container = "歐洲", wp = "愛沙尼亞"},
["芬蘭"] = {container = "歐洲", divs = {"regions"}, wp = "芬蘭"},
["法國"] = {container = "歐洲", divs = {
{type = "regions", cat_as = "metropolitan regions"},
"departments",
"communes",
}, wp = "法國"},
["格魯吉亞"] = {container = {"歐洲", "亞洲"}, wp = "格魯吉亞"},
["喬治亞"] = {alias_of = "格魯吉亞"},
["德國"] = {container = "歐洲", divs = {"states"}, wp = "德國"},
["希臘"] = {container = "歐洲", divs = {"regions"}, wp = "希臘"},
["匈牙利"] = {container = "歐洲", wp = "匈牙利"},
["冰島"] = {container = "歐洲", wp = "冰島"},
["愛爾蘭"] = {container = "歐洲", divs = {"provinces", "counties"}, wp = "愛爾蘭"},
["意大利"] = {container = "歐洲", divs = {"regions"}, wp = "意大利"},
["義大利"] = {alias_of = "意大利"},
["科索沃"] = {container = "歐洲", wp = "科索沃"},
["拉脫維亞"] = {container = "歐洲", wp = "拉脫維亞"},
["拉托維亞"] = {alias_of = "拉脫維亞"},
["列支敦士登"] = {container = "歐洲", wp = "列支敦士登"},
["列支敦斯登"] = {alias_of = "列支敦士登"},
["立陶宛"] = {container = "歐洲", wp = "立陶宛"},
["盧森堡"] = {container = "歐洲", wp = "盧森堡"},
["北馬其頓"] = {container = "歐洲", wp = "北馬其頓"},
["馬耳他"] = {container = "歐洲", wp = "馬耳他"},
["馬爾他"] = {alias_of = "馬耳他"},
["摩爾多瓦"] = {container = "歐洲", wp = "摩爾多瓦"},
["摩納哥"] = {container = "歐洲", is_city = true, wp = "摩納哥"},
["黑山"] = {container = "歐洲", wp = "黑山"},
["蒙特內哥羅"] = {alias_of = "黑山"},
["荷蘭"] = {container = "歐洲", divs = {"provinces"}, wp = "荷蘭"},
["尼德蘭"] = {alias_of = "荷蘭"},
["挪威"] = {container = "歐洲", wp = "挪威"},
["波蘭"] = {container = "歐洲", divs = {"voivodeships"}, wp = "波蘭"},
["葡萄牙"] = {container = "歐洲", divs = {"districts"}, wp = "葡萄牙"},
["羅馬尼亞"] = {container = "歐洲", wp = "羅馬尼亞"},
["聖馬力諾"] = {container = "歐洲", wp = "聖馬力諾"},
["聖馬利諾"] = {alias_of = "聖馬力諾"},
["塞爾維亞"] = {container = "歐洲", wp = "塞爾維亞"},
["斯洛伐克"] = {container = "歐洲", wp = "斯洛伐克"},
["斯洛文尼亞"] = {container = "歐洲", wp = "斯洛文尼亞"},
["斯洛維尼亞"] = {alias_of = "斯洛文尼亞"},
["西班牙"] = {container = "歐洲", divs = {"autonomous communities"}, wp = "西班牙"},
["瑞典"] = {container = "歐洲", wp = "瑞典"},
["瑞士"] = {container = "歐洲", divs = {"cantons"}, wp = "瑞士"},
["烏克蘭"] = {container = "歐洲", divs = {"oblasts"}, wp = "烏克蘭"},
["英國"] = {container = "歐洲", divs = {
{type = "constituent countries", cat_as = "constituent countries"},
}, wp = "英國"},
-- North America
["加拿大"] = {container = "北美洲", divs = {
{type = "provinces", cat_as = "provinces and territories"},
{type = "territories", cat_as = "provinces and territories"},
}, wp = "加拿大"},
["墨西哥"] = {container = "北美洲", divs = {"states"}, wp = "墨西哥"},
["美國"] = {container = "北美洲", divs = {"states"}, wp = "美國"},
-- Central America
["伯利茲"] = {container = "中美洲", wp = "伯利茲"},
["貝里斯"] = {alias_of = "伯利茲"},
["哥斯達黎加"] = {container = "中美洲", wp = "哥斯達黎加"},
["哥斯大黎加"] = {alias_of = "哥斯達黎加"},
["薩爾瓦多"] = {container = "中美洲", wp = "薩爾瓦多"},
["危地馬拉"] = {container = "中美洲", wp = "危地馬拉"},
["瓜地馬拉"] = {alias_of = "危地馬拉"},
["洪都拉斯"] = {container = "中美洲", wp = "洪都拉斯"},
["宏都拉斯"] = {alias_of = "洪都拉斯"},
["尼加拉瓜"] = {container = "中美洲", wp = "尼加拉瓜"},
["巴拿馬"] = {container = "中美洲", wp = "巴拿馬"},
-- Caribbean
["安提瓜和巴布達"] = {container = "加勒比地區", wp = "安提瓜和巴布達"},
["安地卡及巴布達"] = {alias_of = "安提瓜和巴布達"},
["巴哈馬"] = {container = "加勒比地區", wp = "巴哈馬"},
["巴巴多斯"] = {container = "加勒比地區", wp = "巴巴多斯"},
["巴貝多"] = {alias_of = "巴巴多斯"},
["古巴"] = {container = "加勒比地區", wp = "古巴"},
["多米尼克"] = {container = "加勒比地區", wp = "多米尼克"},
["多米尼加共和國"] = {container = "加勒比地區", wp = "多米尼加"},
["多明尼加共和國"] = {alias_of = "多米尼加共和國"},
["格林納達"] = {container = "加勒比地區", wp = "格林納達"},
["格瑞那達"] = {alias_of = "格林納達"},
["海地"] = {container = "加勒比地區", wp = "海地"},
["牙買加"] = {container = "加勒比地區", wp = "牙買加"},
["聖基茨和尼維斯"] = {container = "加勒比地區", wp = "聖基茨和尼維斯"},
["聖克里斯多福及尼維斯"] = {alias_of = "聖基茨和尼維斯"},
["聖盧西亞"] = {container = "加勒比地區", wp = "聖盧西亞"},
["聖露西亞"] = {alias_of = "聖盧西亞"},
["聖文森特和格林納丁斯"] = {container = "加勒比地區", wp = "聖文森特和格林納丁斯"},
["聖文森及格瑞那丁"] = {alias_of = "聖文森特和格林納丁斯"},
["特立尼達和多巴哥"] = {container = "加勒比地區", wp = "特立尼達和多巴哥"},
["千里達及托巴哥"] = {alias_of = "特立尼達和多巴哥"},
-- South America
["阿根廷"] = {container = "南美洲", divs = {"provinces"}, wp = "阿根廷"},
["玻利維亞"] = {container = "南美洲", wp = "玻利維亞"},
["巴西"] = {container = "南美洲", divs = {"states"}, wp = "巴西"},
["智利"] = {container = "南美洲", wp = "智利"},
["哥倫比亞"] = {container = "南美洲", wp = "哥倫比亞"},
["厄瓜多爾"] = {container = "南美洲", wp = "厄瓜多爾"},
["厄瓜多"] = {alias_of = "厄瓜多爾"},
["圭亞那"] = {container = "南美洲", wp = "圭亞那"},
["蓋亞那"] = {alias_of = "圭亞那"},
["巴拉圭"] = {container = "南美洲", wp = "巴拉圭"},
["秘魯"] = {container = "南美洲", wp = "秘魯"},
["蘇里南"] = {container = "南美洲", wp = "蘇里南"},
["蘇利南"] = {alias_of = "蘇里南"},
["烏拉圭"] = {container = "南美洲", wp = "烏拉圭"},
["委內瑞拉"] = {container = "南美洲", wp = "委內瑞拉"},
-- Oceania
["澳大利亞"] = {container = "大洋洲", divs = {
{type = "states", cat_as = "states and territories"},
{type = "territories", cat_as = "states and territories"},
}, wp = "澳大利亞"},
["澳洲"] = {alias_of = "澳大利亞"},
["斐濟"] = {container = "大洋洲", wp = "斐濟"},
["基里巴斯"] = {container = "大洋洲", wp = "基里巴斯"},
["吉里巴斯"] = {alias_of = "基里巴斯"},
["馬紹爾群島"] = {container = "大洋洲", wp = "馬紹爾群島"},
["密克羅尼西亞聯邦"] = {container = "大洋洲", wp = "密克羅尼西亞聯邦"},
["瑙魯"] = {container = "大洋洲", wp = "瑙魯"},
["諾魯"] = {alias_of = "瑙魯"},
["新西蘭"] = {container = "大洋洲", wp = "新西蘭"},
["紐西蘭"] = {alias_of = "新西蘭"},
["帕勞"] = {container = "大洋洲", wp = "帕勞"},
["帛琉"] = {alias_of = "帕勞"},
["巴布亞新幾內亞"] = {container = "大洋洲", wp = "巴布亞新幾內亞"},
["巴布亞紐幾內亞"] = {alias_of = "巴布亞新幾內亞"},
["薩摩亞"] = {container = "大洋洲", wp = "薩摩亞"},
["所羅門群島"] = {container = "大洋洲", wp = "所羅門群島"},
["湯加"] = {container = "大洋洲", wp = "湯加"},
["東加"] = {alias_of = "湯加"},
["圖瓦盧"] = {container = "大洋洲", wp = "圖瓦盧"},
["吐瓦魯"] = {alias_of = "圖瓦盧"},
["瓦努阿圖"] = {container = "大洋洲", wp = "瓦努阿圖"},
["萬那杜"] = {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
1o2uflvww2nkhaxglb9lnxwpgxha5bf
Module:Place/placetypes
828
3437750
9758657
9758642
2026-05-13T15:36:58Z
TongcyDai
53191
9758657
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
-- ZH: "臺灣的縣" format (location_key + 的 + zh_name); ignore cat_as grouping
local zh_n_raw = export.get_zh_placetype_name(data.entry_placetype)
local zh_n = zh_n_raw and export.format_zh_name(zh_n_raw) or ucfirst(data.entry_placetype)
return {export.get_prefixed_key(key, spec) .. export.zh_strings.de_particle .. zh_n}
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
l5ec5cd0hvbhte6rms0s8q04cah4wp8
9758816
9758657
2026-05-13T16:11:21Z
TongcyDai
53191
9758816
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")
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
-- ZH: "臺灣的縣" format (location_key + 的 + zh_name); ignore cat_as grouping
local zh_n_raw = export.get_zh_placetype_name(data.entry_placetype)
local zh_n = zh_n_raw and export.format_zh_name(zh_n_raw) or ucfirst(data.entry_placetype)
return {export.get_prefixed_key(key, spec) .. export.zh_strings.de_particle .. zh_n}
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
2soi1a7oviz3uzstjc72at473f5o3hn
9758866
9758816
2026-05-13T20:13:46Z
Xiplus
25402
已保护“[[Module:Place/placetypes]]”:高風險模板:9557引用([编辑权限=仅允许自动确认用户](无限期)[移动权限=仅允许自动确认用户](无限期))
9758816
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")
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
-- ZH: "臺灣的縣" format (location_key + 的 + zh_name); ignore cat_as grouping
local zh_n_raw = export.get_zh_placetype_name(data.entry_placetype)
local zh_n = zh_n_raw and export.format_zh_name(zh_n_raw) or ucfirst(data.entry_placetype)
return {export.get_prefixed_key(key, spec) .. export.zh_strings.de_particle .. zh_n}
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
2soi1a7oviz3uzstjc72at473f5o3hn
9759347
9758866
2026-05-14T09:05:00Z
TongcyDai
53191
9759347
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",
-- Chinese placetype name aliases (map to English equivalents so they inherit preposition, display handler, etc.)
["縣"] = "county",
}
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) .. "地名")
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
-- ZH: "臺灣的縣" format (location_key + 的 + zh_name); ignore cat_as grouping
local zh_n_raw = export.get_zh_placetype_name(data.entry_placetype)
local zh_n = zh_n_raw and export.format_zh_name(zh_n_raw) or ucfirst(data.entry_placetype)
return {export.get_prefixed_key(key, spec) .. export.zh_strings.de_particle .. zh_n}
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
hwmxfiozt5q51rbd9glfs0i6z0ck0y0
aura farming
0
3438212
9758645
2026-05-13T12:02:46Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==英語== ===其他形式=== * {{alt|en|aurafarming}} ===詞源=== 由俚語 {{com|en|aura|t1=人獨特的魅力美感|id1=氣場|farm#動詞|alt2=farming|id2=遊戲|t2=為獲得理想結果而進行的重複行為}} 組合而成。該詞起源於2024年初,<ref>{{R:KYM|Aura Farming|https://knowyourmeme.com/memes/aura-farming}}</ref>(大約在 {{m|en|aura|id=氣場|t=氣場}} 的俚語義項開始流行時),但在2025年中期,…」的新頁面
9758645
wikitext
text/x-wiki
==英語==
===其他形式===
* {{alt|en|aurafarming}}
===詞源===
由俚語 {{com|en|aura|t1=人獨特的魅力美感|id1=氣場|farm#動詞|alt2=farming|id2=遊戲|t2=為獲得理想結果而進行的重複行為}} 組合而成。該詞起源於2024年初,<ref>{{R:KYM|Aura Farming|https://knowyourmeme.com/memes/aura-farming}}</ref>(大約在 {{m|en|aura|id=氣場|t=氣場}} 的俚語義項開始流行時),但在2025年中期,印尼男孩 Rayyan Arkan Dikha 在船上跳舞的影片在 {{w|TikTok}} 上爆紅後,該詞進一步普及。<ref>{{cite-web|en|author=Fan Wang, Astudestra Ajengrastri and Johanes Hutabarat|title=Aura farming: The 11-year-old kid who even has Travis Kelce dancing|site=BBC News|url=https://www.bbc.com/news/articles/czxe7ey59r0o|archiveurl=https://archive.ph/OsjqD|archivedate=11 July 2025|date=11 July 2025}}</ref><ref>{{R:Dictionary.com|url=https://www.dictionary.com/e/slang/aura-farming/}}</ref><ref>{{R:Google Trends|aura farming}}</ref>
===發音===
* {{audio|en|LL-Q1860 (eng)-Stupidmarxon-aura farming.wav|a=UK}}
===名詞===
{{en-noun|-}}
# {{lb|en|俚語|especially|粉絲用語}} 刻意營造出毫不費力、滿不在乎的[[魅力]][[外表]]或[[美感]]的行為
#* {{quote-web|en|author=Dan Aulbach|title=What Does 'Aura' Mean? Explaining The Viral Slang Term|site=TODAY|url=https://www.today.com/parents/teens/aura-meaning-slang-rcna192018|archiveurl=https://archive.ph/2iw70|archivedate=7 November 2025|date=18 February 2025|passage=For example, one TikTok creator made a video of the "Greatest '''Aura Farming''' Cinematic Moments," comprising movie moments where they believed a specific character was deliberately trying to look cool, such as Thanos in "Avengers: Endgame" waiting to fight the Avengers.|t=例如,一位 TikTok 創作者製作了一段名為「最偉大的『'''刷氣場'''』電影時刻」的影片,包含了他們認為特定角色故意裝酷的電影時刻,例如《復仇者聯盟:終局之戰》中等待與復仇者聯盟戰鬥的薩諾斯。}}
#* {{quote-web|en|author=@SpunkityBall|site=w:en:Twitter|url=https://x.com/SpunkityBall/status/1913052802621776180|archiveurl=https://archive.ph/mZv49|archivedate=7 November 2025|date=18 April 2025|passage=he's doing some astonishing '''aura farming''' on this cover|t=他在這封面上進行了令人驚嘆的'''刷氣場'''行為。}}
#* {{quote-web|en|author=u/Wstiglet|title=Aura farming|site=w:en:Reddit|url=https://www.reddit.com/r/WormFanfic/comments/1k822qu/aura_farming/|archiveurl=https://archive.ph/Gk6Xf|archivedate=7 November 2025|location=r/WormFanfic|date=26 April 2025|passage=In Taylor's Ultimate Arch-Enemy, the main character's power is literally '''aura farming'''. The cooler he appears, the stronger he gets.|t=在《泰勒的終極宿敵》中,主角的超能力簡直就是'''刷氣場'''。他看起來越酷,變得就越強。}}
#* {{quote-web|en|author=@gloopbastard|site=w:en:Twitter|url=https://x.com/gloopbastard/status/1939481863405342924|archiveurl=https://archive.ph/C6pAD|archivedate=7 November 2025|date=30 June 2025|passage=they should invent harmless cigarrettes for '''aura farming''' purposes|t=他們應該發明專為'''刷氣場'''而用的無害香菸。}}
#* {{quote-web|en|author=u/CringeyFrog24|title=Aura farming is our top priority|site=w:en:Reddit|url=https://www.reddit.com/r/ShadowSlave/comments/1nlkzi8/aura_farming_is_our_top_priority/|archiveurl=https://archive.ph/jejrg|archivedate=7 November 2025|location=r/ShadowSlave|date=20 September 2025|passage=CURSED SWORD BTW! To this day when I think of Sunny's best aura farming moments, this top the chart for me.|t=順帶一提,被詛咒的劍!時至今日,當我想到桑尼最棒的'''刷氣場'''時刻時,這對我來說依然是排行榜的榜首。}}
====派生詞彙====
{{col|en|aura farm<pos:動詞>}}
====相關詞彙====
{{col|en|aura farmer}}
===動詞===
{{head|en|動詞變位形式}}
# {{infl of|en|aura farm||ing-form}}
===參見===
{{col|en|archetype|attention-seeking|catchphrase|edit farming|flex|like farm|signature|trope}}
===參考資料===
{{reflist}}
===延伸閱讀===
* {{pedia|lang=en}}
es8jjyvaaqwkp595kqs7y8spn1p15dk
Module:Transclude
828
3438213
9758646
2026-05-13T12:47:02Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「local export = {} local anchors_module = "Module:anchors" local debug_track_module = "Module:debug/track" local headword_data_module = "Module:headword/data" local labels_module = "Module:labels" local languages_module = "Module:languages" local links_module = "Module:links" local pages_module = "Module:pages" local parameters_module = "Module:parameters" local parse_interface_module = "Module:parse interface" local place_module = "Module:pl…」的新頁面
9758646
Scribunto
text/plain
local export = {}
local anchors_module = "Module:anchors"
local debug_track_module = "Module:debug/track"
local headword_data_module = "Module:headword/data"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local links_module = "Module:links"
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
local parse_interface_module = "Module:parse interface"
local place_module = "Module:place"
local string_char_module = "Module:string/char"
local string_pattern_escape_module = "Module:string/patternEscape"
local string_remove_comments_module = "Module:string/removeComments"
local string_replacement_escape_module = "Module:string/replacementEscape"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local template_parser_module = "Module:template parser"
local m_place = require(place_module)
local zhlang = require(languages_module).getByCode("zh")
local concat = table.concat
local find = string.find
local insert = table.insert
local ipairs = ipairs
local lower = string.lower
local match = string.match
local pairs = pairs
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function codepoint(...)
codepoint = require(string_utilities_module).codepoint
return codepoint(...)
end
local function contains(...)
contains = require(table_module).contains
return contains(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function find_templates(...)
find_templates = require(template_parser_module).find_templates
return find_templates(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function is_preview(...)
is_preview = require(pages_module).is_preview
return is_preview(...)
end
local function pattern_escape(...)
pattern_escape = require(string_pattern_escape_module)
return pattern_escape(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function remove_comments(...)
remove_comments = require(string_remove_comments_module)
return remove_comments(...)
end
local function replacement_escape(...)
replacement_escape = require(string_replacement_escape_module)
return replacement_escape(...)
end
local function senseid(...)
senseid = require(anchors_module).senseid
return senseid(...)
end
local function show_labels(...)
show_labels = require(labels_module).show_labels
return show_labels(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function u(...)
u = require(string_char_module)
return u(...)
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/transclude/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("transclude/" .. page)
return true
end
-- 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 list of labels. For compatibility, we allow splitting on semicolon, but will convert to splitting on
-- comma not followed by space, for compatibility with other modules/params.
local function split_labels(val)
if val:find(";") then
track("label-with-semicolon")
return split(val, ";")
else
return split_on_comma(val)
end
end
-- From [[Template:gloss]]
-- local gloss_left = '<span class="mention-gloss-paren">(</span><span class="mention-gloss">'
-- local gloss_right = '</span><span class="mention-gloss-paren">)</span>'
local gloss_left = '<span class="mention-gloss-paren">(</span><span class="mention-gloss">'
local gloss_right = '</span><span class="mention-gloss-paren">)</span>'
-- Ensure that Wikicode (template calls, bracketed links, HTML, bold/italics, etc.) displays literally in error messages
-- by inserting a Unicode word-joiner symbol after all characters that may trigger Wikicode interpretation. Replacing
-- with equivalent HTML escapes doesn't work because they are displayed literally. I could not get this to work using
-- <nowiki>...</nowiki> (those tags display literally), using using {{#tag:nowiki|...}} (same thing) or using
-- mw.getCurrentFrame():extensionTag("nowiki", ...) (everything gets converted to a strip marker
-- `UNIQ--nowiki-00000000-QINU` or similar). FIXME: This is a massive hack; there must be a better way.
local function escape_wikicode(text)
text = text:gsub("([%[<'{])", "%1" .. u(0x2060))
return text
end
local function preprocess(frame, text)
if text:find("{") or text:find("<math>") then
return frame:preprocess(text)
else
return text
end
end
local function ine(arg)
return arg ~= "" and arg or nil
end
local function discard(offset, iter, obj, index)
return iter, obj, index + offset
end
local function remove_templates_if(haystack, predicate)
local remaining = {}
local last_start = 1
for template in find_templates(haystack) do
local name = template:get_name()
if name ~= nil and predicate(name, template:get_arguments(), next(remaining) == nil) then
local index = template.index
if last_start < index then
local chunk = haystack:sub(last_start, index - 1)
if chunk:find("%S") then
insert(remaining, chunk)
end
end
last_start = index + template.raw:len()
end
end
if last_start == 1 then
return haystack
else
insert(remaining, haystack:sub(last_start))
return concat(remaining)
end
end
local function copy_unnamed_args_maybe_except_code(to, from, deny_list, first_argument)
first_argument = first_argument or 2
for _, value in discard(first_argument - 1, ipairs(from)) do
if not deny_list or not contains(deny_list, value) then
insert(to, value)
end
end
end
local function parse_form_of_directive(value, param)
local new_directive, new_value = value:match("^@([a-z -]+):(.*)$")
if not new_directive then
if param then
error(("Misformatted value %s=%s; should be e.g. 'place_acronym_of=" ..
"@init of:ehemalige jugoslawische Republik Mazedonien' to replace " ..
"'@acronym of:...' with '@init of:...'"):format(
param, value))
else
error(("Misformatted form-of directive '%s'; should be e.g. '@ellip of:Santiago del Estero'"):format(
value))
end
end
if not m_place.all_form_of_directives[new_directive] then
local known_directives = {}
for k, _ in pairs(m_place.all_form_of_directives) do
insert(known_directives, '"' .. k .. '"')
end
table.sort(known_directives)
known_directives = concat(known_directives, ", ")
if param then
error(("Unrecognized form-of directive '%s' in replacement @-directive %s=%s; " ..
"recognized directives are %s"):format(new_directive, param, value, known_directives))
else
error(("Unrecognized form-of directive '%s' in '%s'; recognized directives are %s"):format(
new_directive, value, known_directives))
end
else
-- canonicalize replacement directive aliases
new_directive = m_place.all_form_of_directives[new_directive].alias_of or new_directive
end
return new_directive, new_value
end
local function handle_definition_template(data)
local name, args, transclude_args = data.name, data.template_args, data.transclude_args
if name == "place" then
local place_form_of_directives = data.place_form_of_directives
return {
should_remove = true,
must_be_first = true,
generate = function(data)
if data.formatted_to and data.formatted_to ~= "" then
error("{{place}} cannot be used in conjunction with |to=")
end
local place_args = {}
local langcode = data.lang:getCode()
local place_translation_follows = transclude_args.place_translation_follows
local include_place_extra_info = transclude_args.include_place_extra_info
local drop_extra = not include_place_extra_info -- false or unspecified
local extra_info_overridden_set = {}
for _, extra_info_spec in pairs(m_place.extra_info_args) do
local overriding_arg = transclude_args["place_" .. extra_info_spec.arg]
if overriding_arg and overriding_arg[1] then
extra_info_overridden_set[extra_info_spec.arg] = true
end
end
local form_of_overridden_args = {}
for form_of_directive, directive_spec in pairs(m_place.all_form_of_directives) do
if not directive_spec.alias_of then
local transclude_key = "place_" .. (form_of_directive:gsub(" ", "_"))
local transclude_value = transclude_args[transclude_key]
if transclude_value then
local new_directive, new_value
if transclude_value:find("^@") then
new_directive, new_value = parse_form_of_directive(transclude_value, transclude_key)
else
new_directive = form_of_directive
new_value = transclude_value
end
form_of_overridden_args[form_of_directive] = {
new_directive = new_directive,
new_value = new_value,
}
if directive_spec.default_foreign and place_translation_follows == nil then
place_translation_follows = true
end
end
end
end
place_args[1] = langcode
place_args.pagename = data.source
-- If form-of directives specified in the numeric args to {{tcl}}, they get inserted before any
-- numeric args taken from {{place}}.
local next_numarg = 2
for _, form_of_directive in ipairs(place_form_of_directives) do
place_args[next_numarg] = ("@%s:%s"):format(form_of_directive.directive, form_of_directive.value)
next_numarg = next_numarg + 1
end
local saw_tcl_t
local saw_t
-- Copy the arguments but drop translations, maybe the "extra info", and maybe the numbered args
-- (if tcl= given)
local tcl_arg = ine(args.tcl)
for key, val in pairs(args) do
local base = tostring(key):match("^(.-)(%d*)$")
if base == "tcl_t" or base == "tcl_tid" then
saw_tcl_t = true -- otherwise ignore
elseif base == "tcl_nolb" then
data.nolb = val -- otherwise ignore
elseif base == "t" or base == "tid" then
if transclude_args.t[1] then
-- ignore it if the user specified t= in {{tcl}}, otherwise keep it unless tcl_t is given
else
saw_t = true
end
elseif m_place.extra_info_arg_map[base] and extra_info_overridden_set[base] then
-- don't copy any extra info arguments that we will be overriding, in case there are more
-- original values than overrides for this particular argument
elseif base == "" then
if not tcl_arg and key > 1 then
-- We want keys starting at 2 to go into positions starting at `next_numarg`.
place_args[next_numarg + key - 2] = val
end
else
place_args[key] = val
end
end
local function sub_plus(t)
if t:find("+") then
t = t:gsub("+", replacement_escape(data.source))
end
return t
end
-- If tcl= given, copy its value into the numeric args.
if tcl_arg then
place_args[next_numarg] = tcl_arg
next_numarg = next_numarg + 1
place_args.a = nil
end
if transclude_args.t[1] then
local argno = 1
for _, t in ipairs(transclude_args.t) do
if t ~= "-" then
place_args["t" .. (argno == 1 and "" or argno)] = sub_plus(t)
argno = argno + 1
end
end
elseif langcode ~= "zh" then
if saw_tcl_t then
for key, val in pairs(args) do
local base, num = tostring(key):match("^(.-)(%d*)$")
if base == "tcl_t" then
place_args["t" .. num] = sub_plus(val)
elseif base == "tcl_tid" then
place_args["tid" .. num] = val
end
end
elseif saw_t then
for key, val in pairs(args) do
local base = tostring(key):match("^(.-)(%d*)$")
if base == "t" or base == "tid" then
place_args[key] = val
end
end
else
place_args["t"] = data.source
place_args["tid"] = data.id
end
end
place_args["sort"] = data.sort
if data.nocat then
place_args["nocat"] = "1"
end
if transclude_args.place_addl then
place_args.addl = transclude_args.place_addl
end
if data.no_gloss then
place_args["def"] = "-"
else
local gloss = data.gloss
-- Copy overriding extra info values. They are in the term language rather than Chinese,
-- which we signal through `extra_info_overridden_set`.
for _, extra_info_spec in pairs(m_place.extra_info_args) do
for i, v in ipairs(transclude_args["place_" .. extra_info_spec.arg]) do
place_args[extra_info_spec.arg .. (i == 1 and "" or i)] = v
end
end
if not args.tcl_noextratext and not tcl_arg and gloss ~= "" then
-- Copy text after {{place}} into {{place}}, unless tcl= or tcl_noextratext= is given.
local first_free = 2
while place_args[first_free] ~= nil do first_free = first_free + 1 end
if place_args[first_free - 1]:find("<<") then
-- new-style argument; concatenate to end of argument
if not gloss:find("^[,;.]") then
gloss = " " .. gloss
end
place_args[first_free - 1] = place_args[first_free - 1] .. gloss
else
-- old-style argument; add as separate argument
if gloss:find("^,") then
place_args[first_free] = gloss:gsub("^, *", "")
elseif gloss:find("^;") then
place_args[first_free] = ";"
place_args[first_free + 1] = gloss:gsub("^; *", "")
else
-- the "*" ensures no extra comma
place_args[first_free] = "*" .. gloss:gsub("^ *", "")
end
end
end
end
return m_place.format {
template_args = place_args,
from_tcl = true,
drop_extra_info = drop_extra,
extra_info_overridden_set = extra_info_overridden_set,
form_of_overridden_args = form_of_overridden_args,
translation_follows = place_translation_follows,
}
end,
}
elseif name == "abbreviation of" or name == "abbr of" or name == "abbrev of"
or name == "acronym of" or name == "ellipsis of"
or name == "contraction of" or name == "contr of"
or name == "initialism of" or name == "init of"
or name == "short for" or name == "synonym of" then
return {
should_remove = true,
must_be_first = true,
generate = function(data)
local formatted_gloss = ""
if not data.no_gloss then
local formatted_link = full_link{
term = args[2], alt = args[3], lang = data.source_lang, id = args["id"]
}
local after_link = ""
if data.gloss ~= "" then
local separator = (args["nodot"] and "") or ((args["dot"] or ";") .. " ")
after_link = separator .. data.gloss
end
-- formatted_gloss = " " .. gloss_left .. formatted_link .. after_link .. gloss_right
formatted_gloss = gloss_left .. formatted_link .. after_link .. gloss_right
end
return data.formatted_to .. full_link{
term = data.source, lang = data.source_lang, id = data.id
} .. formatted_gloss
end,
}
end
return nil
end
function export.show(frame)
local boolean = {type = "boolean"}
local list = {list = true}
local required = {required = true}
local params = {
[1] = {required = true, type = "language"}, -- langcode of target language (the current entry's language)
[2] = {list = true, required = true}, -- source Chinese term to transclude from and/or form-or directives
id = true, -- can have multiple comma-separated IDs
sort = true,
nogloss = {default = false, type = "boolean"},
no_truncate_gloss = boolean,
-- Normally, we ignore most of the extra info (capital, largest city, official name, etc.) when transcluding
-- {{place}} because the given terms are in Chinese and will likely differ from language to language.
include_place_extra_info = boolean,
-- Normally the translation (the transcluded page or overriding value in t=) comes first with the definition
-- following in parens, but that may not produce sensible results in some cases.
place_translation_follows = boolean,
place_addl = true,
lb = true, -- can have multiple comma-separated or (for compatibility) semicolon-separated labels
nolb = true, -- can have multiple comma-separated or (for compatibility) semicolon-separated labels
nocat = boolean,
to = boolean,
t = list,
indent = true,
dot = boolean,
pagename = true,
}
for _, extra_arg_spec in ipairs(m_place.extra_info_args) do
params["place_" .. extra_arg_spec.arg] = list
end
for form_of_directive, directive_spec in pairs(m_place.all_form_of_directives) do
params["place_" .. (form_of_directive:gsub(" ", "_"))] = directive_spec.alias_of and
{alias_of = "place_" .. (directive_spec.alias_of:gsub(" ", "_"))} or true
end
local args = process_params(frame:getParent().args, params)
local pagename = args.pagename or mw.loadData(headword_data_module).pagename
local language = args[1]
local language_code = language:getCode()
local source
local place_form_of_directives = {}
if args[2][1]:find("^@") then
-- form-of directives in place of source
for i, arg in ipairs(args[2]) do
if arg:find("^@") then
local directive, value = parse_form_of_directive(arg)
insert(place_form_of_directives, {
directive = directive,
value = value,
})
elseif i ~= #args[2] then
error(("When form-of directives are specified, the source must come last, but saw source %s=%s " ..
"when higher-numbered arguments exist"):format(i + 1, arg))
else
source = arg
end
end
if not source then
source = place_form_of_directives[#place_form_of_directives].value:gsub("<.*", "")
end
elseif args[2][2] then
error(("Extraneous argument 3=%s"):format(args[2][2]))
else
source = args[2][1]
end
local source_lang = zhlang
local source_langcode = source_lang:getCode()
local source_langname = source_lang:getFullName()
local ids = args.id and split(args.id, ",") or {""}
local sort = args.sort
if source == "+" then
source = pagename
end
local source_is_current_page = source == pagename
local copy_sortkey = (sort == nil) and source_is_current_page
local no_gloss = args.nogloss
local labels = args.lb and split_labels(args.lb) or {}
local to = args.to
local function issue_error(msg)
if source_is_current_page and is_preview() then
msg = msg .. ". NOTE: You are in preview mode. If you're previewing only part of the page, try previewing the full page, as the error may go away."
end
error(msg)
end
local content = mw.title.new(source):getContent()
if content == nil then
issue_error("Couldn't find the entry [[" .. source .. "]]")
end
-- Remove HTML comments.
content = remove_comments(content)
-- Remove <ref></ref> with nothing inside the first <ref>.
content = content:gsub("< *[rR][eE][fF] *>.-< */ *[rR][eE][fF] *>", "")
-- Remove <ref ...></ref> but don't get confused by inline modifiers <ref:...>.
content = content:gsub("< *[rR][eE][fF][^%a>/:][^>/]*>.-< */ *[rR][eE][fF] *>", "")
-- Remove <ref/> with nothing inside the <ref>.
content = content:gsub("< *[rR][eE][fF] */ *>", "")
-- Remove <ref .../> but don't get confused by inline modifiers <ref:...>.
content = content:gsub("< *[rR][eE][fF][^%a>/:][^>/]*/ *>", "")
-- TODO: Handle <nowiki> (it's more complex than just cutting it out too).
local retlines = {}
for _, id in ipairs(ids) do
local nolb
local found_labels = {}
local line_start, line
if id == "" then
id = nil
end
if id ~= nil then
local senseid_start, senseid_end = content:find("{{ *senseid *| *" .. pattern_escape(source_langcode) .. " *| *" .. pattern_escape(id) .. " *}}")
if senseid_start == nil then
senseid_start, senseid_end = content:find("{{ *sid *| *" .. pattern_escape(source_langcode) .. " *| *" .. pattern_escape(id) .. " *}}")
end
if senseid_start == nil then
local alternatives = nil
for id in content:gmatch("{{ *senseid *| *" .. pattern_escape(source_langcode) .. " *| *([^}]*)}}") do
alternatives = alternatives and alternatives .. ", " .. id or id
end
for id in content:gmatch("{{ *sid *| *" .. pattern_escape(source_langcode) .. " *| *([^}]*)}}") do
alternatives = alternatives and alternatives .. ", " .. id or id
end
if alternatives then
alternatives = ": Alternatives for |id= are: " .. alternatives
else
alternatives = ""
end
issue_error("Couldn't find the template {{[[Template:senseid|senseid]]|" .. source_langcode .. "|" .. id .. "}} within entry [[" .. source .. "]]" .. alternatives)
end
-- Do the following manually instead of using regex or iterators in hopes of saving memory.
local newline, pound = 10, 35
line_start = senseid_start
while line_start > 0 and content:byte(line_start - 1) ~= newline do line_start = line_start - 1 end
local def_start = line_start
while content:byte(def_start) == pound do def_start = def_start + 1 end
local line_end = senseid_end
while line_end < content:len() and content:byte(line_end + 1) ~= newline do line_end = line_end + 1 end
line = content:sub(def_start, senseid_start - 1) .. content:sub(senseid_end + 1, line_end)
else -- id == nil
--l10n: 更改為匹配「漢語」或「汉语」,並相容簡繁轉換
-- local _, start_source = find(content, "==[ \t]*" .. pattern_escape(source_langname) .. "[ \t]*==")
local _, start_source = find(content, "==[ \t]*[漢汉][語语][ \t]*==")
if not start_source then
issue_error(("Couldn't find L2 header for source language '%s' on page [[%s]]"):format(source_langname,
source))
end
-- Find index of start of next language; may be nil if no language follows.
local _, start_next_lang = find(content, "\n==[^=\n]+==", start_source, false)
content = content:sub(start_source, start_next_lang)
while true do
local next_line_start
_, next_line_start = find(content, "\n#+[^:*]", line_start, false)
if not next_line_start then
break
end
if line_start then
local first_line = match(content, "(.-)%f[\n%z]", line_start)
local next_line = match(content, "(.-)%f[\n%z]", next_line_start + 1)
issue_error(("No id specified and saw two definition lines '%s' and '%s' for source language '%s' on page [[%s]]"):format(
escape_wikicode(first_line), escape_wikicode(next_line), source_langname, source))
end
line_start = next_line_start + 1
end
if not line_start then
issue_error(("Couldn't find any definition lines for source language '%s' on page [[%s]]"):format(
source_langname, source))
end
line = match(content, "(.-)%f[\n%z]", line_start)
end
--[[
if to == nil then
local i = line_start
while i > 1 do
i = i - 1 -- i is now the index of the newline
while i > 1 and content:byte(i - 1) ~= 0xA do i = i - 1 end
local header = content:match("^===+([^=\n]+)===+ *\n", i)
if header then
to = (header:match("Verb") ~= nil)
break
end
end
end
]]--
-- TODO: Remove this error once <nowiki> is handled correctly (see above TODO).
if line:find("< *nowiki%W") or line:find("< */ *nowiki%W") then
error("Cannot handle <nowiki>")
end
-- Quick'n'dirty templatization of manual cats so that the below code also works for them.
for _, v in ipairs({{source_langcode .. ":", "c"}, {source_lang:getCanonicalName() .. " ", "cln"}, {"", "cat"}}) do
line = line:gsub("%[%[ *Category *: *" .. v[1] .. "([^%]|]*)%]%]", "{{" .. v[2] .. "|" .. source_langcode .. "|%1}}")
line = line:gsub("%[%[ *Category *%: *" .. v[1] .. "([^%]|]*)%|([^%]|]*)%]%]", "{{" .. v[2] .. "|" .. source_langcode .. "|%1|sort=%2}}")
end
-- Extract template information.
local cats = {}
local cats_cln = {}
local cats_top = {}
local encountered_label = false
local generator = nil
local sortkeys = {}
local sortkey_most_frequent = nil
local sortkey_most_frequent_n = 0
local function process_template(name, tempargs, is_at_the_start)
-- Expand any nested templates in template arguments.
for k, v in pairs(tempargs) do
tempargs[k] = preprocess(frame, v)
end
local supports_sortkey = false
local should_remove = true -- If set, removes the template from the line after processing.
local must_be_first = false -- If set, ensures that nothing (except for removed templates) preceeds this template.
local definition_template_handler = handle_definition_template {
name = name,
template_args = tempargs,
transclude_args = args,
place_form_of_directives = place_form_of_directives,
}
if definition_template_handler ~= nil then
if generator ~= nil then
error("Encountered {{[[Template:" .. name .. "|" .. name .. "]]}} even though a full definition template has already been processed")
end
should_remove = definition_template_handler.should_remove
must_be_first = definition_template_handler.must_be_first
generator = definition_template_handler.generate
elseif name == "categorize" or name == "cat" then
copy_unnamed_args_maybe_except_code(cats, tempargs)
supports_sortkey = true
elseif name == "catlangname" or name == "cln" then
copy_unnamed_args_maybe_except_code(cats, tempargs)
supports_sortkey = true
elseif name == "catlangcode" or name == "topics" or name == "top" or name == "C" or name == "c" then
copy_unnamed_args_maybe_except_code(cats_top, tempargs)
supports_sortkey = true
elseif name == "label" or name == "lbl" or name == "lb" then
if encountered_label then
error("Encountered multiple {{[[Template:label|label]]}} templates in the definition line")
end
encountered_label = true
copy_unnamed_args_maybe_except_code(found_labels, tempargs)
supports_sortkey = true
must_be_first = true
elseif name == "defdate" or name == "defdt" or name == "century" or name == "ref" or name == "refn" or name == "rfd-sense" or name == "rfv-sense" or name == "senseid" or name == "sid" then
-- Remove and do nothing.
else
-- We are dealing with a template other than the above hard-coded ones.
-- If it contains the language code, we cannot handle it.
if tempargs[1] == source_langcode then
error("Cannot handle template {{[[Template:" .. name .. "|" .. name .. "]]}}")
end
supports_sortkey = tempargs["sort"] or tempargs["sort1"] -- TODO: This doesn't handle the case where there is only sortn but not sort1/sort.
should_remove = false -- Leave the template in and just copy it, e.g. [[Template:,]], [[Template:gloss]], [[Template:qualifier]], [[Template:w]] etc.
end
if supports_sortkey then
if tempargs["sort1"] ~= nil then
error("Cannot handle multiple sort keys")
end
local sortkey = tempargs["sort"]
if sortkey ~= nil then
if sortkeys[sortkey] == nil then
sortkeys[sortkey] = 1
else
sortkeys[sortkey] = sortkeys[sortkey] + 1
end
if sortkeys[sortkey] > sortkey_most_frequent_n then
sortkey_most_frequent = sortkey
sortkey_most_frequent_n = sortkeys[sortkey]
end
end
end
if must_be_first and not is_at_the_start then
error("The template {{[[Template:" .. name .. "|" .. name .. "]]}} should occur to the front of the definition line")
end
return should_remove
end
line = remove_templates_if(line, process_template)
line = line:gsub("^%s+", ""):gsub("%s+$", "") -- Prune ends.
-- Tidy up the remaining definition (to be used as a gloss).
-- Truncate full sentences after a period, as they won't be formatted well as a gloss. Require a space after
-- the period as a possible way of reducing false positives with abbreviations.
local gloss = line
if not args.no_truncate_gloss then
-- l10n: 中文使用全形句號截斷,不需要英文縮寫防誤判邏輯
--[[
-- Substitute a list of known abbreviations that shouldn't mark the end-point of the gloss, which will be reinserted after truncation.
local abbrevs = {"A.D.", "B.C.", "B.C.E.", "c[af]?.", "C.E.", "e.g.", "fl.", "i.[ae].", "r.", "sc.", "scil.", "viz.", "vs?."}
local substitutes, i = {}, 0
local function insert_substitute(m)
i = i + 1
insert(substitutes, m)
return u(0x80000 + i)
end
for j, abbrev in ipairs(abbrevs) do
abbrev = abbrev:gsub("%.", "%%.")
:gsub("%f[^.].", " *%0")
abbrevs[j] = abbrev
gloss = gloss:gsub("%f[%S]" .. abbrev .. "%f[%s]", insert_substitute)
end
gloss = gloss:gsub("%s*%. .*$", "")
:gsub("\242[\128-\191]*", function(m)
return substitutes[codepoint(m) - 0x80000]
end)
]]--
gloss = gloss:gsub("。.*$", "")
end
-- l10n: 註解掉英文首字母小寫邏輯,將句尾半形句號改為去除全形句號
-- gloss = gloss:gsub("^%u", lower):gsub("%.$", "")
gloss = gloss:gsub("。$", "")
gloss = gloss:gsub("^{{1|([^}|]*)}}", "%1") -- Remove [[Template:1]]
local _, link_end, link_dest_head, link_dest_tail, link_face_head, link_face_tail = gloss:find("^%[%[(.)([^|%]]*)|(.)([^%]]*)%]%]") -- Remove [[foo|Foo]]
if link_end ~= nil and link_dest_tail == link_face_tail and link_face_head:lower() == link_dest_head then
gloss = "[[" .. link_dest_head .. link_dest_tail .. gloss:sub(link_end - 1)
end
gloss = preprocess(frame, gloss)
if copy_sortkey then
sort = sortkey_most_frequent
end
local formatted_senseid = ""
local formatted_senseid_close = ""
if id ~= nil then
formatted_senseid = senseid(language, id, "span")
if formatted_senseid:find("<span") then
formatted_senseid_close = "</span>"
end
end
local formatted_categories = args.nocat and "" or (
((next(cats ) == nil) and "" or frame:expandTemplate({title = "cat", args = {language_code, unpack(cats )}})) ..
((next(cats_cln) == nil) and "" or frame:expandTemplate({title = "cln", args = {language_code, unpack(cats_cln)}})) ..
((next(cats_top) == nil) and "" or frame:expandTemplate({title = "top", args = {language_code, unpack(cats_top)}}))
)
-- l10n: 中文動詞不加 to
-- local formatted_to = to and "to " or ""
local formatted_to = ""
local formatted_definition
if generator ~= nil then
local data = {
frame = frame, lang = language, source = source, source_lang = source_lang, id = id,
sort = sort, nocat = args.nocat, no_gloss = no_gloss, gloss = gloss, formatted_to = formatted_to,
}
formatted_definition = generator(data)
nolb = data.nolb or nolb
else
local formatted_link = full_link{term = source, lang = source_lang, id = id}
-- l10n: 移除全形括號前的空格
-- local formatted_gloss = no_gloss and "" or (" " .. gloss_left .. gloss .. gloss_right)
local formatted_gloss = no_gloss and "" or (gloss_left .. gloss .. gloss_right)
formatted_definition = formatted_to .. formatted_link .. formatted_gloss
end
nolb = args.nolb or nolb
local labels_to_ignore = nil
local ignore_all_labels = false
if nolb then
if nolb == "+" or nolb == "1" or nolb == "*" then
ignore_all_labels = true
else
labels_to_ignore = split_labels(nolb)
end
end
local this_labels = deep_copy(labels)
if not ignore_all_labels then
copy_unnamed_args_maybe_except_code(this_labels, found_labels, labels_to_ignore, 1)
end
local formatted_labels = (next(this_labels) == nil) and "" or (show_labels{labels = this_labels, lang = language, sort = sort} .. " ")
insert(retlines, formatted_senseid .. formatted_categories .. formatted_labels .. formatted_definition ..
formatted_senseid_close .. (args.dot and "。" or ""))
end
return concat(retlines, "\n" .. (args.indent or "#") .. " ")
end
return export
g2gqsfnfg4qv0jyeqbpc9efpi1hwu1g
9758845
9758646
2026-05-13T16:16:55Z
TongcyDai
53191
9758845
Scribunto
text/plain
local export = {}
local anchors_module = "Module:anchors"
local debug_track_module = "Module:debug/track"
local headword_data_module = "Module:headword/data"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local links_module = "Module:links"
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
local parse_interface_module = "Module:parse interface"
local place_module = "Module:place"
local string_char_module = "Module:string/char"
local string_pattern_escape_module = "Module:string/patternEscape"
local string_remove_comments_module = "Module:string/removeComments"
local string_replacement_escape_module = "Module:string/replacementEscape"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local template_parser_module = "Module:template parser"
local m_place = require(place_module)
local zhlang = require(languages_module).getByCode("zh")
local concat = table.concat
local find = string.find
local insert = table.insert
local ipairs = ipairs
local lower = string.lower
local match = string.match
local pairs = pairs
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function codepoint(...)
codepoint = require(string_utilities_module).codepoint
return codepoint(...)
end
local function contains(...)
contains = require(table_module).contains
return contains(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function find_templates(...)
find_templates = require(template_parser_module).find_templates
return find_templates(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function is_preview(...)
is_preview = require(pages_module).is_preview
return is_preview(...)
end
local function pattern_escape(...)
pattern_escape = require(string_pattern_escape_module)
return pattern_escape(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function remove_comments(...)
remove_comments = require(string_remove_comments_module)
return remove_comments(...)
end
local function replacement_escape(...)
replacement_escape = require(string_replacement_escape_module)
return replacement_escape(...)
end
local function senseid(...)
senseid = require(anchors_module).senseid
return senseid(...)
end
local function show_labels(...)
show_labels = require(labels_module).show_labels
return show_labels(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function u(...)
u = require(string_char_module)
return u(...)
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/transclude/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("transclude/" .. page)
return true
end
-- 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 list of labels. For compatibility, we allow splitting on semicolon, but will convert to splitting on
-- comma not followed by space, for compatibility with other modules/params.
local function split_labels(val)
if val:find(";") then
track("label-with-semicolon")
return split(val, ";")
else
return split_on_comma(val)
end
end
-- From [[Template:gloss]]
-- local gloss_left = '<span class="mention-gloss-paren">(</span><span class="mention-gloss">'
-- local gloss_right = '</span><span class="mention-gloss-paren">)</span>'
local gloss_left = '<span class="mention-gloss-paren">(</span><span class="mention-gloss">'
local gloss_right = '</span><span class="mention-gloss-paren">)</span>'
-- Ensure that Wikicode (template calls, bracketed links, HTML, bold/italics, etc.) displays literally in error messages
-- by inserting a Unicode word-joiner symbol after all characters that may trigger Wikicode interpretation. Replacing
-- with equivalent HTML escapes doesn't work because they are displayed literally. I could not get this to work using
-- <nowiki>...</nowiki> (those tags display literally), using using {{#tag:nowiki|...}} (same thing) or using
-- mw.getCurrentFrame():extensionTag("nowiki", ...) (everything gets converted to a strip marker
-- `UNIQ--nowiki-00000000-QINU` or similar). FIXME: This is a massive hack; there must be a better way.
local function escape_wikicode(text)
text = text:gsub("([%[<'{])", "%1" .. u(0x2060))
return text
end
local function preprocess(frame, text)
if text:find("{") or text:find("<math>") then
return frame:preprocess(text)
else
return text
end
end
local function ine(arg)
return arg ~= "" and arg or nil
end
local function discard(offset, iter, obj, index)
return iter, obj, index + offset
end
local function remove_templates_if(haystack, predicate)
local remaining = {}
local last_start = 1
for template in find_templates(haystack) do
local name = template:get_name()
if name ~= nil and predicate(name, template:get_arguments(), next(remaining) == nil) then
local index = template.index
if last_start < index then
local chunk = haystack:sub(last_start, index - 1)
if chunk:find("%S") then
insert(remaining, chunk)
end
end
last_start = index + template.raw:len()
end
end
if last_start == 1 then
return haystack
else
insert(remaining, haystack:sub(last_start))
return concat(remaining)
end
end
local function copy_unnamed_args_maybe_except_code(to, from, deny_list, first_argument)
first_argument = first_argument or 2
for _, value in discard(first_argument - 1, ipairs(from)) do
if not deny_list or not contains(deny_list, value) then
insert(to, value)
end
end
end
local function parse_form_of_directive(value, param)
local new_directive, new_value = value:match("^@([a-z -]+):(.*)$")
if not new_directive then
if param then
error(("Misformatted value %s=%s; should be e.g. 'place_acronym_of=" ..
"@init of:ehemalige jugoslawische Republik Mazedonien' to replace " ..
"'@acronym of:...' with '@init of:...'"):format(
param, value))
else
error(("Misformatted form-of directive '%s'; should be e.g. '@ellip of:Santiago del Estero'"):format(
value))
end
end
if not m_place.all_form_of_directives[new_directive] then
local known_directives = {}
for k, _ in pairs(m_place.all_form_of_directives) do
insert(known_directives, '"' .. k .. '"')
end
table.sort(known_directives)
known_directives = concat(known_directives, ", ")
if param then
error(("Unrecognized form-of directive '%s' in replacement @-directive %s=%s; " ..
"recognized directives are %s"):format(new_directive, param, value, known_directives))
else
error(("Unrecognized form-of directive '%s' in '%s'; recognized directives are %s"):format(
new_directive, value, known_directives))
end
else
-- canonicalize replacement directive aliases
new_directive = m_place.all_form_of_directives[new_directive].alias_of or new_directive
end
return new_directive, new_value
end
local function handle_definition_template(data)
local name, args, transclude_args = data.name, data.template_args, data.transclude_args
if name == "place" or name == "Place" then
local place_form_of_directives = data.place_form_of_directives
return {
should_remove = true,
must_be_first = true,
generate = function(data)
if data.formatted_to and data.formatted_to ~= "" then
error("{{place}} cannot be used in conjunction with |to=")
end
local place_args = {}
local langcode = data.lang:getCode()
local place_translation_follows = transclude_args.place_translation_follows
local include_place_extra_info = transclude_args.include_place_extra_info
local drop_extra = not include_place_extra_info -- false or unspecified
local extra_info_overridden_set = {}
for _, extra_info_spec in pairs(m_place.extra_info_args) do
local overriding_arg = transclude_args["place_" .. extra_info_spec.arg]
if overriding_arg and overriding_arg[1] then
extra_info_overridden_set[extra_info_spec.arg] = true
end
end
local form_of_overridden_args = {}
for form_of_directive, directive_spec in pairs(m_place.all_form_of_directives) do
if not directive_spec.alias_of then
local transclude_key = "place_" .. (form_of_directive:gsub(" ", "_"))
local transclude_value = transclude_args[transclude_key]
if transclude_value then
local new_directive, new_value
if transclude_value:find("^@") then
new_directive, new_value = parse_form_of_directive(transclude_value, transclude_key)
else
new_directive = form_of_directive
new_value = transclude_value
end
form_of_overridden_args[form_of_directive] = {
new_directive = new_directive,
new_value = new_value,
}
if directive_spec.default_foreign and place_translation_follows == nil then
place_translation_follows = true
end
end
end
end
place_args[1] = langcode
place_args.pagename = data.source
-- If form-of directives specified in the numeric args to {{tcl}}, they get inserted before any
-- numeric args taken from {{place}}.
local next_numarg = 2
for _, form_of_directive in ipairs(place_form_of_directives) do
place_args[next_numarg] = ("@%s:%s"):format(form_of_directive.directive, form_of_directive.value)
next_numarg = next_numarg + 1
end
local saw_tcl_t
local saw_t
-- Copy the arguments but drop translations, maybe the "extra info", and maybe the numbered args
-- (if tcl= given)
local tcl_arg = ine(args.tcl)
for key, val in pairs(args) do
local base = tostring(key):match("^(.-)(%d*)$")
if base == "tcl_t" or base == "tcl_tid" then
saw_tcl_t = true -- otherwise ignore
elseif base == "tcl_nolb" then
data.nolb = val -- otherwise ignore
elseif base == "t" or base == "tid" then
if transclude_args.t[1] then
-- ignore it if the user specified t= in {{tcl}}, otherwise keep it unless tcl_t is given
else
saw_t = true
end
elseif m_place.extra_info_arg_map[base] and extra_info_overridden_set[base] then
-- don't copy any extra info arguments that we will be overriding, in case there are more
-- original values than overrides for this particular argument
elseif base == "" then
if not tcl_arg and key > 1 then
-- We want keys starting at 2 to go into positions starting at `next_numarg`.
place_args[next_numarg + key - 2] = val
end
else
place_args[key] = val
end
end
local function sub_plus(t)
if t:find("+") then
t = t:gsub("+", replacement_escape(data.source))
end
return t
end
-- If tcl= given, copy its value into the numeric args.
if tcl_arg then
place_args[next_numarg] = tcl_arg
next_numarg = next_numarg + 1
place_args.a = nil
end
if transclude_args.t[1] then
local argno = 1
for _, t in ipairs(transclude_args.t) do
if t ~= "-" then
place_args["t" .. (argno == 1 and "" or argno)] = sub_plus(t)
argno = argno + 1
end
end
elseif langcode ~= "zh" then
if saw_tcl_t then
for key, val in pairs(args) do
local base, num = tostring(key):match("^(.-)(%d*)$")
if base == "tcl_t" then
place_args["t" .. num] = sub_plus(val)
elseif base == "tcl_tid" then
place_args["tid" .. num] = val
end
end
elseif saw_t then
for key, val in pairs(args) do
local base = tostring(key):match("^(.-)(%d*)$")
if base == "t" or base == "tid" then
place_args[key] = val
end
end
else
place_args["t"] = data.source
place_args["tid"] = data.id
end
end
place_args["sort"] = data.sort
if data.nocat then
place_args["nocat"] = "1"
end
if transclude_args.place_addl then
place_args.addl = transclude_args.place_addl
end
if data.no_gloss then
place_args["def"] = "-"
else
local gloss = data.gloss
-- Copy overriding extra info values. They are in the term language rather than Chinese,
-- which we signal through `extra_info_overridden_set`.
for _, extra_info_spec in pairs(m_place.extra_info_args) do
for i, v in ipairs(transclude_args["place_" .. extra_info_spec.arg]) do
place_args[extra_info_spec.arg .. (i == 1 and "" or i)] = v
end
end
if not args.tcl_noextratext and not tcl_arg and gloss ~= "" then
-- Copy text after {{place}} into {{place}}, unless tcl= or tcl_noextratext= is given.
local first_free = 2
while place_args[first_free] ~= nil do first_free = first_free + 1 end
if place_args[first_free - 1]:find("<<") then
-- new-style argument; concatenate to end of argument
if not gloss:find("^[,;.]") then
gloss = " " .. gloss
end
place_args[first_free - 1] = place_args[first_free - 1] .. gloss
else
-- old-style argument; add as separate argument
if gloss:find("^,") then
place_args[first_free] = gloss:gsub("^, *", "")
elseif gloss:find("^;") then
place_args[first_free] = ";"
place_args[first_free + 1] = gloss:gsub("^; *", "")
else
-- the "*" ensures no extra comma
place_args[first_free] = "*" .. gloss:gsub("^ *", "")
end
end
end
end
return m_place.format {
template_args = place_args,
from_tcl = true,
drop_extra_info = drop_extra,
extra_info_overridden_set = extra_info_overridden_set,
form_of_overridden_args = form_of_overridden_args,
translation_follows = place_translation_follows,
}
end,
}
elseif name == "abbreviation of" or name == "abbr of" or name == "abbrev of"
or name == "acronym of" or name == "ellipsis of"
or name == "contraction of" or name == "contr of"
or name == "initialism of" or name == "init of"
or name == "short for" or name == "synonym of" then
return {
should_remove = true,
must_be_first = true,
generate = function(data)
local formatted_gloss = ""
if not data.no_gloss then
local formatted_link = full_link{
term = args[2], alt = args[3], lang = data.source_lang, id = args["id"]
}
local after_link = ""
if data.gloss ~= "" then
local separator = (args["nodot"] and "") or ((args["dot"] or ";") .. " ")
after_link = separator .. data.gloss
end
-- formatted_gloss = " " .. gloss_left .. formatted_link .. after_link .. gloss_right
formatted_gloss = gloss_left .. formatted_link .. after_link .. gloss_right
end
return data.formatted_to .. full_link{
term = data.source, lang = data.source_lang, id = data.id
} .. formatted_gloss
end,
}
end
return nil
end
function export.show(frame)
local boolean = {type = "boolean"}
local list = {list = true}
local required = {required = true}
local params = {
[1] = {required = true, type = "language"}, -- langcode of target language (the current entry's language)
[2] = {list = true, required = true}, -- source Chinese term to transclude from and/or form-or directives
id = true, -- can have multiple comma-separated IDs
sort = true,
nogloss = {default = false, type = "boolean"},
no_truncate_gloss = boolean,
-- Normally, we ignore most of the extra info (capital, largest city, official name, etc.) when transcluding
-- {{place}} because the given terms are in Chinese and will likely differ from language to language.
include_place_extra_info = boolean,
-- Normally the translation (the transcluded page or overriding value in t=) comes first with the definition
-- following in parens, but that may not produce sensible results in some cases.
place_translation_follows = boolean,
place_addl = true,
lb = true, -- can have multiple comma-separated or (for compatibility) semicolon-separated labels
nolb = true, -- can have multiple comma-separated or (for compatibility) semicolon-separated labels
nocat = boolean,
to = boolean,
t = list,
indent = true,
dot = boolean,
pagename = true,
}
for _, extra_arg_spec in ipairs(m_place.extra_info_args) do
params["place_" .. extra_arg_spec.arg] = list
end
for form_of_directive, directive_spec in pairs(m_place.all_form_of_directives) do
params["place_" .. (form_of_directive:gsub(" ", "_"))] = directive_spec.alias_of and
{alias_of = "place_" .. (directive_spec.alias_of:gsub(" ", "_"))} or true
end
local args = process_params(frame:getParent().args, params)
local pagename = args.pagename or mw.loadData(headword_data_module).pagename
local language = args[1]
local language_code = language:getCode()
local source
local place_form_of_directives = {}
if args[2][1]:find("^@") then
-- form-of directives in place of source
for i, arg in ipairs(args[2]) do
if arg:find("^@") then
local directive, value = parse_form_of_directive(arg)
insert(place_form_of_directives, {
directive = directive,
value = value,
})
elseif i ~= #args[2] then
error(("When form-of directives are specified, the source must come last, but saw source %s=%s " ..
"when higher-numbered arguments exist"):format(i + 1, arg))
else
source = arg
end
end
if not source then
source = place_form_of_directives[#place_form_of_directives].value:gsub("<.*", "")
end
elseif args[2][2] then
error(("Extraneous argument 3=%s"):format(args[2][2]))
else
source = args[2][1]
end
local source_lang = zhlang
local source_langcode = source_lang:getCode()
local source_langname = source_lang:getFullName()
local ids = args.id and split(args.id, ",") or {""}
local sort = args.sort
if source == "+" then
source = pagename
end
local source_is_current_page = source == pagename
local copy_sortkey = (sort == nil) and source_is_current_page
local no_gloss = args.nogloss
local labels = args.lb and split_labels(args.lb) or {}
local to = args.to
local function issue_error(msg)
if source_is_current_page and is_preview() then
msg = msg .. ". NOTE: You are in preview mode. If you're previewing only part of the page, try previewing the full page, as the error may go away."
end
error(msg)
end
local content = mw.title.new(source):getContent()
if content == nil then
issue_error("Couldn't find the entry [[" .. source .. "]]")
end
-- Remove HTML comments.
content = remove_comments(content)
-- Remove <ref></ref> with nothing inside the first <ref>.
content = content:gsub("< *[rR][eE][fF] *>.-< */ *[rR][eE][fF] *>", "")
-- Remove <ref ...></ref> but don't get confused by inline modifiers <ref:...>.
content = content:gsub("< *[rR][eE][fF][^%a>/:][^>/]*>.-< */ *[rR][eE][fF] *>", "")
-- Remove <ref/> with nothing inside the <ref>.
content = content:gsub("< *[rR][eE][fF] */ *>", "")
-- Remove <ref .../> but don't get confused by inline modifiers <ref:...>.
content = content:gsub("< *[rR][eE][fF][^%a>/:][^>/]*/ *>", "")
-- TODO: Handle <nowiki> (it's more complex than just cutting it out too).
local retlines = {}
for _, id in ipairs(ids) do
local nolb
local found_labels = {}
local line_start, line
if id == "" then
id = nil
end
if id ~= nil then
local senseid_start, senseid_end = content:find("{{ *senseid *| *" .. pattern_escape(source_langcode) .. " *| *" .. pattern_escape(id) .. " *}}")
if senseid_start == nil then
senseid_start, senseid_end = content:find("{{ *sid *| *" .. pattern_escape(source_langcode) .. " *| *" .. pattern_escape(id) .. " *}}")
end
if senseid_start == nil then
local alternatives = nil
for id in content:gmatch("{{ *senseid *| *" .. pattern_escape(source_langcode) .. " *| *([^}]*)}}") do
alternatives = alternatives and alternatives .. ", " .. id or id
end
for id in content:gmatch("{{ *sid *| *" .. pattern_escape(source_langcode) .. " *| *([^}]*)}}") do
alternatives = alternatives and alternatives .. ", " .. id or id
end
if alternatives then
alternatives = ": Alternatives for |id= are: " .. alternatives
else
alternatives = ""
end
issue_error("Couldn't find the template {{[[Template:senseid|senseid]]|" .. source_langcode .. "|" .. id .. "}} within entry [[" .. source .. "]]" .. alternatives)
end
-- Do the following manually instead of using regex or iterators in hopes of saving memory.
local newline, pound = 10, 35
line_start = senseid_start
while line_start > 0 and content:byte(line_start - 1) ~= newline do line_start = line_start - 1 end
local def_start = line_start
while content:byte(def_start) == pound do def_start = def_start + 1 end
local line_end = senseid_end
while line_end < content:len() and content:byte(line_end + 1) ~= newline do line_end = line_end + 1 end
line = content:sub(def_start, senseid_start - 1) .. content:sub(senseid_end + 1, line_end)
else -- id == nil
--l10n: 更改為匹配「漢語」或「汉语」,並相容簡繁轉換
-- local _, start_source = find(content, "==[ \t]*" .. pattern_escape(source_langname) .. "[ \t]*==")
local _, start_source = find(content, "==[ \t]*[漢汉][語语][ \t]*==")
if not start_source then
issue_error(("Couldn't find L2 header for source language '%s' on page [[%s]]"):format(source_langname,
source))
end
-- Find index of start of next language; may be nil if no language follows.
local _, start_next_lang = find(content, "\n==[^=\n]+==", start_source, false)
content = content:sub(start_source, start_next_lang)
while true do
local next_line_start
_, next_line_start = find(content, "\n#+[^:*]", line_start, false)
if not next_line_start then
break
end
if line_start then
local first_line = match(content, "(.-)%f[\n%z]", line_start)
local next_line = match(content, "(.-)%f[\n%z]", next_line_start + 1)
issue_error(("No id specified and saw two definition lines '%s' and '%s' for source language '%s' on page [[%s]]"):format(
escape_wikicode(first_line), escape_wikicode(next_line), source_langname, source))
end
line_start = next_line_start + 1
end
if not line_start then
issue_error(("Couldn't find any definition lines for source language '%s' on page [[%s]]"):format(
source_langname, source))
end
line = match(content, "(.-)%f[\n%z]", line_start)
end
--[[
if to == nil then
local i = line_start
while i > 1 do
i = i - 1 -- i is now the index of the newline
while i > 1 and content:byte(i - 1) ~= 0xA do i = i - 1 end
local header = content:match("^===+([^=\n]+)===+ *\n", i)
if header then
to = (header:match("Verb") ~= nil)
break
end
end
end
]]--
-- TODO: Remove this error once <nowiki> is handled correctly (see above TODO).
if line:find("< *nowiki%W") or line:find("< */ *nowiki%W") then
error("Cannot handle <nowiki>")
end
-- Quick'n'dirty templatization of manual cats so that the below code also works for them.
for _, v in ipairs({{source_langcode .. ":", "c"}, {source_lang:getCanonicalName() .. " ", "cln"}, {"", "cat"}}) do
line = line:gsub("%[%[ *Category *: *" .. v[1] .. "([^%]|]*)%]%]", "{{" .. v[2] .. "|" .. source_langcode .. "|%1}}")
line = line:gsub("%[%[ *Category *%: *" .. v[1] .. "([^%]|]*)%|([^%]|]*)%]%]", "{{" .. v[2] .. "|" .. source_langcode .. "|%1|sort=%2}}")
end
-- Extract template information.
local cats = {}
local cats_cln = {}
local cats_top = {}
local encountered_label = false
local generator = nil
local sortkeys = {}
local sortkey_most_frequent = nil
local sortkey_most_frequent_n = 0
local function process_template(name, tempargs, is_at_the_start)
-- Expand any nested templates in template arguments.
for k, v in pairs(tempargs) do
tempargs[k] = preprocess(frame, v)
end
local supports_sortkey = false
local should_remove = true -- If set, removes the template from the line after processing.
local must_be_first = false -- If set, ensures that nothing (except for removed templates) preceeds this template.
local definition_template_handler = handle_definition_template {
name = name,
template_args = tempargs,
transclude_args = args,
place_form_of_directives = place_form_of_directives,
}
if definition_template_handler ~= nil then
if generator ~= nil then
error("Encountered {{[[Template:" .. name .. "|" .. name .. "]]}} even though a full definition template has already been processed")
end
should_remove = definition_template_handler.should_remove
must_be_first = definition_template_handler.must_be_first
generator = definition_template_handler.generate
elseif name == "categorize" or name == "cat" then
copy_unnamed_args_maybe_except_code(cats, tempargs)
supports_sortkey = true
elseif name == "catlangname" or name == "cln" then
copy_unnamed_args_maybe_except_code(cats, tempargs)
supports_sortkey = true
elseif name == "catlangcode" or name == "topics" or name == "top" or name == "C" or name == "c" then
copy_unnamed_args_maybe_except_code(cats_top, tempargs)
supports_sortkey = true
elseif name == "label" or name == "lbl" or name == "lb" then
if encountered_label then
error("Encountered multiple {{[[Template:label|label]]}} templates in the definition line")
end
encountered_label = true
copy_unnamed_args_maybe_except_code(found_labels, tempargs)
supports_sortkey = true
must_be_first = true
elseif name == "defdate" or name == "defdt" or name == "century" or name == "ref" or name == "refn" or name == "rfd-sense" or name == "rfv-sense" or name == "senseid" or name == "sid" then
-- Remove and do nothing.
else
-- We are dealing with a template other than the above hard-coded ones.
-- If it contains the language code, we cannot handle it.
if tempargs[1] == source_langcode then
error("Cannot handle template {{[[Template:" .. name .. "|" .. name .. "]]}}")
end
supports_sortkey = tempargs["sort"] or tempargs["sort1"] -- TODO: This doesn't handle the case where there is only sortn but not sort1/sort.
should_remove = false -- Leave the template in and just copy it, e.g. [[Template:,]], [[Template:gloss]], [[Template:qualifier]], [[Template:w]] etc.
end
if supports_sortkey then
if tempargs["sort1"] ~= nil then
error("Cannot handle multiple sort keys")
end
local sortkey = tempargs["sort"]
if sortkey ~= nil then
if sortkeys[sortkey] == nil then
sortkeys[sortkey] = 1
else
sortkeys[sortkey] = sortkeys[sortkey] + 1
end
if sortkeys[sortkey] > sortkey_most_frequent_n then
sortkey_most_frequent = sortkey
sortkey_most_frequent_n = sortkeys[sortkey]
end
end
end
if must_be_first and not is_at_the_start then
error("The template {{[[Template:" .. name .. "|" .. name .. "]]}} should occur to the front of the definition line")
end
return should_remove
end
line = remove_templates_if(line, process_template)
line = line:gsub("^%s+", ""):gsub("%s+$", "") -- Prune ends.
-- Tidy up the remaining definition (to be used as a gloss).
-- Truncate full sentences after a period, as they won't be formatted well as a gloss. Require a space after
-- the period as a possible way of reducing false positives with abbreviations.
local gloss = line
if not args.no_truncate_gloss then
-- l10n: 中文使用全形句號截斷,不需要英文縮寫防誤判邏輯
--[[
-- Substitute a list of known abbreviations that shouldn't mark the end-point of the gloss, which will be reinserted after truncation.
local abbrevs = {"A.D.", "B.C.", "B.C.E.", "c[af]?.", "C.E.", "e.g.", "fl.", "i.[ae].", "r.", "sc.", "scil.", "viz.", "vs?."}
local substitutes, i = {}, 0
local function insert_substitute(m)
i = i + 1
insert(substitutes, m)
return u(0x80000 + i)
end
for j, abbrev in ipairs(abbrevs) do
abbrev = abbrev:gsub("%.", "%%.")
:gsub("%f[^.].", " *%0")
abbrevs[j] = abbrev
gloss = gloss:gsub("%f[%S]" .. abbrev .. "%f[%s]", insert_substitute)
end
gloss = gloss:gsub("%s*%. .*$", "")
:gsub("\242[\128-\191]*", function(m)
return substitutes[codepoint(m) - 0x80000]
end)
]]--
gloss = gloss:gsub("。.*$", "")
end
-- l10n: 註解掉英文首字母小寫邏輯,將句尾半形句號改為去除全形句號
-- gloss = gloss:gsub("^%u", lower):gsub("%.$", "")
gloss = gloss:gsub("。$", "")
gloss = gloss:gsub("^{{1|([^}|]*)}}", "%1") -- Remove [[Template:1]]
local _, link_end, link_dest_head, link_dest_tail, link_face_head, link_face_tail = gloss:find("^%[%[(.)([^|%]]*)|(.)([^%]]*)%]%]") -- Remove [[foo|Foo]]
if link_end ~= nil and link_dest_tail == link_face_tail and link_face_head:lower() == link_dest_head then
gloss = "[[" .. link_dest_head .. link_dest_tail .. gloss:sub(link_end - 1)
end
gloss = preprocess(frame, gloss)
if copy_sortkey then
sort = sortkey_most_frequent
end
local formatted_senseid = ""
local formatted_senseid_close = ""
if id ~= nil then
formatted_senseid = senseid(language, id, "span")
if formatted_senseid:find("<span") then
formatted_senseid_close = "</span>"
end
end
local formatted_categories = args.nocat and "" or (
((next(cats ) == nil) and "" or frame:expandTemplate({title = "cat", args = {language_code, unpack(cats )}})) ..
((next(cats_cln) == nil) and "" or frame:expandTemplate({title = "cln", args = {language_code, unpack(cats_cln)}})) ..
((next(cats_top) == nil) and "" or frame:expandTemplate({title = "top", args = {language_code, unpack(cats_top)}}))
)
-- l10n: 中文動詞不加 to
-- local formatted_to = to and "to " or ""
local formatted_to = ""
local formatted_definition
if generator ~= nil then
local data = {
frame = frame, lang = language, source = source, source_lang = source_lang, id = id,
sort = sort, nocat = args.nocat, no_gloss = no_gloss, gloss = gloss, formatted_to = formatted_to,
}
formatted_definition = generator(data)
nolb = data.nolb or nolb
else
local formatted_link = full_link{term = source, lang = source_lang, id = id}
-- l10n: 移除全形括號前的空格
-- local formatted_gloss = no_gloss and "" or (" " .. gloss_left .. gloss .. gloss_right)
local formatted_gloss = no_gloss and "" or (gloss_left .. gloss .. gloss_right)
formatted_definition = formatted_to .. formatted_link .. formatted_gloss
end
nolb = args.nolb or nolb
local labels_to_ignore = nil
local ignore_all_labels = false
if nolb then
if nolb == "+" or nolb == "1" or nolb == "*" then
ignore_all_labels = true
else
labels_to_ignore = split_labels(nolb)
end
end
local this_labels = deep_copy(labels)
if not ignore_all_labels then
copy_unnamed_args_maybe_except_code(this_labels, found_labels, labels_to_ignore, 1)
end
local formatted_labels = (next(this_labels) == nil) and "" or (show_labels{labels = this_labels, lang = language, sort = sort} .. " ")
insert(retlines, formatted_senseid .. formatted_categories .. formatted_labels .. formatted_definition ..
formatted_senseid_close .. (args.dot and "。" or ""))
end
return concat(retlines, "\n" .. (args.indent or "#") .. " ")
end
return export
6o5lovgv134rv496duuqlyw3fuszb7k
9759364
9758845
2026-05-14T10:46:22Z
TongcyDai
53191
remove zh-div
9759364
Scribunto
text/plain
local export = {}
local anchors_module = "Module:anchors"
local debug_track_module = "Module:debug/track"
local headword_data_module = "Module:headword/data"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local links_module = "Module:links"
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
local parse_interface_module = "Module:parse interface"
local place_module = "Module:place"
local string_char_module = "Module:string/char"
local string_pattern_escape_module = "Module:string/patternEscape"
local string_remove_comments_module = "Module:string/removeComments"
local string_replacement_escape_module = "Module:string/replacementEscape"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local template_parser_module = "Module:template parser"
local m_place = require(place_module)
local zhlang = require(languages_module).getByCode("zh")
local concat = table.concat
local find = string.find
local insert = table.insert
local ipairs = ipairs
local lower = string.lower
local match = string.match
local pairs = pairs
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function codepoint(...)
codepoint = require(string_utilities_module).codepoint
return codepoint(...)
end
local function contains(...)
contains = require(table_module).contains
return contains(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function find_templates(...)
find_templates = require(template_parser_module).find_templates
return find_templates(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function is_preview(...)
is_preview = require(pages_module).is_preview
return is_preview(...)
end
local function pattern_escape(...)
pattern_escape = require(string_pattern_escape_module)
return pattern_escape(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function remove_comments(...)
remove_comments = require(string_remove_comments_module)
return remove_comments(...)
end
local function replacement_escape(...)
replacement_escape = require(string_replacement_escape_module)
return replacement_escape(...)
end
local function senseid(...)
senseid = require(anchors_module).senseid
return senseid(...)
end
local function show_labels(...)
show_labels = require(labels_module).show_labels
return show_labels(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function u(...)
u = require(string_char_module)
return u(...)
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/transclude/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("transclude/" .. page)
return true
end
-- 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 list of labels. For compatibility, we allow splitting on semicolon, but will convert to splitting on
-- comma not followed by space, for compatibility with other modules/params.
local function split_labels(val)
if val:find(";") then
track("label-with-semicolon")
return split(val, ";")
else
return split_on_comma(val)
end
end
-- From [[Template:gloss]]
-- local gloss_left = '<span class="mention-gloss-paren">(</span><span class="mention-gloss">'
-- local gloss_right = '</span><span class="mention-gloss-paren">)</span>'
local gloss_left = '<span class="mention-gloss-paren">(</span><span class="mention-gloss">'
local gloss_right = '</span><span class="mention-gloss-paren">)</span>'
-- Ensure that Wikicode (template calls, bracketed links, HTML, bold/italics, etc.) displays literally in error messages
-- by inserting a Unicode word-joiner symbol after all characters that may trigger Wikicode interpretation. Replacing
-- with equivalent HTML escapes doesn't work because they are displayed literally. I could not get this to work using
-- <nowiki>...</nowiki> (those tags display literally), using using {{#tag:nowiki|...}} (same thing) or using
-- mw.getCurrentFrame():extensionTag("nowiki", ...) (everything gets converted to a strip marker
-- `UNIQ--nowiki-00000000-QINU` or similar). FIXME: This is a massive hack; there must be a better way.
local function escape_wikicode(text)
text = text:gsub("([%[<'{])", "%1" .. u(0x2060))
return text
end
local function preprocess(frame, text)
if text:find("{") or text:find("<math>") then
return frame:preprocess(text)
else
return text
end
end
local function ine(arg)
return arg ~= "" and arg or nil
end
local function discard(offset, iter, obj, index)
return iter, obj, index + offset
end
local function remove_templates_if(haystack, predicate)
local remaining = {}
local last_start = 1
for template in find_templates(haystack) do
local name = template:get_name()
if name ~= nil and predicate(name, template:get_arguments(), next(remaining) == nil) then
local index = template.index
if last_start < index then
local chunk = haystack:sub(last_start, index - 1)
if chunk:find("%S") then
insert(remaining, chunk)
end
end
last_start = index + template.raw:len()
end
end
if last_start == 1 then
return haystack
else
insert(remaining, haystack:sub(last_start))
return concat(remaining)
end
end
local function copy_unnamed_args_maybe_except_code(to, from, deny_list, first_argument)
first_argument = first_argument or 2
for _, value in discard(first_argument - 1, ipairs(from)) do
if not deny_list or not contains(deny_list, value) then
insert(to, value)
end
end
end
local function parse_form_of_directive(value, param)
local new_directive, new_value = value:match("^@([a-z -]+):(.*)$")
if not new_directive then
if param then
error(("Misformatted value %s=%s; should be e.g. 'place_acronym_of=" ..
"@init of:ehemalige jugoslawische Republik Mazedonien' to replace " ..
"'@acronym of:...' with '@init of:...'"):format(
param, value))
else
error(("Misformatted form-of directive '%s'; should be e.g. '@ellip of:Santiago del Estero'"):format(
value))
end
end
if not m_place.all_form_of_directives[new_directive] then
local known_directives = {}
for k, _ in pairs(m_place.all_form_of_directives) do
insert(known_directives, '"' .. k .. '"')
end
table.sort(known_directives)
known_directives = concat(known_directives, ", ")
if param then
error(("Unrecognized form-of directive '%s' in replacement @-directive %s=%s; " ..
"recognized directives are %s"):format(new_directive, param, value, known_directives))
else
error(("Unrecognized form-of directive '%s' in '%s'; recognized directives are %s"):format(
new_directive, value, known_directives))
end
else
-- canonicalize replacement directive aliases
new_directive = m_place.all_form_of_directives[new_directive].alias_of or new_directive
end
return new_directive, new_value
end
local function handle_definition_template(data)
local name, args, transclude_args = data.name, data.template_args, data.transclude_args
if name == "place" or name == "Place" then
local place_form_of_directives = data.place_form_of_directives
return {
should_remove = true,
must_be_first = true,
generate = function(data)
if data.formatted_to and data.formatted_to ~= "" then
error("{{place}} cannot be used in conjunction with |to=")
end
local place_args = {}
local langcode = data.lang:getCode()
local place_translation_follows = transclude_args.place_translation_follows
local include_place_extra_info = transclude_args.include_place_extra_info
local drop_extra = not include_place_extra_info -- false or unspecified
local extra_info_overridden_set = {}
for _, extra_info_spec in pairs(m_place.extra_info_args) do
local overriding_arg = transclude_args["place_" .. extra_info_spec.arg]
if overriding_arg and overriding_arg[1] then
extra_info_overridden_set[extra_info_spec.arg] = true
end
end
local form_of_overridden_args = {}
for form_of_directive, directive_spec in pairs(m_place.all_form_of_directives) do
if not directive_spec.alias_of then
local transclude_key = "place_" .. (form_of_directive:gsub(" ", "_"))
local transclude_value = transclude_args[transclude_key]
if transclude_value then
local new_directive, new_value
if transclude_value:find("^@") then
new_directive, new_value = parse_form_of_directive(transclude_value, transclude_key)
else
new_directive = form_of_directive
new_value = transclude_value
end
form_of_overridden_args[form_of_directive] = {
new_directive = new_directive,
new_value = new_value,
}
if directive_spec.default_foreign and place_translation_follows == nil then
place_translation_follows = true
end
end
end
end
place_args[1] = langcode
place_args.pagename = data.source
-- If form-of directives specified in the numeric args to {{tcl}}, they get inserted before any
-- numeric args taken from {{place}}.
local next_numarg = 2
for _, form_of_directive in ipairs(place_form_of_directives) do
place_args[next_numarg] = ("@%s:%s"):format(form_of_directive.directive, form_of_directive.value)
next_numarg = next_numarg + 1
end
local saw_tcl_t
local saw_t
-- Copy the arguments but drop translations, maybe the "extra info", and maybe the numbered args
-- (if tcl= given)
local tcl_arg = ine(args.tcl)
for key, val in pairs(args) do
local base = tostring(key):match("^(.-)(%d*)$")
if base == "tcl_t" or base == "tcl_tid" then
saw_tcl_t = true -- otherwise ignore
elseif base == "tcl_nolb" then
data.nolb = val -- otherwise ignore
elseif base == "t" or base == "tid" then
if transclude_args.t[1] then
-- ignore it if the user specified t= in {{tcl}}, otherwise keep it unless tcl_t is given
else
saw_t = true
end
elseif m_place.extra_info_arg_map[base] and extra_info_overridden_set[base] then
-- don't copy any extra info arguments that we will be overriding, in case there are more
-- original values than overrides for this particular argument
elseif base == "" then
if not tcl_arg and key > 1 then
-- We want keys starting at 2 to go into positions starting at `next_numarg`.
place_args[next_numarg + key - 2] = val
end
else
place_args[key] = val
end
end
local function sub_plus(t)
if t:find("+") then
t = t:gsub("+", replacement_escape(data.source))
end
return t
end
-- If tcl= given, copy its value into the numeric args.
if tcl_arg then
place_args[next_numarg] = tcl_arg
next_numarg = next_numarg + 1
place_args.a = nil
end
if transclude_args.t[1] then
local argno = 1
for _, t in ipairs(transclude_args.t) do
if t ~= "-" then
place_args["t" .. (argno == 1 and "" or argno)] = sub_plus(t)
argno = argno + 1
end
end
elseif langcode ~= "zh" then
if saw_tcl_t then
for key, val in pairs(args) do
local base, num = tostring(key):match("^(.-)(%d*)$")
if base == "tcl_t" then
place_args["t" .. num] = sub_plus(val)
elseif base == "tcl_tid" then
place_args["tid" .. num] = val
end
end
elseif saw_t then
for key, val in pairs(args) do
local base = tostring(key):match("^(.-)(%d*)$")
if base == "t" or base == "tid" then
place_args[key] = val
end
end
else
place_args["t"] = data.source
place_args["tid"] = data.id
end
end
place_args["sort"] = data.sort
if data.nocat then
place_args["nocat"] = "1"
end
if transclude_args.place_addl then
place_args.addl = transclude_args.place_addl
end
if data.no_gloss then
place_args["def"] = "-"
else
local gloss = data.gloss
-- Copy overriding extra info values. They are in the term language rather than Chinese,
-- which we signal through `extra_info_overridden_set`.
for _, extra_info_spec in pairs(m_place.extra_info_args) do
for i, v in ipairs(transclude_args["place_" .. extra_info_spec.arg]) do
place_args[extra_info_spec.arg .. (i == 1 and "" or i)] = v
end
end
if not args.tcl_noextratext and not tcl_arg and gloss ~= "" then
-- Copy text after {{place}} into {{place}}, unless tcl= or tcl_noextratext= is given.
local first_free = 2
while place_args[first_free] ~= nil do first_free = first_free + 1 end
if place_args[first_free - 1]:find("<<") then
-- new-style argument; concatenate to end of argument
if not gloss:find("^[,;.]") then
gloss = " " .. gloss
end
place_args[first_free - 1] = place_args[first_free - 1] .. gloss
else
-- old-style argument; add as separate argument
if gloss:find("^,") then
place_args[first_free] = gloss:gsub("^, *", "")
elseif gloss:find("^;") then
place_args[first_free] = ";"
place_args[first_free + 1] = gloss:gsub("^; *", "")
else
-- the "*" ensures no extra comma
place_args[first_free] = "*" .. gloss:gsub("^ *", "")
end
end
end
end
return m_place.format {
template_args = place_args,
from_tcl = true,
drop_extra_info = drop_extra,
extra_info_overridden_set = extra_info_overridden_set,
form_of_overridden_args = form_of_overridden_args,
translation_follows = place_translation_follows,
}
end,
}
elseif name == "abbreviation of" or name == "abbr of" or name == "abbrev of"
or name == "acronym of" or name == "ellipsis of"
or name == "contraction of" or name == "contr of"
or name == "initialism of" or name == "init of"
or name == "short for" or name == "synonym of" then
return {
should_remove = true,
must_be_first = true,
generate = function(data)
local formatted_gloss = ""
if not data.no_gloss then
local formatted_link = full_link{
term = args[2], alt = args[3], lang = data.source_lang, id = args["id"]
}
local after_link = ""
if data.gloss ~= "" then
local separator = (args["nodot"] and "") or ((args["dot"] or ";") .. " ")
after_link = separator .. data.gloss
end
-- formatted_gloss = " " .. gloss_left .. formatted_link .. after_link .. gloss_right
formatted_gloss = gloss_left .. formatted_link .. after_link .. gloss_right
end
return data.formatted_to .. full_link{
term = data.source, lang = data.source_lang, id = data.id
} .. formatted_gloss
end,
}
end
return nil
end
function export.show(frame)
local boolean = {type = "boolean"}
local list = {list = true}
local required = {required = true}
local params = {
[1] = {required = true, type = "language"}, -- langcode of target language (the current entry's language)
[2] = {list = true, required = true}, -- source Chinese term to transclude from and/or form-or directives
id = true, -- can have multiple comma-separated IDs
sort = true,
nogloss = {default = false, type = "boolean"},
no_truncate_gloss = boolean,
-- Normally, we ignore most of the extra info (capital, largest city, official name, etc.) when transcluding
-- {{place}} because the given terms are in Chinese and will likely differ from language to language.
include_place_extra_info = boolean,
-- Normally the translation (the transcluded page or overriding value in t=) comes first with the definition
-- following in parens, but that may not produce sensible results in some cases.
place_translation_follows = boolean,
place_addl = true,
lb = true, -- can have multiple comma-separated or (for compatibility) semicolon-separated labels
nolb = true, -- can have multiple comma-separated or (for compatibility) semicolon-separated labels
nocat = boolean,
to = boolean,
t = list,
indent = true,
dot = boolean,
pagename = true,
}
for _, extra_arg_spec in ipairs(m_place.extra_info_args) do
params["place_" .. extra_arg_spec.arg] = list
end
for form_of_directive, directive_spec in pairs(m_place.all_form_of_directives) do
params["place_" .. (form_of_directive:gsub(" ", "_"))] = directive_spec.alias_of and
{alias_of = "place_" .. (directive_spec.alias_of:gsub(" ", "_"))} or true
end
local args = process_params(frame:getParent().args, params)
local pagename = args.pagename or mw.loadData(headword_data_module).pagename
local language = args[1]
local language_code = language:getCode()
local source
local place_form_of_directives = {}
if args[2][1]:find("^@") then
-- form-of directives in place of source
for i, arg in ipairs(args[2]) do
if arg:find("^@") then
local directive, value = parse_form_of_directive(arg)
insert(place_form_of_directives, {
directive = directive,
value = value,
})
elseif i ~= #args[2] then
error(("When form-of directives are specified, the source must come last, but saw source %s=%s " ..
"when higher-numbered arguments exist"):format(i + 1, arg))
else
source = arg
end
end
if not source then
source = place_form_of_directives[#place_form_of_directives].value:gsub("<.*", "")
end
elseif args[2][2] then
error(("Extraneous argument 3=%s"):format(args[2][2]))
else
source = args[2][1]
end
local source_lang = zhlang
local source_langcode = source_lang:getCode()
local source_langname = source_lang:getFullName()
local ids = args.id and split(args.id, ",") or {""}
local sort = args.sort
if source == "+" then
source = pagename
end
local source_is_current_page = source == pagename
local copy_sortkey = (sort == nil) and source_is_current_page
local no_gloss = args.nogloss
local labels = args.lb and split_labels(args.lb) or {}
local to = args.to
local function issue_error(msg)
if source_is_current_page and is_preview() then
msg = msg .. ". NOTE: You are in preview mode. If you're previewing only part of the page, try previewing the full page, as the error may go away."
end
error(msg)
end
local content = mw.title.new(source):getContent()
if content == nil then
issue_error("Couldn't find the entry [[" .. source .. "]]")
end
-- Remove HTML comments.
content = remove_comments(content)
-- Remove <ref></ref> with nothing inside the first <ref>.
content = content:gsub("< *[rR][eE][fF] *>.-< */ *[rR][eE][fF] *>", "")
-- Remove <ref ...></ref> but don't get confused by inline modifiers <ref:...>.
content = content:gsub("< *[rR][eE][fF][^%a>/:][^>/]*>.-< */ *[rR][eE][fF] *>", "")
-- Remove <ref/> with nothing inside the <ref>.
content = content:gsub("< *[rR][eE][fF] */ *>", "")
-- Remove <ref .../> but don't get confused by inline modifiers <ref:...>.
content = content:gsub("< *[rR][eE][fF][^%a>/:][^>/]*/ *>", "")
-- TODO: Handle <nowiki> (it's more complex than just cutting it out too).
local retlines = {}
for _, id in ipairs(ids) do
local nolb
local found_labels = {}
local line_start, line
if id == "" then
id = nil
end
if id ~= nil then
local senseid_start, senseid_end = content:find("{{ *senseid *| *" .. pattern_escape(source_langcode) .. " *| *" .. pattern_escape(id) .. " *}}")
if senseid_start == nil then
senseid_start, senseid_end = content:find("{{ *sid *| *" .. pattern_escape(source_langcode) .. " *| *" .. pattern_escape(id) .. " *}}")
end
if senseid_start == nil then
local alternatives = nil
for id in content:gmatch("{{ *senseid *| *" .. pattern_escape(source_langcode) .. " *| *([^}]*)}}") do
alternatives = alternatives and alternatives .. ", " .. id or id
end
for id in content:gmatch("{{ *sid *| *" .. pattern_escape(source_langcode) .. " *| *([^}]*)}}") do
alternatives = alternatives and alternatives .. ", " .. id or id
end
if alternatives then
alternatives = ": Alternatives for |id= are: " .. alternatives
else
alternatives = ""
end
issue_error("Couldn't find the template {{[[Template:senseid|senseid]]|" .. source_langcode .. "|" .. id .. "}} within entry [[" .. source .. "]]" .. alternatives)
end
-- Do the following manually instead of using regex or iterators in hopes of saving memory.
local newline, pound = 10, 35
line_start = senseid_start
while line_start > 0 and content:byte(line_start - 1) ~= newline do line_start = line_start - 1 end
local def_start = line_start
while content:byte(def_start) == pound do def_start = def_start + 1 end
local line_end = senseid_end
while line_end < content:len() and content:byte(line_end + 1) ~= newline do line_end = line_end + 1 end
line = content:sub(def_start, senseid_start - 1) .. content:sub(senseid_end + 1, line_end)
else -- id == nil
--l10n: 更改為匹配「漢語」或「汉语」,並相容簡繁轉換
-- local _, start_source = find(content, "==[ \t]*" .. pattern_escape(source_langname) .. "[ \t]*==")
local _, start_source = find(content, "==[ \t]*[漢汉][語语][ \t]*==")
if not start_source then
issue_error(("Couldn't find L2 header for source language '%s' on page [[%s]]"):format(source_langname,
source))
end
-- Find index of start of next language; may be nil if no language follows.
local _, start_next_lang = find(content, "\n==[^=\n]+==", start_source, false)
content = content:sub(start_source, start_next_lang)
while true do
local next_line_start
_, next_line_start = find(content, "\n#+[^:*]", line_start, false)
if not next_line_start then
break
end
if line_start then
local first_line = match(content, "(.-)%f[\n%z]", line_start)
local next_line = match(content, "(.-)%f[\n%z]", next_line_start + 1)
issue_error(("No id specified and saw two definition lines '%s' and '%s' for source language '%s' on page [[%s]]"):format(
escape_wikicode(first_line), escape_wikicode(next_line), source_langname, source))
end
line_start = next_line_start + 1
end
if not line_start then
issue_error(("Couldn't find any definition lines for source language '%s' on page [[%s]]"):format(
source_langname, source))
end
line = match(content, "(.-)%f[\n%z]", line_start)
end
--[[
if to == nil then
local i = line_start
while i > 1 do
i = i - 1 -- i is now the index of the newline
while i > 1 and content:byte(i - 1) ~= 0xA do i = i - 1 end
local header = content:match("^===+([^=\n]+)===+ *\n", i)
if header then
to = (header:match("Verb") ~= nil)
break
end
end
end
]]--
-- TODO: Remove this error once <nowiki> is handled correctly (see above TODO).
if line:find("< *nowiki%W") or line:find("< */ *nowiki%W") then
error("Cannot handle <nowiki>")
end
-- Quick'n'dirty templatization of manual cats so that the below code also works for them.
for _, v in ipairs({{source_langcode .. ":", "c"}, {source_lang:getCanonicalName() .. " ", "cln"}, {"", "cat"}}) do
line = line:gsub("%[%[ *Category *: *" .. v[1] .. "([^%]|]*)%]%]", "{{" .. v[2] .. "|" .. source_langcode .. "|%1}}")
line = line:gsub("%[%[ *Category *%: *" .. v[1] .. "([^%]|]*)%|([^%]|]*)%]%]", "{{" .. v[2] .. "|" .. source_langcode .. "|%1|sort=%2}}")
end
-- Extract template information.
local cats = {}
local cats_cln = {}
local cats_top = {}
local encountered_label = false
local generator = nil
local sortkeys = {}
local sortkey_most_frequent = nil
local sortkey_most_frequent_n = 0
local function process_template(name, tempargs, is_at_the_start)
-- Expand any nested templates in template arguments.
for k, v in pairs(tempargs) do
tempargs[k] = preprocess(frame, v)
end
local supports_sortkey = false
local should_remove = true -- If set, removes the template from the line after processing.
local must_be_first = false -- If set, ensures that nothing (except for removed templates) preceeds this template.
local definition_template_handler = handle_definition_template {
name = name,
template_args = tempargs,
transclude_args = args,
place_form_of_directives = place_form_of_directives,
}
if definition_template_handler ~= nil then
if generator ~= nil then
error("Encountered {{[[Template:" .. name .. "|" .. name .. "]]}} even though a full definition template has already been processed")
end
should_remove = definition_template_handler.should_remove
must_be_first = definition_template_handler.must_be_first
generator = definition_template_handler.generate
elseif name == "categorize" or name == "cat" then
copy_unnamed_args_maybe_except_code(cats, tempargs)
supports_sortkey = true
elseif name == "catlangname" or name == "cln" then
copy_unnamed_args_maybe_except_code(cats, tempargs)
supports_sortkey = true
elseif name == "catlangcode" or name == "topics" or name == "top" or name == "C" or name == "c" then
copy_unnamed_args_maybe_except_code(cats_top, tempargs)
supports_sortkey = true
elseif name == "label" or name == "lbl" or name == "lb" then
if encountered_label then
error("Encountered multiple {{[[Template:label|label]]}} templates in the definition line")
end
encountered_label = true
copy_unnamed_args_maybe_except_code(found_labels, tempargs)
supports_sortkey = true
must_be_first = true
elseif name == "defdate" or name == "defdt" or name == "century" or name == "ref" or name == "refn" or name == "rfd-sense" or name == "rfv-sense" or name == "senseid" or name == "sid" or name == "zh-div" then
-- Remove and do nothing.
else
-- We are dealing with a template other than the above hard-coded ones.
-- If it contains the language code, we cannot handle it.
if tempargs[1] == source_langcode then
error("Cannot handle template {{[[Template:" .. name .. "|" .. name .. "]]}}")
end
supports_sortkey = tempargs["sort"] or tempargs["sort1"] -- TODO: This doesn't handle the case where there is only sortn but not sort1/sort.
should_remove = false -- Leave the template in and just copy it, e.g. [[Template:,]], [[Template:gloss]], [[Template:qualifier]], [[Template:w]] etc.
end
if supports_sortkey then
if tempargs["sort1"] ~= nil then
error("Cannot handle multiple sort keys")
end
local sortkey = tempargs["sort"]
if sortkey ~= nil then
if sortkeys[sortkey] == nil then
sortkeys[sortkey] = 1
else
sortkeys[sortkey] = sortkeys[sortkey] + 1
end
if sortkeys[sortkey] > sortkey_most_frequent_n then
sortkey_most_frequent = sortkey
sortkey_most_frequent_n = sortkeys[sortkey]
end
end
end
if must_be_first and not is_at_the_start then
error("The template {{[[Template:" .. name .. "|" .. name .. "]]}} should occur to the front of the definition line")
end
return should_remove
end
line = remove_templates_if(line, process_template)
line = line:gsub("^%s+", ""):gsub("%s+$", "") -- Prune ends.
-- Tidy up the remaining definition (to be used as a gloss).
-- Truncate full sentences after a period, as they won't be formatted well as a gloss. Require a space after
-- the period as a possible way of reducing false positives with abbreviations.
local gloss = line
if not args.no_truncate_gloss then
-- l10n: 中文使用全形句號截斷,不需要英文縮寫防誤判邏輯
--[[
-- Substitute a list of known abbreviations that shouldn't mark the end-point of the gloss, which will be reinserted after truncation.
local abbrevs = {"A.D.", "B.C.", "B.C.E.", "c[af]?.", "C.E.", "e.g.", "fl.", "i.[ae].", "r.", "sc.", "scil.", "viz.", "vs?."}
local substitutes, i = {}, 0
local function insert_substitute(m)
i = i + 1
insert(substitutes, m)
return u(0x80000 + i)
end
for j, abbrev in ipairs(abbrevs) do
abbrev = abbrev:gsub("%.", "%%.")
:gsub("%f[^.].", " *%0")
abbrevs[j] = abbrev
gloss = gloss:gsub("%f[%S]" .. abbrev .. "%f[%s]", insert_substitute)
end
gloss = gloss:gsub("%s*%. .*$", "")
:gsub("\242[\128-\191]*", function(m)
return substitutes[codepoint(m) - 0x80000]
end)
]]--
gloss = gloss:gsub("。.*$", "")
end
-- l10n: 註解掉英文首字母小寫邏輯,將句尾半形句號改為去除全形句號
-- gloss = gloss:gsub("^%u", lower):gsub("%.$", "")
gloss = gloss:gsub("。$", "")
gloss = gloss:gsub("^{{1|([^}|]*)}}", "%1") -- Remove [[Template:1]]
local _, link_end, link_dest_head, link_dest_tail, link_face_head, link_face_tail = gloss:find("^%[%[(.)([^|%]]*)|(.)([^%]]*)%]%]") -- Remove [[foo|Foo]]
if link_end ~= nil and link_dest_tail == link_face_tail and link_face_head:lower() == link_dest_head then
gloss = "[[" .. link_dest_head .. link_dest_tail .. gloss:sub(link_end - 1)
end
gloss = preprocess(frame, gloss)
if copy_sortkey then
sort = sortkey_most_frequent
end
local formatted_senseid = ""
local formatted_senseid_close = ""
if id ~= nil then
formatted_senseid = senseid(language, id, "span")
if formatted_senseid:find("<span") then
formatted_senseid_close = "</span>"
end
end
local formatted_categories = args.nocat and "" or (
((next(cats ) == nil) and "" or frame:expandTemplate({title = "cat", args = {language_code, unpack(cats )}})) ..
((next(cats_cln) == nil) and "" or frame:expandTemplate({title = "cln", args = {language_code, unpack(cats_cln)}})) ..
((next(cats_top) == nil) and "" or frame:expandTemplate({title = "top", args = {language_code, unpack(cats_top)}}))
)
-- l10n: 中文動詞不加 to
-- local formatted_to = to and "to " or ""
local formatted_to = ""
local formatted_definition
if generator ~= nil then
local data = {
frame = frame, lang = language, source = source, source_lang = source_lang, id = id,
sort = sort, nocat = args.nocat, no_gloss = no_gloss, gloss = gloss, formatted_to = formatted_to,
}
formatted_definition = generator(data)
nolb = data.nolb or nolb
else
local formatted_link = full_link{term = source, lang = source_lang, id = id}
-- l10n: 移除全形括號前的空格
-- local formatted_gloss = no_gloss and "" or (" " .. gloss_left .. gloss .. gloss_right)
local formatted_gloss = no_gloss and "" or (gloss_left .. gloss .. gloss_right)
formatted_definition = formatted_to .. formatted_link .. formatted_gloss
end
nolb = args.nolb or nolb
local labels_to_ignore = nil
local ignore_all_labels = false
if nolb then
if nolb == "+" or nolb == "1" or nolb == "*" then
ignore_all_labels = true
else
labels_to_ignore = split_labels(nolb)
end
end
local this_labels = deep_copy(labels)
if not ignore_all_labels then
copy_unnamed_args_maybe_except_code(this_labels, found_labels, labels_to_ignore, 1)
end
local formatted_labels = (next(this_labels) == nil) and "" or (show_labels{labels = this_labels, lang = language, sort = sort} .. " ")
insert(retlines, formatted_senseid .. formatted_categories .. formatted_labels .. formatted_definition ..
formatted_senseid_close .. (args.dot and "。" or ""))
end
return concat(retlines, "\n" .. (args.indent or "#") .. " ")
end
return export
lvdnm6l5ff3fmno4h1ecrgddu1c3fz1
Template:Transclude
10
3438214
9758649
2026-05-13T12:49:04Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「<noinclude># {{transclude sense|ro|比利時|id=Q31}}</noinclude><includeonly>{{#invoke:transclude|show}}</includeonly><noinclude>{{documentation}}</noinclude>」的新頁面
9758649
wikitext
text/x-wiki
<noinclude># {{transclude sense|ro|比利時|id=Q31}}</noinclude><includeonly>{{#invoke:transclude|show}}</includeonly><noinclude>{{documentation}}</noinclude>
7gtkrr4xtynm0docuhhkotenl977q8z
9758871
9758649
2026-05-13T21:16:19Z
Cewbot
61744
[[User:Cewbot/log/20211203/configuration|同步通用頁面]]: [[w:zh:Template:Transclude]] [[w:zh:Special:PermanentLink/42951142|2017-01-25]] (受 [[Template:Tl]] 所需)
9758871
wikitext
text/x-wiki
<noinclude><!-- 本頁面複製自[[w:zh:Template:Transclude]],由機器人定期更新。請直接編輯原維基項目頁面,或自設定頁面[[User:Cewbot/log/20211203/configuration]]去除本頁面之後再編輯。 --></noinclude>{{#switch: {{NAMESPACE: {{{1}}} }}
|#default = {{FULLPAGENAME: {{{1}}} }} <!-- eg "User:Foo" -->
|{{ns:0}} =
{{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }}
| Template:{{{1}}} <!-- no leading colon, eg "Foo" -->
| {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article -->
}}
}}<noinclude>
{{documentation}}
</noinclude>
mzh973aa16v6vchl9alevmmxurinltj
9759366
9758871
2026-05-14T10:58:37Z
TongcyDai
53191
原來是你……
9759366
wikitext
text/x-wiki
<noinclude># {{transclude sense|ro|比利時|id=Q31}}</noinclude><includeonly>{{#invoke:transclude|show}}</includeonly><noinclude>{{documentation}}</noinclude>
7gtkrr4xtynm0docuhhkotenl977q8z
9759367
9759366
2026-05-14T10:58:51Z
TongcyDai
53191
已保护“[[Template:Transclude]]”([编辑权限=仅允许模板编辑者和管理员](无限期)[移动权限=仅允许模板编辑者和管理员](无限期))
9759366
wikitext
text/x-wiki
<noinclude># {{transclude sense|ro|比利時|id=Q31}}</noinclude><includeonly>{{#invoke:transclude|show}}</includeonly><noinclude>{{documentation}}</noinclude>
7gtkrr4xtynm0docuhhkotenl977q8z
Template:Transclude sense
10
3438215
9758650
2026-05-13T12:49:06Z
TongcyDai
53191
重定向页面至[[Template:Transclude]]
9758650
wikitext
text/x-wiki
#REDIRECT [[Template:transclude]]
517xz6xforeubrb2764od2u6t82wbx3
Template:Transclude/doc
10
3438216
9758652
2026-05-13T13:06:44Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「{{documentation subpage}} {{shortcut|Template:tcl}} {{uses lua|Module:transclude}} 本模板用於根據現有的漢語釋義,為非漢語詞彙提供更豐富的釋義。它會生成一個指向對應漢語義項的連結,並附帶漢語條目中使用的標籤(labels)與分類(categories),同時將完整的漢語釋義以注釋(gloss)的形式呈現。如果漢語釋義遭到修正或擴充,這些變更會自動傳播…」的新頁面
9758652
wikitext
text/x-wiki
{{documentation subpage}}
{{shortcut|Template:tcl}}
{{uses lua|Module:transclude}}
本模板用於根據現有的漢語釋義,為非漢語詞彙提供更豐富的釋義。它會生成一個指向對應漢語義項的連結,並附帶漢語條目中使用的標籤(labels)與分類(categories),同時將完整的漢語釋義以注釋(gloss)的形式呈現。如果漢語釋義遭到修正或擴充,這些變更會自動傳播到所有嵌入了本模板的條目中。如果完整的漢語釋義過於冗長,可以使用 {{para|nogloss|1}} 將其隱藏,同時依然能保有標籤與分類自動同步的好處。當有足夠多的條目足以建立新的子分類時,科學類的分類通常會被細化;這種細化也會自動傳播到所有嵌入本模板的條目。
如果某個義項目前缺乏 {{tl|senseid}} 且您想要添加它,請先檢查[[:d:|維基數據]]中是否有該義項的條目。如果有,請使用維基數據的 [[QID]] 作為 sense ID。如果條目中已經包含 {{tl|senseid}},您可以在不指定 {{para|id}} 的情況下使用 {{tl|transclude}},然後預覽頁面,預覽的錯誤訊息會為您提供該條目中的 sense ID 代碼以供參考。
為了讓分類正確傳播,它們也必須出現在釋義行中。最好將它們放在 {{tl|senseid}} 之後、{{tl|lb}} 之前。
除了純文字釋義外,以下定義模板也能被正確處理:
* {{tl|place}}
* {{tl|abbreviation of}}
* {{tl|acronym of}}
* {{tl|contraction of}}
* {{tl|initialism of}}
'''只有'''在漢語和非漢語義項是彼此的'''完美翻譯'''時,才請使用 {{tl|transclude}}。完美的翻譯通常是以專有名詞(大多為地名)或科學詞彙的形式出現。如果您需要猶豫某個詞是否為完美翻譯,那它可能就不是,在這種情況下,不使用本模板永遠是較為穩妥的選擇。
== 範例 ==
(在 [[Belgia#布列塔尼語]] 中)
<syntaxhighlight lang="wikitext">
# {{transclude|br|比利時|id=Q31}}
</syntaxhighlight>
輸出為:
# {{transclude|br|比利時|id=Q31}}
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"params": {
"1": {
"label": "語言代碼",
"description": "目標語言的代碼(即需要提供釋義的語言)。",
"example": "ro",
"type": "string",
"required": true
},
"2": {
"label": "漢語條目",
"description": "要連結與抓取內容的漢語詞彙。",
"example": "比利時",
"type": "string",
"required": true
},
"id": {
"label": "漢語條目義項 ID",
"description": "要連結的漢語義項之 sense ID。",
"example": "Q31",
"type": "string",
"required": true
},
"sort": {
"label": "排序鍵",
"description": "傳遞給被呼叫模板的排序鍵。",
"type": "string",
"required": false
},
"nogloss": {
"label": "隱藏釋義",
"description": "是否隱藏注釋(從漢語條目複製過來的完整釋義)。",
"type": "boolean",
"required": false
},
"nolb": {
"label": "隱藏標籤",
"description": "是否隱藏標籤。",
"type": "boolean",
"required": false
},
"lb": {
"label": "附加標籤",
"description": "以分號分隔的附加標籤列表,將會加在被嵌入標籤的前面。",
"type": "string",
"required": false
},
"to": {
"label": "添加 to (已停用)",
"description": "原英語維基詞典用於在動詞前自動加上 to 的參數。中文維基詞典不使用此參數,填入也不會產生任何作用。",
"type": "boolean",
"required": false
}
},
"description": "根據現有的漢語釋義,為其他語言詞彙生成豐富的定義內容。"
}
</templatedata>
<includeonly>
[[Category:定義模板]]
</includeonly>
4sd56smdxmxqtku3lbk1gmccv2wipr0
9758872
9758652
2026-05-13T21:16:24Z
Cewbot
61744
[[User:Cewbot/log/20211203/configuration|同步通用頁面]]: [[w:zh:Template:Transclude/doc]] [[w:zh:Special:PermanentLink/90818611|2025-12-24]] (輔助理解用的模板說明文件)
9758872
wikitext
text/x-wiki
<noinclude><!-- 本頁面複製自[[w:zh:Template:Transclude/doc]],由機器人定期更新。請直接編輯原維基項目頁面,或自設定頁面[[User:Cewbot/log/20211203/configuration]]去除本頁面之後再編輯。 --></noinclude>{{NoteTA|G1=MediaWiki}}
{{Documentation subpage}}
{{Used in system}}
{{High-use}}
參數1填的是一個頁面,如果參數1沒有指定名字空間,也無前導冒號的話,就會在前面自動加上{{Focus|Template:}}。
<includeonly>{{sandbox other||
[[Category:格式模板]]
}}</includeonly>
7y3q2ey755zgi0z7wlaa98a26usevkx
9759382
9758872
2026-05-14T11:39:37Z
TongcyDai
53191
取消[[Special:Contributions/Cewbot|Cewbot]] ([[User talk:Cewbot|对话]])的编辑;更改回[[Special:Contributions/TongcyDai|TongcyDai]]的最后一个版本
9758652
wikitext
text/x-wiki
{{documentation subpage}}
{{shortcut|Template:tcl}}
{{uses lua|Module:transclude}}
本模板用於根據現有的漢語釋義,為非漢語詞彙提供更豐富的釋義。它會生成一個指向對應漢語義項的連結,並附帶漢語條目中使用的標籤(labels)與分類(categories),同時將完整的漢語釋義以注釋(gloss)的形式呈現。如果漢語釋義遭到修正或擴充,這些變更會自動傳播到所有嵌入了本模板的條目中。如果完整的漢語釋義過於冗長,可以使用 {{para|nogloss|1}} 將其隱藏,同時依然能保有標籤與分類自動同步的好處。當有足夠多的條目足以建立新的子分類時,科學類的分類通常會被細化;這種細化也會自動傳播到所有嵌入本模板的條目。
如果某個義項目前缺乏 {{tl|senseid}} 且您想要添加它,請先檢查[[:d:|維基數據]]中是否有該義項的條目。如果有,請使用維基數據的 [[QID]] 作為 sense ID。如果條目中已經包含 {{tl|senseid}},您可以在不指定 {{para|id}} 的情況下使用 {{tl|transclude}},然後預覽頁面,預覽的錯誤訊息會為您提供該條目中的 sense ID 代碼以供參考。
為了讓分類正確傳播,它們也必須出現在釋義行中。最好將它們放在 {{tl|senseid}} 之後、{{tl|lb}} 之前。
除了純文字釋義外,以下定義模板也能被正確處理:
* {{tl|place}}
* {{tl|abbreviation of}}
* {{tl|acronym of}}
* {{tl|contraction of}}
* {{tl|initialism of}}
'''只有'''在漢語和非漢語義項是彼此的'''完美翻譯'''時,才請使用 {{tl|transclude}}。完美的翻譯通常是以專有名詞(大多為地名)或科學詞彙的形式出現。如果您需要猶豫某個詞是否為完美翻譯,那它可能就不是,在這種情況下,不使用本模板永遠是較為穩妥的選擇。
== 範例 ==
(在 [[Belgia#布列塔尼語]] 中)
<syntaxhighlight lang="wikitext">
# {{transclude|br|比利時|id=Q31}}
</syntaxhighlight>
輸出為:
# {{transclude|br|比利時|id=Q31}}
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"params": {
"1": {
"label": "語言代碼",
"description": "目標語言的代碼(即需要提供釋義的語言)。",
"example": "ro",
"type": "string",
"required": true
},
"2": {
"label": "漢語條目",
"description": "要連結與抓取內容的漢語詞彙。",
"example": "比利時",
"type": "string",
"required": true
},
"id": {
"label": "漢語條目義項 ID",
"description": "要連結的漢語義項之 sense ID。",
"example": "Q31",
"type": "string",
"required": true
},
"sort": {
"label": "排序鍵",
"description": "傳遞給被呼叫模板的排序鍵。",
"type": "string",
"required": false
},
"nogloss": {
"label": "隱藏釋義",
"description": "是否隱藏注釋(從漢語條目複製過來的完整釋義)。",
"type": "boolean",
"required": false
},
"nolb": {
"label": "隱藏標籤",
"description": "是否隱藏標籤。",
"type": "boolean",
"required": false
},
"lb": {
"label": "附加標籤",
"description": "以分號分隔的附加標籤列表,將會加在被嵌入標籤的前面。",
"type": "string",
"required": false
},
"to": {
"label": "添加 to (已停用)",
"description": "原英語維基詞典用於在動詞前自動加上 to 的參數。中文維基詞典不使用此參數,填入也不會產生任何作用。",
"type": "boolean",
"required": false
}
},
"description": "根據現有的漢語釋義,為其他語言詞彙生成豐富的定義內容。"
}
</templatedata>
<includeonly>
[[Category:定義模板]]
</includeonly>
4sd56smdxmxqtku3lbk1gmccv2wipr0
9759383
9759382
2026-05-14T11:39:54Z
TongcyDai
53191
已保护“[[Template:Transclude/doc]]”([编辑权限=仅允许模板编辑者和管理员](无限期)[移动权限=仅允许模板编辑者和管理员](无限期))
9758652
wikitext
text/x-wiki
{{documentation subpage}}
{{shortcut|Template:tcl}}
{{uses lua|Module:transclude}}
本模板用於根據現有的漢語釋義,為非漢語詞彙提供更豐富的釋義。它會生成一個指向對應漢語義項的連結,並附帶漢語條目中使用的標籤(labels)與分類(categories),同時將完整的漢語釋義以注釋(gloss)的形式呈現。如果漢語釋義遭到修正或擴充,這些變更會自動傳播到所有嵌入了本模板的條目中。如果完整的漢語釋義過於冗長,可以使用 {{para|nogloss|1}} 將其隱藏,同時依然能保有標籤與分類自動同步的好處。當有足夠多的條目足以建立新的子分類時,科學類的分類通常會被細化;這種細化也會自動傳播到所有嵌入本模板的條目。
如果某個義項目前缺乏 {{tl|senseid}} 且您想要添加它,請先檢查[[:d:|維基數據]]中是否有該義項的條目。如果有,請使用維基數據的 [[QID]] 作為 sense ID。如果條目中已經包含 {{tl|senseid}},您可以在不指定 {{para|id}} 的情況下使用 {{tl|transclude}},然後預覽頁面,預覽的錯誤訊息會為您提供該條目中的 sense ID 代碼以供參考。
為了讓分類正確傳播,它們也必須出現在釋義行中。最好將它們放在 {{tl|senseid}} 之後、{{tl|lb}} 之前。
除了純文字釋義外,以下定義模板也能被正確處理:
* {{tl|place}}
* {{tl|abbreviation of}}
* {{tl|acronym of}}
* {{tl|contraction of}}
* {{tl|initialism of}}
'''只有'''在漢語和非漢語義項是彼此的'''完美翻譯'''時,才請使用 {{tl|transclude}}。完美的翻譯通常是以專有名詞(大多為地名)或科學詞彙的形式出現。如果您需要猶豫某個詞是否為完美翻譯,那它可能就不是,在這種情況下,不使用本模板永遠是較為穩妥的選擇。
== 範例 ==
(在 [[Belgia#布列塔尼語]] 中)
<syntaxhighlight lang="wikitext">
# {{transclude|br|比利時|id=Q31}}
</syntaxhighlight>
輸出為:
# {{transclude|br|比利時|id=Q31}}
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"params": {
"1": {
"label": "語言代碼",
"description": "目標語言的代碼(即需要提供釋義的語言)。",
"example": "ro",
"type": "string",
"required": true
},
"2": {
"label": "漢語條目",
"description": "要連結與抓取內容的漢語詞彙。",
"example": "比利時",
"type": "string",
"required": true
},
"id": {
"label": "漢語條目義項 ID",
"description": "要連結的漢語義項之 sense ID。",
"example": "Q31",
"type": "string",
"required": true
},
"sort": {
"label": "排序鍵",
"description": "傳遞給被呼叫模板的排序鍵。",
"type": "string",
"required": false
},
"nogloss": {
"label": "隱藏釋義",
"description": "是否隱藏注釋(從漢語條目複製過來的完整釋義)。",
"type": "boolean",
"required": false
},
"nolb": {
"label": "隱藏標籤",
"description": "是否隱藏標籤。",
"type": "boolean",
"required": false
},
"lb": {
"label": "附加標籤",
"description": "以分號分隔的附加標籤列表,將會加在被嵌入標籤的前面。",
"type": "string",
"required": false
},
"to": {
"label": "添加 to (已停用)",
"description": "原英語維基詞典用於在動詞前自動加上 to 的參數。中文維基詞典不使用此參數,填入也不會產生任何作用。",
"type": "boolean",
"required": false
}
},
"description": "根據現有的漢語釋義,為其他語言詞彙生成豐富的定義內容。"
}
</templatedata>
<includeonly>
[[Category:定義模板]]
</includeonly>
4sd56smdxmxqtku3lbk1gmccv2wipr0
Tropenwaldes
0
3438217
9758659
2026-05-13T15:52:11Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==德語== ===發音=== * {{IPA|de|/ˈtʁoːpn̩ˌvaldəs/}} * {{audio|de|De-Tropenwaldes.ogg|a=柏林}} ===名詞=== {{head|de|名詞變格形}} # {{infl of|de|Tropenwald||gen|s}}」的新頁面
9758659
wikitext
text/x-wiki
==德語==
===發音===
* {{IPA|de|/ˈtʁoːpn̩ˌvaldəs/}}
* {{audio|de|De-Tropenwaldes.ogg|a=柏林}}
===名詞===
{{head|de|名詞變格形}}
# {{infl of|de|Tropenwald||gen|s}}
4teul2yxzjzljjeuyhffztghj0vgik7
Tropenwalds
0
3438218
9758660
2026-05-13T15:52:12Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==德語== ===發音=== * {{IPA|de|/ˈtʁoːpn̩ˌvalt͡s/}} * {{audio|de|De-Tropenwalds.ogg|a=柏林}} ===名詞=== {{head|de|名詞變格形}} # {{infl of|de|Tropenwald||gen|s}}」的新頁面
9758660
wikitext
text/x-wiki
==德語==
===發音===
* {{IPA|de|/ˈtʁoːpn̩ˌvalt͡s/}}
* {{audio|de|De-Tropenwalds.ogg|a=柏林}}
===名詞===
{{head|de|名詞變格形}}
# {{infl of|de|Tropenwald||gen|s}}
aeclrv6j0e0u26qemckczfbkghl0u6z
Tropenwälder
0
3438219
9758661
2026-05-13T15:52:18Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==德語== ===發音=== * {{IPA|de|/ˈtʁoːpn̩ˌvɛldɐ/}} * {{audio|de|De-Tropenwälder.ogg|a=柏林}} ===名詞=== {{head|de|名詞變格形}} # {{infl of|de|Tropenwald||nom//gen//acc|p}}」的新頁面
9758661
wikitext
text/x-wiki
==德語==
===發音===
* {{IPA|de|/ˈtʁoːpn̩ˌvɛldɐ/}}
* {{audio|de|De-Tropenwälder.ogg|a=柏林}}
===名詞===
{{head|de|名詞變格形}}
# {{infl of|de|Tropenwald||nom//gen//acc|p}}
ehigjkej7ecmxeyl6942edn9sz9p69j
Tropenwäldern
0
3438220
9758662
2026-05-13T15:52:23Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==德語== ===發音=== * {{IPA|de|/ˈtʁoːpn̩ˌvɛldɐn/}} * {{audio|de|De-Tropenwäldern.ogg|a=柏林}} ===名詞=== {{head|de|名詞變格形}} # {{infl of|de|Tropenwald||dat|p}}」的新頁面
9758662
wikitext
text/x-wiki
==德語==
===發音===
* {{IPA|de|/ˈtʁoːpn̩ˌvɛldɐn/}}
* {{audio|de|De-Tropenwäldern.ogg|a=柏林}}
===名詞===
{{head|de|名詞變格形}}
# {{infl of|de|Tropenwald||dat|p}}
qvek4ud0f87epe7nnik4xnb9vt5dn58
Template:Tcl
10
3438221
9758844
2026-05-13T16:16:04Z
TongcyDai
53191
重定向页面至[[Template:Transclude]]
9758844
wikitext
text/x-wiki
#REDIRECT [[Template:transclude]]
517xz6xforeubrb2764od2u6t82wbx3
Template:Pt-prop
10
3438222
9758853
2026-05-13T17:48:09Z
TongcyDai
53191
重定向页面至[[Template:Pt-proper noun]]
9758853
wikitext
text/x-wiki
#REDIRECT [[Template:pt-proper noun]]
1ypx2ft79dn0s01h5i7tjju18kafdgo
西紅花
0
3438223
9758868
2026-05-13T20:31:37Z
P1ayer
5118
新詞條
9758868
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xīhónghuā
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 鳶尾科植物[[番紅花]]({{taxlink|Crocus sativus|species|nomul=1}})的[[雌蕊]]柱頭,作為[[藥材]]有活血化瘀、涼血解毒、解鬱安神之效
lm8m92zzkq1ibu6202xqnnjqgyxmdhg
9758879
9758868
2026-05-14T01:37:31Z
Sayonzei
40728
/* 漢語 */
9758879
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=西红花}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xīhónghuā
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 鳶尾科植物[[番紅花]]({{taxfmt|Crocus sativus|species}})的[[雌蕊]]柱頭,作為[[藥材]]有活血化瘀、涼血解毒、解鬱安神之效
i8qbkm63krnh7rg32urkzhc262rlkoc
9758881
9758879
2026-05-14T01:38:35Z
Sayonzei
40728
/* 漢語 */
9758881
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=西红花|type=12}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xīhónghuā
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 鳶尾科植物[[番紅花]]({{taxfmt|Crocus sativus|species}})的[[雌蕊]]柱頭,作為[[藥材]]有活血化瘀、涼血解毒、解鬱安神之效
12kh0jlm2711m960tzsf6qmuuad6afi
réalgar
0
3438224
9758885
2026-05-14T01:47:37Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|realgar|Realgar}} ==法語== {{wp|fr:}} ===發音=== * {{audio|fr|LL-Q150 (fra)-WikiLucas00-réalgar.wav|a=里昂}} ===名詞=== {{fr-noun|m}} # {{lb|fr|礦物學}} [[雄黃]] ===延伸閱讀=== * {{R:fr:TLFi}}」的新頁面
9758885
wikitext
text/x-wiki
{{also|realgar|Realgar}}
==法語==
{{wp|fr:}}
===發音===
* {{audio|fr|LL-Q150 (fra)-WikiLucas00-réalgar.wav|a=里昂}}
===名詞===
{{fr-noun|m}}
# {{lb|fr|礦物學}} [[雄黃]]
===延伸閱讀===
* {{R:fr:TLFi}}
fk5adzs2gzwmn13mb7n549s60falyvq
réalgars
0
3438225
9758886
2026-05-14T01:47:54Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|realgars|Realgars}} ==法語== ===名詞=== {{head|fr|名詞變格形|g=m}} # {{plural of|fr|réalgar}}」的新頁面
9758886
wikitext
text/x-wiki
{{also|realgars|Realgars}}
==法語==
===名詞===
{{head|fr|名詞變格形|g=m}}
# {{plural of|fr|réalgar}}
577lvcwc96ch7fgsuoj2lfpzoeueh05
雄黄
0
3438226
9758887
2026-05-14T02:00:21Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==漢語== {{zh-see|雄黃}} ==日語== ===詞源1=== <div style="float:right;"> {{wp|ja:}} [[File:Orpiment_1.JPG|thumb|250px|{{lang|ja|雄黄}} (''yūō'', ''oō''):雌黃]] </div> {{ja-kanjitab|yomi=o|ゆう|おう}} {{IPAchar|/juːwau/}} → {{IPAchar|/juːwɔː/}} → {{IPAchar|/juːoː/}} 源自{{der|ja|ltc|-|sort=ゆうおう}}複合詞 {{m|zh|雄黃|tr=hjuwng hwang}},與 {{m|zh|雌黄|tr=tsiɛ hwang}} 相對。但由於兩種礦…」的新頁面
9758887
wikitext
text/x-wiki
==漢語==
{{zh-see|雄黃}}
==日語==
===詞源1===
<div style="float:right;">
{{wp|ja:}}
[[File:Orpiment_1.JPG|thumb|250px|{{lang|ja|雄黄}} (''yūō'', ''oō''):雌黃]]
</div>
{{ja-kanjitab|yomi=o|ゆう|おう}}
{{IPAchar|/juːwau/}} → {{IPAchar|/juːwɔː/}} → {{IPAchar|/juːoː/}}
源自{{der|ja|ltc|-|sort=ゆうおう}}複合詞 {{m|zh|雄黃|tr=hjuwng hwang}},與 {{m|zh|雌黄|tr=tsiɛ hwang}} 相對。但由於兩種礦物的相似性,本詞在傳入日語時,被錯解為雌黃。
====發音====
{{ja-pron|ゆうおう|acc=0|acc_ref=DJR}}
====名詞====
{{ja-noun|ゆうおう|hhira=ゆうわう}}
# [[雌黃]]
=====用法說明=====
本詞的最常用漢字讀法。
=====近義詞=====
* {{ja-r|石黄|せきおう}}
* {{ja-r|雌%黄|し%おう}} {{qualifier|罕用}}
===詞源2===
{{ja-kanjitab|yomi=y|お|おう}}
{{IPAchar|/wowau/}} → {{IPAchar|/owɔː/}} → {{IPAchar|/ooː/}}
{{compound|ja|sort=おおう|雄|tr1=o|pos1={{inh+|ja|ojp|-|sort=おおう}}|黄|tr2=ō|t2=黃色|pos2=源自{{der|ja|ltc|-|sort=おおう}}}}的組詞。
====發音====
{{ja-pron|お.おう|acc=0}}
====名詞====
{{ja-noun|お.おう|hhira=をわう}}
# {{lb|ja|sort=おおう|rare|possibly|_|棄用}} [[雌黃]]
=====近義詞=====
* {{ja-r|石黄|せきおう}}
* {{ja-r|雌%黄|し%おう}} {{qualifier|rare}}
===詞源3===
<div style="float:right;">
{{wp|ja:鶏冠石}}
[[File:Réalgar,_tétrahédrite,_orpiment,_quartz_1.JPG|thumb|250px|{{lang|ja|雄黄}} (''kini''):雄黃]]
</div>
{{ja-kanjitab|yomi=jukuji|きに2}}
{{inh+|ja|ojp|-|sort=きに}}。{{compound|ja|sort=きに|黄|tr1=ki|t1=黃色|丹|tr2=ni|t2=紅色的土}} 的組詞。漢字寫法為{{ateji}}。
和 {{m|ja|雌黄|tr=kini}} 的讀音相同。
====發音====
{{ja-pron|きに}}
====名詞====
{{ja-noun|きに}}
# {{lb|ja|sort=きに|rare|possibly|_|棄用}} [[雄黃]]
=====近義詞=====
* {{ja-r|鶏冠石|けいかんせき}} {{qualifier|更常用}}
=====相關詞彙=====
{{col|ja
|{{ja-r|雌黄|きに}}
}}
===參考資料===
<references/>
{{C|ja|礦物}}
7a00xgs47sul8cos1pyigap4uycwtjp
鶏冠
0
3438227
9758888
2026-05-14T02:07:42Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== ===詞源1=== {{ja-kanjitab|yomi=k,i|とり|k1=と}} {{wp|ja:}} {{IPAchar|/tosːaka/}} → {{IPAchar|/tosaka/}} 發音源自[[#詞源2|詞源2]]的 ''tossaka''。漢字寫法則來自[[#詞源4|詞源4]]的 ''keikan''。 ====發音==== {{ja-pron|とさか|acc=3|acc2=0|acc_ref=DJR|acc2_ref=DJR}} ====名詞==== {{ja-noun|とさか}} # [[雞冠]] #: {{syn|ja|冠|tr1=saka|肉冠|tr2=nikukan}} # {{lb|ja|口語}} {{short for|ja|鶏…」的新頁面
9758888
wikitext
text/x-wiki
==日語==
===詞源1===
{{ja-kanjitab|yomi=k,i|とり|k1=と}}
{{wp|ja:}}
{{IPAchar|/tosːaka/}} → {{IPAchar|/tosaka/}}
發音源自[[#詞源2|詞源2]]的 ''tossaka''。漢字寫法則來自[[#詞源4|詞源4]]的 ''keikan''。
====發音====
{{ja-pron|とさか|acc=3|acc2=0|acc_ref=DJR|acc2_ref=DJR}}
====名詞====
{{ja-noun|とさか}}
# [[雞冠]]
#: {{syn|ja|冠|tr1=saka|肉冠|tr2=nikukan}}
# {{lb|ja|口語}} {{short for|ja|鶏冠海苔|tr=tosaka nori}}:雞冠菜({{taxlink|Meristotheca papulosa|species}}),藻類的一種
# {{lb|ja|戲劇}} [[歌舞伎]]的一種[[假髮]],前额的头发剪短并向两侧分开,{{ja-l|女形}}(男扮女裝)演員戴其扮演{{l|ja|悪婆||中年毒婦}}角色
=====派生詞彙=====
{{col|ja
|{{ja-r|鶏冠%草|とさか%ぐさ}}
|{{ja-r|鶏冠%海苔|とさか %のり}}
|{{ja-r|鶏冠%山|^とさか%-やま}}
|{{ja-r|石%鶏冠|いし%とさか}}
|{{ja-r|海%鶏冠|うみ%とさか}}
|{{ja-r|黄%花%鶏冠|き%ばな %とさか}}
}}
=====俗語=====
* {{ja-r|鶏冠に来る|とさか に くる|勃然大怒}}
===詞源2===
{{ja-kanjitab|yomi=k,i|とり|k1=とっ}}
{{IPAchar|/tori saka/}} → {{IPAchar|/tosːaka/}}
發音源自[[#詞源3|詞源3]]的 ''torisaka''。漢字寫法則來自[[#詞源4|詞源4]]的 ''keikan''。
====名詞====
{{ja-noun|とっさか}}
# {{lb|ja|古舊}} [[雞冠]]
#: {{syn|ja|冠|tr=saka}}
# {{lb|ja|sort=とつさか|古舊|口語}} {{short for|ja|鶏冠海苔|tr=tossaka nori}}:雞冠菜({{taxlink|Meristotheca papulosa|species}}),藻類的一種
=====派生詞彙=====
* {{ja-r|鶏冠%海苔|とっさか %のり}}
===詞源3===
{{ja-kanjitab|yomi=k,i|とり}}
可能源自 {{com|ja|鶏|tr1=tori|t1=雞|坂|tr2=saka|t2=山坡}}。漢字寫法則來自[[#詞源4|詞源4]]的 ''keikan''。
====名詞====
{{ja-noun|とりさか}}
# {{lb|ja|sort=とりさか|棄用}} [[雞冠]]
#: {{syn|ja|冠|tr=saka}}
=====派生詞彙=====
* {{ja-r|鶏冠%海苔|とりさか %のり}}
===詞源4===
{{ja-kanjitab|yomi=kanon|けい|かん}}
{{IPAchar|/kei kʷan/}} → {{IPAchar|/keːkan/}}
最终源自{{der|ja|ltc|sort=けいかん|-}} {{ltc-l|雞冠|id=1,1}}。
====發音====
{{ja-pron|けいかん|acc=0|acc_ref=DJR}}
====名詞====
{{ja-noun|けいかん|hhira=けいくわん}}
# [[雞冠]]
# {{lb|ja|sort=けいかん|礦物學|口語}} {{short for|ja|鶏冠石|tr=keikanseki|sort=けいかん}}:[[雄黃]]
=====派生詞彙=====
* {{ja-r|鶏%冠%花|けい%かん%か}}
* {{ja-r|鶏%冠%山|^けい%かん%ざん}}
* {{ja-r|鶏%冠%石|けい%かん%せき}}
====專有名詞====
{{wp|ja:鶏冠区}}
{{ja-pos|proper|けいかん}}
# {{place|ja|t=雞冠|市轄區|地級市/雞西|province/黑龍江|c/中國|sort=けいかん}}
===複合詞===
* {{ja-r|鶏冠井|^かいで}}
* {{ja-r|鶏冠木|カエデ}}
===參考資料===
<references/>
:* {{R:Kanjipedia Kotoba|0001826700|〈鶏冠〉}}
{{C|ja|動物身體部位|紅藻|礦物}}
ciesvjdtaxmz3bt52r4bxpuxv9y3mif
とさか
0
3438228
9758889
2026-05-14T02:07:44Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|鶏冠}}」的新頁面
9758889
wikitext
text/x-wiki
==日語==
{{ja-see|鶏冠}}
4by91k37v202giga51scy5csvzlrx8n
tosaka
0
3438229
9758890
2026-05-14T02:07:46Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「{{also|Tosaka|Tōsaka}} ==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|とさか}}」的新頁面
9758890
wikitext
text/x-wiki
{{also|Tosaka|Tōsaka}}
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|とさか}}
cchbt174937ecaizt0dhjl0fpc8hw79
engraxar
0
3438230
9758894
2026-05-14T02:27:03Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{affix|pt|en-|graxa|-ar}}。 ===發音=== {{pt-IPA|engràshar,[x:sh]}} * {{hyph|pt|en|gra|xar}} ===動詞=== {{pt-verb}} # 給……[[塗]][[油]][[潤滑]] # [[拋光]] ====變位==== {{pt-conj}} ====派生詞彙==== * {{l|pt|engraxador}} * {{l|pt|engraxate}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}}」的新頁面
9758894
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{affix|pt|en-|graxa|-ar}}。
===發音===
{{pt-IPA|engràshar,[x:sh]}}
* {{hyph|pt|en|gra|xar}}
===動詞===
{{pt-verb}}
# 給……[[塗]][[油]][[潤滑]]
# [[拋光]]
====變位====
{{pt-conj}}
====派生詞彙====
* {{l|pt|engraxador}}
* {{l|pt|engraxate}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
9qcs28ovsq5n0ro2gsdw20f7bvom038
engraxate
0
3438231
9758895
2026-05-14T02:27:46Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===發音=== {{pt-IPA|engràshate}} * {{hyph|pt|en|gra|xa|te}} ===名詞=== {{pt-noun|mfbysense}} # [[擦鞋]]匠 #: {{syn|pt|engraxador|graxa}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}}」的新頁面
9758895
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA|engràshate}}
* {{hyph|pt|en|gra|xa|te}}
===名詞===
{{pt-noun|mfbysense}}
# [[擦鞋]]匠
#: {{syn|pt|engraxador|graxa}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
2qgr9jwc0lzyu59wwir0k718a9ugg7e
engraxates
0
3438232
9758896
2026-05-14T02:27:59Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===名詞=== {{head|pt|名詞變格形|g=m|g2=f}} # {{plural of|pt|engraxate}}」的新頁面
9758896
wikitext
text/x-wiki
==葡萄牙語==
===名詞===
{{head|pt|名詞變格形|g=m|g2=f}}
# {{plural of|pt|engraxate}}
is8k8cm6balq4q8amxa8by0i0zjdq7s
engraxador
0
3438233
9758897
2026-05-14T02:28:04Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{suf|pt|engraxar|-dor}}。 ===發音=== {{pt-IPA|engràchador}} * {{hyph|pt|en|gra|xa|dor}} ===名詞=== {{pt-noun|m|f=+}} # [[擦鞋]]匠 #: {{syn|pt|engraxate|graxa}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}}」的新頁面
9758897
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{suf|pt|engraxar|-dor}}。
===發音===
{{pt-IPA|engràchador}}
* {{hyph|pt|en|gra|xa|dor}}
===名詞===
{{pt-noun|m|f=+}}
# [[擦鞋]]匠
#: {{syn|pt|engraxate|graxa}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
1hnsh9orduqj40xwbklxj6mqeicelni
shoeshiner
0
3438234
9758898
2026-05-14T02:28:48Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==英語== ===詞源=== 源自 {{com|en|shoe|shiner}}。 ===發音=== {{rfp|en}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-shoeshiner.wav|a=Southern England}} ===名詞=== {{en-noun}} # [[擦鞋]]匠 #: {{syn|en|bootblack|shoeblack|shoeshine boy}} #* {{quote-book|en|title=Amácio Mazzaropi in the Film and Culture of Brazil|author=E. Bueno|year=2012|passage=Finally, with the help of a group of '''shoeshiners''', everything is clarified, the pol…」的新頁面
9758898
wikitext
text/x-wiki
==英語==
===詞源===
源自 {{com|en|shoe|shiner}}。
===發音===
{{rfp|en}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-shoeshiner.wav|a=Southern England}}
===名詞===
{{en-noun}}
# [[擦鞋]]匠
#: {{syn|en|bootblack|shoeblack|shoeshine boy}}
#* {{quote-book|en|title=Amácio Mazzaropi in the Film and Culture of Brazil|author=E. Bueno|year=2012|passage=Finally, with the help of a group of '''shoeshiners''', everything is clarified, the police arrest the criminals; Arlindo is set free.|t=最后,在一群'''擦鞋匠'''的帮助下,一切都真相大白,警察逮捕了罪犯;阿林多被释放了。}}
{{cln|en|含有後綴-er (施動者名詞)的詞}}
{{C|en|職業|人}}
i9tnbh98tafrkvyw6mldnt5uqewjqj5
shoeshiners
0
3438235
9758899
2026-05-14T02:28:52Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==英語== ===名詞=== {{head|en|名詞變格形}} # {{plural of|en|shoeshiner}}」的新頁面
9758899
wikitext
text/x-wiki
==英語==
===名詞===
{{head|en|名詞變格形}}
# {{plural of|en|shoeshiner}}
7f7h2gygtoj7az6a8mb3vst9gm58wzx
engravecer
0
3438236
9758900
2026-05-14T02:31:02Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===其他形式=== * {{alter|pt|engravescer}} ===詞源=== 源自 {{af|pt|en-|grave|-ecer|pos=動詞}}。對照{{cog|es|engravecer}}。 ===發音=== {{pt-IPA|engravecêr}} * {{homophones|pt|engravescer|qq1=巴西}} * {{hyph|pt|en|gra|ve|cer}} ===動詞=== {{pt-verb}} # [[惡化]] ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Priberam}} ==西班牙語== ===詞源=== 源自 {{af|es|en-|grave|-ecer}}。 ===發…」的新頁面
9758900
wikitext
text/x-wiki
==葡萄牙語==
===其他形式===
* {{alter|pt|engravescer}}
===詞源===
源自 {{af|pt|en-|grave|-ecer|pos=動詞}}。對照{{cog|es|engravecer}}。
===發音===
{{pt-IPA|engravecêr}}
* {{homophones|pt|engravescer|qq1=巴西}}
* {{hyph|pt|en|gra|ve|cer}}
===動詞===
{{pt-verb}}
# [[惡化]]
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Priberam}}
==西班牙語==
===詞源===
源自 {{af|es|en-|grave|-ecer}}。
===發音===
{{es-pr}}
===動詞===
{{es-verb-auto}}
# [[惡化]]
====變位====
{{es-conj-auto}}
===延伸閱讀===
* {{R:es:DRAE}}
f57ojq7mbgwu8omsofno65qxa1iny96
engordurar
0
3438237
9758901
2026-05-14T02:34:07Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{af|pt|en-|gordura|-ar}}。 ===發音=== {{pt-IPA}} * {{hyph|pt|en|gor|du|rar}} ===動詞=== {{pt-verb}} # {{lb|pt|及物}} 使[[沾]]滿[[油脂]] # {{lb|pt|不及物}} [[油膩]],[[油乎乎]] ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Priberam}}」的新頁面
9758901
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|en-|gordura|-ar}}。
===發音===
{{pt-IPA}}
* {{hyph|pt|en|gor|du|rar}}
===動詞===
{{pt-verb}}
# {{lb|pt|及物}} 使[[沾]]滿[[油脂]]
# {{lb|pt|不及物}} [[油膩]],[[油乎乎]]
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Priberam}}
0wa0njmj0bzfbpysantrdxx7xi4zb74
engordurado
0
3438238
9758902
2026-05-14T02:34:11Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===發音=== {{pt-IPA}} * {{hyph|pt|en|gor|du|ra|do}} ===形容詞=== {{pt-adj}} # [[油膩]]的,[[油乎乎]]的 ===分詞=== {{pt-pp}} # {{past participle of|pt|engordurar}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}}」的新頁面
9758902
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA}}
* {{hyph|pt|en|gor|du|ra|do}}
===形容詞===
{{pt-adj}}
# [[油膩]]的,[[油乎乎]]的
===分詞===
{{pt-pp}}
# {{past participle of|pt|engordurar}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
tusqmio1vt4e1hf4oubqdil78w6untr
entreouvir
0
3438239
9758904
2026-05-14T02:38:46Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{af|pt|entre-|ouvir}}。對照{{cog|es|entreoír}} 和{{cog|fr|entr’ouïr}}。 ===動詞=== {{pt-verb}} # [[聽]]不清或[[隱隱約約]]地[[聽見]] #: {{ux|pt|'''Entreouvi''' a conversa dos dois enquanto passava pelo corredor.|我在走廊上走着的时候,'''隐约听到了'''他们两人的对话。}} ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Michaelis}} * {{R:pt:Infopédia}}…」的新頁面
9758904
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|entre-|ouvir}}。對照{{cog|es|entreoír}} 和{{cog|fr|entr’ouïr}}。
===動詞===
{{pt-verb}}
# [[聽]]不清或[[隱隱約約]]地[[聽見]]
#: {{ux|pt|'''Entreouvi''' a conversa dos dois enquanto passava pelo corredor.|我在走廊上走着的时候,'''隐约听到了'''他们两人的对话。}}
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Michaelis}}
* {{R:pt:Infopédia}}
* {{R:pt:Priberam}}
* {{R:pt:Aulete}}
ts96sqq6h3qbkf3bod3l31jieiv1xv2
entreoír
0
3438240
9758905
2026-05-14T02:39:07Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==西班牙語== ===動詞=== {{es-verb-auto}} # [[聽]]不清或[[隱隱約約]]地[[聽見]] ====變位==== {{es-conj-auto|nocomb=1}} ===延伸閱讀=== * {{R:es:DRAE}} {{C|es|聽覺}}」的新頁面
9758905
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{es-verb-auto}}
# [[聽]]不清或[[隱隱約約]]地[[聽見]]
====變位====
{{es-conj-auto|nocomb=1}}
===延伸閱讀===
* {{R:es:DRAE}}
{{C|es|聽覺}}
h6wzeyf50bh1p9htkbna0x40qyvpww5
engordura
0
3438241
9758907
2026-05-14T02:40:31Z
TongcyBot
83009
半自動導入非詞元形式
9758907
wikitext
text/x-wiki
==葡萄牙語==
===發音===
* {{rhyme|pt|uɾɐ|s=4}}
* {{hyph|pt|en|gor|du|ra}}
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
pxg59snqw4q1dju5sm9n7yz44z3a3gf
engordurada
0
3438242
9758908
2026-05-14T02:40:32Z
TongcyBot
83009
半自動導入非詞元形式
9758908
wikitext
text/x-wiki
==葡萄牙語==
===形容詞===
{{head|pt|形容詞變格形}}
# {{adj form of|pt|engordurado||f|s}}
3jtrj64fkf96yiymu4v6al4jdtawvcw
engorduradas
0
3438243
9758909
2026-05-14T02:40:33Z
TongcyBot
83009
半自動導入非詞元形式
9758909
wikitext
text/x-wiki
==葡萄牙語==
===形容詞===
{{head|pt|形容詞變格形}}
# {{adj form of|pt|engordurado||f|p}}
2x076lmonze3gu4oasf9t6pqcaeb2e4
engordurados
0
3438244
9758910
2026-05-14T02:40:36Z
TongcyBot
83009
半自動導入非詞元形式
9758910
wikitext
text/x-wiki
==葡萄牙語==
===形容詞===
{{head|pt|形容詞變格形}}
# {{adj form of|pt|engordurado||m|p}}
pkkb3bllkvtz61mfpnhp0x1xh0uq4hf
engorduramos
0
3438245
9758911
2026-05-14T02:40:37Z
TongcyBot
83009
半自動導入非詞元形式
9758911
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurando
0
3438246
9758912
2026-05-14T02:40:38Z
TongcyBot
83009
半自動導入非詞元形式
9758912
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurardes
0
3438247
9758913
2026-05-14T02:40:39Z
TongcyBot
83009
半自動導入非詞元形式
9758913
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurarem
0
3438248
9758914
2026-05-14T02:40:41Z
TongcyBot
83009
半自動導入非詞元形式
9758914
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurares
0
3438249
9758915
2026-05-14T02:40:42Z
TongcyBot
83009
半自動導入非詞元形式
9758915
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurarmos
0
3438250
9758916
2026-05-14T02:40:43Z
TongcyBot
83009
半自動導入非詞元形式
9758916
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engorduras
0
3438251
9758917
2026-05-14T02:40:44Z
TongcyBot
83009
半自動導入非詞元形式
9758917
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurei
0
3438252
9758918
2026-05-14T02:40:46Z
TongcyBot
83009
半自動導入非詞元形式
9758918
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engorduremos
0
3438253
9758919
2026-05-14T02:40:47Z
TongcyBot
83009
半自動導入非詞元形式
9758919
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engorduro
0
3438254
9758920
2026-05-14T02:40:48Z
TongcyBot
83009
半自動導入非詞元形式
9758920
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engravece
0
3438255
9758921
2026-05-14T02:40:49Z
TongcyBot
83009
半自動導入非詞元形式
9758921
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
kh4krptpnbrnaswk0hbzkdeq4ho0xz9
engraveced
0
3438256
9758922
2026-05-14T02:40:51Z
TongcyBot
83009
半自動導入非詞元形式
9758922
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecei
0
3438257
9758923
2026-05-14T02:40:52Z
TongcyBot
83009
半自動導入非詞元形式
9758923
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceis
0
3438258
9758924
2026-05-14T02:40:54Z
TongcyBot
83009
半自動導入非詞元形式
9758924
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecem
0
3438259
9758925
2026-05-14T02:40:55Z
TongcyBot
83009
半自動導入非詞元形式
9758925
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecemos
0
3438260
9758926
2026-05-14T02:40:57Z
TongcyBot
83009
半自動導入非詞元形式
9758926
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
kh4krptpnbrnaswk0hbzkdeq4ho0xz9
engravecen
0
3438261
9758927
2026-05-14T02:40:58Z
TongcyBot
83009
半自動導入非詞元形式
9758927
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecendo
0
3438262
9758928
2026-05-14T02:40:59Z
TongcyBot
83009
半自動導入非詞元形式
9758928
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|engravecer}}
czgs2hy9z8cwijr0c0o0fqwax3ikx4n
engravecera
0
3438263
9758929
2026-05-14T02:41:00Z
TongcyBot
83009
半自動導入非詞元形式
9758929
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceram
0
3438264
9758930
2026-05-14T02:41:01Z
TongcyBot
83009
半自動導入非詞元形式
9758930
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceras
0
3438265
9758931
2026-05-14T02:41:03Z
TongcyBot
83009
半自動導入非詞元形式
9758931
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecerdes
0
3438266
9758932
2026-05-14T02:41:04Z
TongcyBot
83009
半自動導入非詞元形式
9758932
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecerei
0
3438267
9758933
2026-05-14T02:41:05Z
TongcyBot
83009
半自動導入非詞元形式
9758933
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecereis
0
3438268
9758934
2026-05-14T02:41:06Z
TongcyBot
83009
半自動導入非詞元形式
9758934
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecerem
0
3438269
9758935
2026-05-14T02:41:07Z
TongcyBot
83009
半自動導入非詞元形式
9758935
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceremos
0
3438270
9758936
2026-05-14T02:41:08Z
TongcyBot
83009
半自動導入非詞元形式
9758936
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
kh4krptpnbrnaswk0hbzkdeq4ho0xz9
engraveceres
0
3438271
9758937
2026-05-14T02:41:10Z
TongcyBot
83009
半自動導入非詞元形式
9758937
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceria
0
3438272
9758938
2026-05-14T02:41:11Z
TongcyBot
83009
半自動導入非詞元形式
9758938
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceriam
0
3438273
9758939
2026-05-14T02:41:12Z
TongcyBot
83009
半自動導入非詞元形式
9758939
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecerias
0
3438274
9758940
2026-05-14T02:41:13Z
TongcyBot
83009
半自動導入非詞元形式
9758940
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecerla
0
3438275
9758941
2026-05-14T02:41:14Z
TongcyBot
83009
半自動導入非詞元形式
9758941
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerlas
0
3438276
9758942
2026-05-14T02:41:16Z
TongcyBot
83009
半自動導入非詞元形式
9758942
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerle
0
3438277
9758943
2026-05-14T02:41:17Z
TongcyBot
83009
半自動導入非詞元形式
9758943
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerles
0
3438278
9758944
2026-05-14T02:41:18Z
TongcyBot
83009
半自動導入非詞元形式
9758944
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerlo
0
3438279
9758945
2026-05-14T02:41:19Z
TongcyBot
83009
半自動導入非詞元形式
9758945
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerlos
0
3438280
9758946
2026-05-14T02:41:21Z
TongcyBot
83009
半自動導入非詞元形式
9758946
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerme
0
3438281
9758947
2026-05-14T02:41:22Z
TongcyBot
83009
半自動導入非詞元形式
9758947
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecermos
0
3438282
9758948
2026-05-14T02:41:23Z
TongcyBot
83009
半自動導入非詞元形式
9758948
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecernos
0
3438283
9758949
2026-05-14T02:41:24Z
TongcyBot
83009
半自動導入非詞元形式
9758949
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveceros
0
3438284
9758950
2026-05-14T02:41:26Z
TongcyBot
83009
半自動導入非詞元形式
9758950
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerse
0
3438285
9758951
2026-05-14T02:41:27Z
TongcyBot
83009
半自動導入非詞元形式
9758951
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerte
0
3438286
9758952
2026-05-14T02:41:28Z
TongcyBot
83009
半自動導入非詞元形式
9758952
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerá
0
3438287
9758953
2026-05-14T02:41:30Z
TongcyBot
83009
半自動導入非詞元形式
9758953
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
kh4krptpnbrnaswk0hbzkdeq4ho0xz9
engravecerán
0
3438288
9758954
2026-05-14T02:41:31Z
TongcyBot
83009
半自動導入非詞元形式
9758954
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecerás
0
3438289
9758955
2026-05-14T02:41:32Z
TongcyBot
83009
半自動導入非詞元形式
9758955
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
kh4krptpnbrnaswk0hbzkdeq4ho0xz9
engravecerão
0
3438290
9758956
2026-05-14T02:41:33Z
TongcyBot
83009
半自動導入非詞元形式
9758956
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceré
0
3438291
9758957
2026-05-14T02:41:34Z
TongcyBot
83009
半自動導入非詞元形式
9758957
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveceréis
0
3438292
9758958
2026-05-14T02:41:35Z
TongcyBot
83009
半自動導入非詞元形式
9758958
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecería
0
3438293
9758959
2026-05-14T02:41:36Z
TongcyBot
83009
半自動導入非詞元形式
9758959
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveceríais
0
3438294
9758960
2026-05-14T02:41:38Z
TongcyBot
83009
半自動導入非詞元形式
9758960
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveceríamos
0
3438295
9758961
2026-05-14T02:41:39Z
TongcyBot
83009
半自動導入非詞元形式
9758961
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
kh4krptpnbrnaswk0hbzkdeq4ho0xz9
engravecerían
0
3438296
9758962
2026-05-14T02:41:40Z
TongcyBot
83009
半自動導入非詞元形式
9758962
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engordurara
0
3438297
9758963
2026-05-14T02:41:41Z
Sayonzei
40728
創建葡萄牙語「[[engordurar]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9758963
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engravecerías
0
3438298
9758964
2026-05-14T02:41:42Z
TongcyBot
83009
半自動導入非詞元形式
9758964
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveceríeis
0
3438299
9758965
2026-05-14T02:41:43Z
TongcyBot
83009
半自動導入非詞元形式
9758965
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveces
0
3438300
9758966
2026-05-14T02:41:44Z
TongcyBot
83009
半自動導入非詞元形式
9758966
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
kh4krptpnbrnaswk0hbzkdeq4ho0xz9
engravecesse
0
3438301
9758967
2026-05-14T02:41:45Z
TongcyBot
83009
半自動導入非詞元形式
9758967
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecessem
0
3438302
9758968
2026-05-14T02:41:46Z
TongcyBot
83009
半自動導入非詞元形式
9758968
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecesses
0
3438303
9758969
2026-05-14T02:41:47Z
TongcyBot
83009
半自動導入非詞元形式
9758969
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceste
0
3438304
9758970
2026-05-14T02:41:49Z
TongcyBot
83009
半自動導入非詞元形式
9758970
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecestes
0
3438305
9758971
2026-05-14T02:41:50Z
TongcyBot
83009
半自動導入非詞元形式
9758971
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveceu
0
3438306
9758972
2026-05-14T02:41:51Z
TongcyBot
83009
半自動導入非詞元形式
9758972
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveci
0
3438307
9758973
2026-05-14T02:41:52Z
TongcyBot
83009
半自動導入非詞元形式
9758973
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecia
0
3438308
9758974
2026-05-14T02:41:53Z
TongcyBot
83009
半自動導入非詞元形式
9758974
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveciam
0
3438309
9758975
2026-05-14T02:41:55Z
TongcyBot
83009
半自動導入非詞元形式
9758975
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecias
0
3438310
9758976
2026-05-14T02:41:56Z
TongcyBot
83009
半自動導入非詞元形式
9758976
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecida
0
3438311
9758977
2026-05-14T02:41:57Z
TongcyBot
83009
半自動導入非詞元形式
9758977
wikitext
text/x-wiki
==西班牙語==
===分詞===
{{head|es|過去分詞變格形|g=f-s}}
# {{feminine singular of|es|engravecido}}
6gvu19z56npyjys1k9cqon7bms2ra8a
engravecidas
0
3438312
9758978
2026-05-14T02:41:58Z
TongcyBot
83009
半自動導入非詞元形式
9758978
wikitext
text/x-wiki
==西班牙語==
===分詞===
{{head|es|過去分詞變格形|g=f-p}}
# {{feminine plural of|es|engravecido}}
dqwpis2f072jrsb0ljm3gcvnl27141v
engravecido
0
3438313
9758979
2026-05-14T02:41:59Z
TongcyBot
83009
半自動導入非詞元形式
9758979
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|engravecer}}
==西班牙語==
===分詞===
{{es-past participle}}
# {{past participle of|es|engravecer}}
9b1yuditds7829d0p7qi2ccwugzujvm
engravecidos
0
3438314
9758980
2026-05-14T02:42:01Z
TongcyBot
83009
半自動導入非詞元形式
9758980
wikitext
text/x-wiki
==西班牙語==
===分詞===
{{head|es|過去分詞變格形|g=m-p}}
# {{masculine plural of|es|engravecido}}
afq5fynffm89v3azx94s67l85mmz4ai
engraveciendo
0
3438315
9758981
2026-05-14T02:42:02Z
TongcyBot
83009
半自動導入非詞元形式
9758981
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動名詞}}
# {{es-verb form of|engravecer}}
t8hoxm24tqf04qg9m6bi0fka6zm3fzf
engraveciera
0
3438316
9758982
2026-05-14T02:42:04Z
TongcyBot
83009
半自動導入非詞元形式
9758982
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engordurava
0
3438317
9758983
2026-05-14T02:42:04Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9758983
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurarei
0
3438318
9758984
2026-05-14T02:42:04Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9758984
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engravecierais
0
3438319
9758985
2026-05-14T02:42:04Z
TongcyBot
83009
半自動導入非詞元形式
9758985
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engorduraria
0
3438320
9758986
2026-05-14T02:42:05Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9758986
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordure
0
3438321
9758987
2026-05-14T02:42:05Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9758987
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurasse
0
3438322
9758988
2026-05-14T02:42:05Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9758988
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordures
0
3438323
9758989
2026-05-14T02:42:06Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9758989
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurasses
0
3438324
9758990
2026-05-14T02:42:06Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9758990
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engravecieran
0
3438325
9758991
2026-05-14T02:42:06Z
TongcyBot
83009
半自動導入非詞元形式
9758991
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecieras
0
3438326
9758992
2026-05-14T02:42:07Z
TongcyBot
83009
半自動導入非詞元形式
9758992
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciere
0
3438327
9758993
2026-05-14T02:42:08Z
TongcyBot
83009
半自動導入非詞元形式
9758993
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciereis
0
3438328
9758994
2026-05-14T02:42:09Z
TongcyBot
83009
半自動導入非詞元形式
9758994
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecieren
0
3438329
9758995
2026-05-14T02:42:11Z
TongcyBot
83009
半自動導入非詞元形式
9758995
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecieres
0
3438330
9758996
2026-05-14T02:42:12Z
TongcyBot
83009
半自動導入非詞元形式
9758996
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecieron
0
3438331
9758997
2026-05-14T02:42:13Z
TongcyBot
83009
半自動導入非詞元形式
9758997
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciese
0
3438332
9758998
2026-05-14T02:42:14Z
TongcyBot
83009
半自動導入非詞元形式
9758998
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecieseis
0
3438333
9758999
2026-05-14T02:42:16Z
TongcyBot
83009
半自動導入非詞元形式
9758999
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciesen
0
3438334
9759000
2026-05-14T02:42:17Z
TongcyBot
83009
半自動導入非詞元形式
9759000
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecieses
0
3438335
9759001
2026-05-14T02:42:18Z
TongcyBot
83009
半自動導入非詞元形式
9759001
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecimos
0
3438336
9759002
2026-05-14T02:42:19Z
TongcyBot
83009
半自動導入非詞元形式
9759002
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciste
0
3438337
9759003
2026-05-14T02:42:20Z
TongcyBot
83009
半自動導入非詞元形式
9759003
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecisteis
0
3438338
9759004
2026-05-14T02:42:22Z
TongcyBot
83009
半自動導入非詞元形式
9759004
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndola
0
3438339
9759005
2026-05-14T02:42:23Z
TongcyBot
83009
半自動導入非詞元形式
9759005
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndolas
0
3438340
9759006
2026-05-14T02:42:24Z
TongcyBot
83009
半自動導入非詞元形式
9759006
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndoles
0
3438341
9759007
2026-05-14T02:42:27Z
TongcyBot
83009
半自動導入非詞元形式
9759007
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndolo
0
3438342
9759008
2026-05-14T02:42:29Z
TongcyBot
83009
半自動導入非詞元形式
9759008
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndolos
0
3438343
9759009
2026-05-14T02:42:31Z
TongcyBot
83009
半自動導入非詞元形式
9759009
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndome
0
3438344
9759010
2026-05-14T02:42:33Z
TongcyBot
83009
半自動導入非詞元形式
9759010
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndonos
0
3438345
9759011
2026-05-14T02:42:35Z
TongcyBot
83009
半自動導入非詞元形式
9759011
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndole
0
3438346
9759012
2026-05-14T02:42:42Z
TongcyBot
83009
半自動導入非詞元形式
9759012
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndose
0
3438347
9759013
2026-05-14T02:42:44Z
TongcyBot
83009
半自動導入非詞元形式
9759013
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéndoos
0
3438348
9759014
2026-05-14T02:42:45Z
TongcyBot
83009
半自動導入非詞元形式
9759014
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engorduravas
0
3438349
9759015
2026-05-14T02:42:46Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759015
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engorduraste
0
3438350
9759016
2026-05-14T02:42:46Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759016
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engraveciéndote
0
3438351
9759017
2026-05-14T02:42:46Z
TongcyBot
83009
半自動導入非詞元形式
9759017
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engorduraras
0
3438352
9759018
2026-05-14T02:42:46Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759018
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurarás
0
3438353
9759019
2026-05-14T02:42:47Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759019
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurará
0
3438354
9759020
2026-05-14T02:42:47Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759020
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurarias
0
3438355
9759021
2026-05-14T02:42:47Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759021
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurou
0
3438356
9759022
2026-05-14T02:42:48Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759022
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engraveciéramos
0
3438357
9759023
2026-05-14T02:42:47Z
TongcyBot
83009
半自動導入非詞元形式
9759023
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciéremos
0
3438358
9759024
2026-05-14T02:42:48Z
TongcyBot
83009
半自動導入非詞元形式
9759024
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveciésemos
0
3438359
9759025
2026-05-14T02:42:50Z
TongcyBot
83009
半自動導入非詞元形式
9759025
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveció
0
3438360
9759026
2026-05-14T02:42:51Z
TongcyBot
83009
半自動導入非詞元形式
9759026
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecé
0
3438361
9759027
2026-05-14T02:42:52Z
TongcyBot
83009
半自動導入非詞元形式
9759027
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecéis
0
3438362
9759028
2026-05-14T02:42:53Z
TongcyBot
83009
半自動導入非詞元形式
9759028
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecés
0
3438363
9759029
2026-05-14T02:42:55Z
TongcyBot
83009
半自動導入非詞元形式
9759029
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecêramos
0
3438364
9759030
2026-05-14T02:42:56Z
TongcyBot
83009
半自動導入非詞元形式
9759030
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecêreis
0
3438365
9759031
2026-05-14T02:42:57Z
TongcyBot
83009
半自動導入非詞元形式
9759031
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecêsseis
0
3438366
9759032
2026-05-14T02:42:58Z
TongcyBot
83009
半自動導入非詞元形式
9759032
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecêssemos
0
3438367
9759033
2026-05-14T02:42:59Z
TongcyBot
83009
半自動導入非詞元形式
9759033
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravecí
0
3438368
9759034
2026-05-14T02:43:00Z
TongcyBot
83009
半自動導入非詞元形式
9759034
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecía
0
3438369
9759035
2026-05-14T02:43:02Z
TongcyBot
83009
半自動導入非詞元形式
9759035
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecíais
0
3438370
9759036
2026-05-14T02:43:03Z
TongcyBot
83009
半自動導入非詞元形式
9759036
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecíamos
0
3438371
9759037
2026-05-14T02:43:04Z
TongcyBot
83009
半自動導入非詞元形式
9759037
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
kh4krptpnbrnaswk0hbzkdeq4ho0xz9
engravecían
0
3438372
9759038
2026-05-14T02:43:05Z
TongcyBot
83009
半自動導入非詞元形式
9759038
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecías
0
3438373
9759039
2026-05-14T02:43:06Z
TongcyBot
83009
半自動導入非詞元形式
9759039
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravecíeis
0
3438374
9759040
2026-05-14T02:43:07Z
TongcyBot
83009
半自動導入非詞元形式
9759040
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engravezca
0
3438375
9759041
2026-05-14T02:43:09Z
TongcyBot
83009
半自動導入非詞元形式
9759041
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravezcamos
0
3438376
9759042
2026-05-14T02:43:10Z
TongcyBot
83009
半自動導入非詞元形式
9759042
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravezcan
0
3438377
9759043
2026-05-14T02:43:12Z
TongcyBot
83009
半自動導入非詞元形式
9759043
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engordurávamos
0
3438378
9759044
2026-05-14T02:43:12Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759044
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurámos
0
3438379
9759045
2026-05-14T02:43:12Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759045
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engravezcas
0
3438380
9759046
2026-05-14T02:43:13Z
TongcyBot
83009
半自動導入非詞元形式
9759046
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engorduraremos
0
3438381
9759047
2026-05-14T02:43:13Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759047
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engorduraríamos
0
3438382
9759048
2026-05-14T02:43:13Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759048
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurássemos
0
3438383
9759049
2026-05-14T02:43:13Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759049
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurais
0
3438384
9759050
2026-05-14T02:43:14Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759050
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engravezco
0
3438385
9759051
2026-05-14T02:43:15Z
TongcyBot
83009
半自動導入非詞元形式
9759051
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engravezcáis
0
3438386
9759052
2026-05-14T02:43:16Z
TongcyBot
83009
半自動導入非詞元形式
9759052
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engorduráramos
0
3438387
9759053
2026-05-14T02:43:16Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759053
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engravezcás
0
3438388
9759054
2026-05-14T02:43:17Z
TongcyBot
83009
半自動導入非詞元形式
9759054
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|engravecer}}
rdvnwkb6gkat8ieg6jmtmsw1ijmy2l2
engraveça
0
3438389
9759055
2026-05-14T02:43:18Z
TongcyBot
83009
半自動導入非詞元形式
9759055
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveçais
0
3438390
9759056
2026-05-14T02:43:19Z
TongcyBot
83009
半自動導入非詞元形式
9759056
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveçam
0
3438391
9759057
2026-05-14T02:43:20Z
TongcyBot
83009
半自動導入非詞元形式
9759057
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveçamos
0
3438392
9759058
2026-05-14T02:43:22Z
TongcyBot
83009
半自動導入非詞元形式
9759058
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveças
0
3438393
9759059
2026-05-14T02:43:23Z
TongcyBot
83009
半自動導入非詞元形式
9759059
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraveço
0
3438394
9759060
2026-05-14T02:43:24Z
TongcyBot
83009
半自動導入非詞元形式
9759060
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engravecer}}
omyw0avo2p7xc4w0acgsvi2wq96cnep
engraxa
0
3438395
9759061
2026-05-14T02:43:25Z
TongcyBot
83009
半自動導入非詞元形式
9759061
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA|[x:sh]}}
* {{hyphenation|pt|en|gra|xa}}
* {{rhymes|pt|aʃɐ|s=3}}
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
r0a6rk423yyvhfbj5bc1fz2xs8b0vjo
engraxada
0
3438396
9759062
2026-05-14T02:43:27Z
TongcyBot
83009
半自動導入非詞元形式
9759062
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|engraxado}}
5wzx95izh2v4d8xiwhbdgdnhcuzwa9h
engraxadas
0
3438397
9759063
2026-05-14T02:43:28Z
TongcyBot
83009
半自動導入非詞元形式
9759063
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|engraxado}}
7o9utrb1gvvxmgzweyz5xf40c656oia
engraxado
0
3438398
9759064
2026-05-14T02:43:29Z
TongcyBot
83009
半自動導入非詞元形式
9759064
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|engraxar}}
022n19u5utitohl55lvtt48lt0b2otc
engraxados
0
3438399
9759065
2026-05-14T02:43:30Z
TongcyBot
83009
半自動導入非詞元形式
9759065
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|engraxado}}
q18wulwyhnetkrmzls6dx0n6j9fl0fd
engraxai
0
3438400
9759066
2026-05-14T02:43:31Z
TongcyBot
83009
半自動導入非詞元形式
9759066
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxais
0
3438401
9759067
2026-05-14T02:43:33Z
TongcyBot
83009
半自動導入非詞元形式
9759067
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxam
0
3438402
9759068
2026-05-14T02:43:34Z
TongcyBot
83009
半自動導入非詞元形式
9759068
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxamos
0
3438403
9759069
2026-05-14T02:43:35Z
TongcyBot
83009
半自動導入非詞元形式
9759069
wikitext
text/x-wiki
{{also|engraxámos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
poc3ow5ka8qaslb7o4c8btd21ku97he
engraxando
0
3438404
9759070
2026-05-14T02:43:36Z
TongcyBot
83009
半自動導入非詞元形式
9759070
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{gerund of|pt|engraxar}}
eqkjg7w3h178949mnzht8tr4n67hudz
engraxara
0
3438405
9759071
2026-05-14T02:43:37Z
TongcyBot
83009
半自動導入非詞元形式
9759071
wikitext
text/x-wiki
{{also|engraxará}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
rff1fulaxa2j25dj7sfonfnwiskhdhg
engraxaram
0
3438406
9759072
2026-05-14T02:43:39Z
TongcyBot
83009
半自動導入非詞元形式
9759072
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxaras
0
3438407
9759073
2026-05-14T02:43:40Z
TongcyBot
83009
半自動導入非詞元形式
9759073
wikitext
text/x-wiki
{{also|engraxarás}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
e535q3vzckk5xf0l0lpw3j897ffl8pp
engraxardes
0
3438408
9759074
2026-05-14T02:43:41Z
TongcyBot
83009
半自動導入非詞元形式
9759074
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxarei
0
3438409
9759075
2026-05-14T02:43:42Z
TongcyBot
83009
半自動導入非詞元形式
9759075
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engorduráveis
0
3438410
9759076
2026-05-14T02:43:43Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759076
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurastes
0
3438411
9759077
2026-05-14T02:43:43Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759077
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engorduráreis
0
3438412
9759078
2026-05-14T02:43:43Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759078
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engraxareis
0
3438413
9759079
2026-05-14T02:43:43Z
TongcyBot
83009
半自動導入非詞元形式
9759079
wikitext
text/x-wiki
{{also|engraxáreis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
lkaziyaj3blx47q7t9ukcp325xuak80
engorduraríeis
0
3438414
9759080
2026-05-14T02:43:44Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759080
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurareis
0
3438415
9759081
2026-05-14T02:43:43Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759081
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordureis
0
3438416
9759082
2026-05-14T02:43:44Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759082
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurásseis
0
3438417
9759083
2026-05-14T02:43:44Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759083
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engraxarem
0
3438418
9759084
2026-05-14T02:43:45Z
TongcyBot
83009
半自動導入非詞元形式
9759084
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxaremos
0
3438419
9759085
2026-05-14T02:43:46Z
TongcyBot
83009
半自動導入非詞元形式
9759085
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxares
0
3438420
9759086
2026-05-14T02:43:47Z
TongcyBot
83009
半自動導入非詞元形式
9759086
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxaria
0
3438421
9759087
2026-05-14T02:43:48Z
TongcyBot
83009
半自動導入非詞元形式
9759087
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxariam
0
3438422
9759088
2026-05-14T02:43:49Z
TongcyBot
83009
半自動導入非詞元形式
9759088
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxarias
0
3438423
9759089
2026-05-14T02:43:50Z
TongcyBot
83009
半自動導入非詞元形式
9759089
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxarmos
0
3438424
9759090
2026-05-14T02:43:52Z
TongcyBot
83009
半自動導入非詞元形式
9759090
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxará
0
3438425
9759091
2026-05-14T02:43:53Z
TongcyBot
83009
半自動導入非詞元形式
9759091
wikitext
text/x-wiki
{{also|engraxara}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
eqwhmzdhnf0d9hxjrnxhl48cb0re99c
engraxarás
0
3438426
9759092
2026-05-14T02:43:54Z
TongcyBot
83009
半自動導入非詞元形式
9759092
wikitext
text/x-wiki
{{also|engraxaras}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
18f1j764r3axywsv260l6fqv0ycr2p4
engraxarão
0
3438427
9759093
2026-05-14T02:43:55Z
TongcyBot
83009
半自動導入非詞元形式
9759093
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxaríamos
0
3438428
9759094
2026-05-14T02:43:56Z
TongcyBot
83009
半自動導入非詞元形式
9759094
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxaríeis
0
3438429
9759095
2026-05-14T02:43:58Z
TongcyBot
83009
半自動導入非詞元形式
9759095
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxas
0
3438430
9759096
2026-05-14T02:43:58Z
TongcyBot
83009
半自動導入非詞元形式
9759096
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxasse
0
3438431
9759097
2026-05-14T02:44:00Z
TongcyBot
83009
半自動導入非詞元形式
9759097
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxassem
0
3438432
9759098
2026-05-14T02:44:01Z
TongcyBot
83009
半自動導入非詞元形式
9759098
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxasses
0
3438433
9759099
2026-05-14T02:44:02Z
TongcyBot
83009
半自動導入非詞元形式
9759099
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxaste
0
3438434
9759100
2026-05-14T02:44:04Z
TongcyBot
83009
半自動導入非詞元形式
9759100
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxastes
0
3438435
9759101
2026-05-14T02:44:05Z
TongcyBot
83009
半自動導入非詞元形式
9759101
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxava
0
3438436
9759102
2026-05-14T02:44:06Z
TongcyBot
83009
半自動導入非詞元形式
9759102
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxavam
0
3438437
9759103
2026-05-14T02:44:07Z
TongcyBot
83009
半自動導入非詞元形式
9759103
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxavas
0
3438438
9759104
2026-05-14T02:44:08Z
TongcyBot
83009
半自動導入非詞元形式
9759104
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxe
0
3438439
9759105
2026-05-14T02:44:09Z
TongcyBot
83009
半自動導入非詞元形式
9759105
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxei
0
3438440
9759106
2026-05-14T02:44:11Z
TongcyBot
83009
半自動導入非詞元形式
9759106
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engorduram
0
3438441
9759107
2026-05-14T02:44:12Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759107
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engorduravam
0
3438442
9759108
2026-05-14T02:44:11Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759108
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engraxeis
0
3438443
9759109
2026-05-14T02:44:12Z
TongcyBot
83009
半自動導入非詞元形式
9759109
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engorduraram
0
3438444
9759110
2026-05-14T02:44:12Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759110
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurarão
0
3438445
9759111
2026-05-14T02:44:12Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759111
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurariam
0
3438446
9759112
2026-05-14T02:44:12Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759112
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurem
0
3438447
9759113
2026-05-14T02:44:13Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759113
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engordurassem
0
3438448
9759114
2026-05-14T02:44:13Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759114
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engraxem
0
3438449
9759115
2026-05-14T02:44:13Z
TongcyBot
83009
半自動導入非詞元形式
9759115
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA|[x:sh]}}
* {{rhymes|pt|aʃẽj̃|q1=巴西|aʃɐ̃j̃|q2=葡萄牙|s=3}}
* {{hyphenation|pt|en|gra|xem}}
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
8y7t4n688eo415xytoe0lfwpypy79gr
engordurai
0
3438450
9759116
2026-05-14T02:44:14Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===動詞=== {{head|pt|動詞變位形式}} # {{pt-verb form of|engordurar}}」的新頁面
9759116
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engordurar}}
to42ywofpnfiojjpeq930aomwzy8osq
engraxemos
0
3438451
9759117
2026-05-14T02:44:14Z
TongcyBot
83009
半自動導入非詞元形式
9759117
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxes
0
3438452
9759118
2026-05-14T02:44:15Z
TongcyBot
83009
半自動導入非詞元形式
9759118
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxo
0
3438453
9759119
2026-05-14T02:44:16Z
TongcyBot
83009
半自動導入非詞元形式
9759119
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA|[x:sh]}}
* {{rhymes|pt|aʃu|s=3}}
* {{hyph|pt|en|gra|xo}}
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
npxpl73osuroqinses4tiioajyzh2k0
engraxou
0
3438454
9759120
2026-05-14T02:44:18Z
TongcyBot
83009
半自動導入非詞元形式
9759120
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxámos
0
3438455
9759121
2026-05-14T02:44:19Z
TongcyBot
83009
半自動導入非詞元形式
9759121
wikitext
text/x-wiki
{{also|engraxamos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
ojf3a79b5sr0mxsuvqcum3j6o1c47pc
engraxáramos
0
3438456
9759122
2026-05-14T02:44:20Z
TongcyBot
83009
半自動導入非詞元形式
9759122
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxáreis
0
3438457
9759123
2026-05-14T02:44:22Z
TongcyBot
83009
半自動導入非詞元形式
9759123
wikitext
text/x-wiki
{{also|engraxareis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
nd7i7x9kio4c0efkgwguugga5yhvc2q
engraxásseis
0
3438458
9759124
2026-05-14T02:44:23Z
TongcyBot
83009
半自動導入非詞元形式
9759124
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxássemos
0
3438459
9759125
2026-05-14T02:44:24Z
TongcyBot
83009
半自動導入非詞元形式
9759125
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxávamos
0
3438460
9759126
2026-05-14T02:44:25Z
TongcyBot
83009
半自動導入非詞元形式
9759126
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
engraxáveis
0
3438461
9759127
2026-05-14T02:44:26Z
TongcyBot
83009
半自動導入非詞元形式
9759127
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|engraxar}}
iuwrpdp5y78xi5hyw13nagc83tzt4yv
entreoiga
0
3438462
9759128
2026-05-14T02:44:27Z
TongcyBot
83009
半自動導入非詞元形式
9759128
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoigamos
0
3438463
9759129
2026-05-14T02:44:29Z
TongcyBot
83009
半自動導入非詞元形式
9759129
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoigan
0
3438464
9759130
2026-05-14T02:44:30Z
TongcyBot
83009
半自動導入非詞元形式
9759130
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoigas
0
3438465
9759131
2026-05-14T02:44:31Z
TongcyBot
83009
半自動導入非詞元形式
9759131
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoigo
0
3438466
9759132
2026-05-14T02:44:32Z
TongcyBot
83009
半自動導入非詞元形式
9759132
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoigáis
0
3438467
9759133
2026-05-14T02:44:33Z
TongcyBot
83009
半自動導入非詞元形式
9759133
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoigás
0
3438468
9759134
2026-05-14T02:44:35Z
TongcyBot
83009
半自動導入非詞元形式
9759134
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoiremos
0
3438469
9759135
2026-05-14T02:44:36Z
TongcyBot
83009
半自動導入非詞元形式
9759135
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoirá
0
3438470
9759136
2026-05-14T02:44:37Z
TongcyBot
83009
半自動導入非詞元形式
9759136
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoirán
0
3438471
9759137
2026-05-14T02:44:38Z
TongcyBot
83009
半自動導入非詞元形式
9759137
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoirás
0
3438472
9759138
2026-05-14T02:44:39Z
TongcyBot
83009
半自動導入非詞元形式
9759138
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoiré
0
3438473
9759139
2026-05-14T02:44:40Z
TongcyBot
83009
半自動導入非詞元形式
9759139
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoiréis
0
3438474
9759140
2026-05-14T02:44:42Z
TongcyBot
83009
半自動導入非詞元形式
9759140
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoiría
0
3438475
9759141
2026-05-14T02:44:44Z
TongcyBot
83009
半自動導入非詞元形式
9759141
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoiríais
0
3438476
9759142
2026-05-14T02:44:45Z
TongcyBot
83009
半自動導入非詞元形式
9759142
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoiríamos
0
3438477
9759143
2026-05-14T02:44:46Z
TongcyBot
83009
半自動導入非詞元形式
9759143
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoirían
0
3438478
9759144
2026-05-14T02:44:47Z
TongcyBot
83009
半自動導入非詞元形式
9759144
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoirías
0
3438479
9759145
2026-05-14T02:44:48Z
TongcyBot
83009
半自動導入非詞元形式
9759145
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoiça
0
3438480
9759146
2026-05-14T02:44:49Z
TongcyBot
83009
半自動導入非詞元形式
9759146
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreoiçais
0
3438481
9759147
2026-05-14T02:44:51Z
TongcyBot
83009
半自動導入非詞元形式
9759147
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreoiçam
0
3438482
9759148
2026-05-14T02:44:52Z
TongcyBot
83009
半自動導入非詞元形式
9759148
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreoiçamos
0
3438483
9759149
2026-05-14T02:44:53Z
TongcyBot
83009
半自動導入非詞元形式
9759149
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreoiças
0
3438484
9759150
2026-05-14T02:44:54Z
TongcyBot
83009
半自動導入非詞元形式
9759150
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreoiço
0
3438485
9759151
2026-05-14T02:44:56Z
TongcyBot
83009
半自動導入非詞元形式
9759151
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouve
0
3438486
9759152
2026-05-14T02:44:57Z
TongcyBot
83009
半自動導入非詞元形式
9759152
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvem
0
3438487
9759153
2026-05-14T02:44:58Z
TongcyBot
83009
半自動導入非詞元形式
9759153
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouves
0
3438488
9759154
2026-05-14T02:44:59Z
TongcyBot
83009
半自動導入非詞元形式
9759154
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvi
0
3438489
9759155
2026-05-14T02:45:00Z
TongcyBot
83009
半自動導入非詞元形式
9759155
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvia
0
3438490
9759156
2026-05-14T02:45:02Z
TongcyBot
83009
半自動導入非詞元形式
9759156
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviam
0
3438491
9759157
2026-05-14T02:45:03Z
TongcyBot
83009
半自動導入非詞元形式
9759157
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvias
0
3438492
9759158
2026-05-14T02:45:04Z
TongcyBot
83009
半自動導入非詞元形式
9759158
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvida
0
3438493
9759159
2026-05-14T02:45:05Z
TongcyBot
83009
半自動導入非詞元形式
9759159
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|entreouvido}}
69o0vpznmg8khpsc3f7vey944vyfffi
entreouvidas
0
3438494
9759160
2026-05-14T02:45:07Z
TongcyBot
83009
半自動導入非詞元形式
9759160
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|entreouvido}}
bzcn9256sj863969tl481wc2a7gakxv
entreouvido
0
3438495
9759161
2026-05-14T02:45:08Z
TongcyBot
83009
半自動導入非詞元形式
9759161
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|entreouvir}}
lhptoo4l788a7nhqg44rltyr88wodxz
entreouvidos
0
3438496
9759162
2026-05-14T02:45:09Z
TongcyBot
83009
半自動導入非詞元形式
9759162
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|entreouvido}}
cb6avowc5dtlvwsipa9678gzrosonxh
entreouvimos
0
3438497
9759163
2026-05-14T02:45:10Z
TongcyBot
83009
半自動導入非詞元形式
9759163
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvindo
0
3438498
9759164
2026-05-14T02:45:11Z
TongcyBot
83009
半自動導入非詞元形式
9759164
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|entreouvir}}
k8p84rsnpnh6nta9qwpg57l3gcl8zhr
entreouvira
0
3438499
9759165
2026-05-14T02:45:12Z
TongcyBot
83009
半自動導入非詞元形式
9759165
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviram
0
3438500
9759166
2026-05-14T02:45:14Z
TongcyBot
83009
半自動導入非詞元形式
9759166
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviras
0
3438501
9759167
2026-05-14T02:45:15Z
TongcyBot
83009
半自動導入非詞元形式
9759167
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvirdes
0
3438502
9759168
2026-05-14T02:45:16Z
TongcyBot
83009
半自動導入非詞元形式
9759168
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvirei
0
3438503
9759169
2026-05-14T02:45:17Z
TongcyBot
83009
半自動導入非詞元形式
9759169
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvireis
0
3438504
9759170
2026-05-14T02:45:19Z
TongcyBot
83009
半自動導入非詞元形式
9759170
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvirem
0
3438505
9759171
2026-05-14T02:45:20Z
TongcyBot
83009
半自動導入非詞元形式
9759171
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviremos
0
3438506
9759172
2026-05-14T02:45:21Z
TongcyBot
83009
半自動導入非詞元形式
9759172
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvires
0
3438507
9759173
2026-05-14T02:45:22Z
TongcyBot
83009
半自動導入非詞元形式
9759173
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviria
0
3438508
9759174
2026-05-14T02:45:23Z
TongcyBot
83009
半自動導入非詞元形式
9759174
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviriam
0
3438509
9759175
2026-05-14T02:45:25Z
TongcyBot
83009
半自動導入非詞元形式
9759175
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvirias
0
3438510
9759176
2026-05-14T02:45:26Z
TongcyBot
83009
半自動導入非詞元形式
9759176
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvirmos
0
3438511
9759177
2026-05-14T02:45:27Z
TongcyBot
83009
半自動導入非詞元形式
9759177
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvirá
0
3438512
9759178
2026-05-14T02:45:28Z
TongcyBot
83009
半自動導入非詞元形式
9759178
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvirás
0
3438513
9759179
2026-05-14T02:45:29Z
TongcyBot
83009
半自動導入非詞元形式
9759179
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvirão
0
3438514
9759180
2026-05-14T02:45:31Z
TongcyBot
83009
半自動導入非詞元形式
9759180
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviríamos
0
3438515
9759181
2026-05-14T02:45:32Z
TongcyBot
83009
半自動導入非詞元形式
9759181
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviríeis
0
3438516
9759182
2026-05-14T02:45:33Z
TongcyBot
83009
半自動導入非詞元形式
9759182
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvis
0
3438517
9759183
2026-05-14T02:45:34Z
TongcyBot
83009
半自動導入非詞元形式
9759183
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvisse
0
3438518
9759184
2026-05-14T02:45:36Z
TongcyBot
83009
半自動導入非詞元形式
9759184
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvissem
0
3438519
9759185
2026-05-14T02:45:37Z
TongcyBot
83009
半自動導入非詞元形式
9759185
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvisses
0
3438520
9759186
2026-05-14T02:45:38Z
TongcyBot
83009
半自動導入非詞元形式
9759186
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviste
0
3438521
9759187
2026-05-14T02:45:39Z
TongcyBot
83009
半自動導入非詞元形式
9759187
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvistes
0
3438522
9759188
2026-05-14T02:45:40Z
TongcyBot
83009
半自動導入非詞元形式
9759188
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouviu
0
3438523
9759189
2026-05-14T02:45:42Z
TongcyBot
83009
半自動導入非詞元形式
9759189
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvíamos
0
3438524
9759190
2026-05-14T02:45:43Z
TongcyBot
83009
半自動導入非詞元形式
9759190
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvíeis
0
3438525
9759191
2026-05-14T02:45:44Z
TongcyBot
83009
半自動導入非詞元形式
9759191
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvíramos
0
3438526
9759192
2026-05-14T02:45:45Z
TongcyBot
83009
半自動導入非詞元形式
9759192
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvíreis
0
3438527
9759193
2026-05-14T02:45:47Z
TongcyBot
83009
半自動導入非詞元形式
9759193
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvísseis
0
3438528
9759194
2026-05-14T02:45:48Z
TongcyBot
83009
半自動導入非詞元形式
9759194
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouvíssemos
0
3438529
9759195
2026-05-14T02:45:49Z
TongcyBot
83009
半自動導入非詞元形式
9759195
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouça
0
3438530
9759196
2026-05-14T02:45:50Z
TongcyBot
83009
半自動導入非詞元形式
9759196
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouçais
0
3438531
9759197
2026-05-14T02:45:51Z
TongcyBot
83009
半自動導入非詞元形式
9759197
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouçam
0
3438532
9759198
2026-05-14T02:45:52Z
TongcyBot
83009
半自動導入非詞元形式
9759198
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouçamos
0
3438533
9759199
2026-05-14T02:45:53Z
TongcyBot
83009
半自動導入非詞元形式
9759199
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouças
0
3438534
9759200
2026-05-14T02:45:55Z
TongcyBot
83009
半自動導入非詞元形式
9759200
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreouço
0
3438535
9759201
2026-05-14T02:45:56Z
TongcyBot
83009
半自動導入非詞元形式
9759201
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entreouvir}}
6zva3fozl0zzd9bb6e6dqyzey46wm4x
entreoye
0
3438536
9759202
2026-05-14T02:45:57Z
TongcyBot
83009
半自動導入非詞元形式
9759202
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyen
0
3438537
9759203
2026-05-14T02:45:58Z
TongcyBot
83009
半自動導入非詞元形式
9759203
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyendo
0
3438538
9759204
2026-05-14T02:45:59Z
TongcyBot
83009
半自動導入非詞元形式
9759204
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動名詞}}
# {{es-verb form of|entreoír}}
lu0ypsqs66if7qafpia95fjjj6w3ktv
entreoyera
0
3438539
9759205
2026-05-14T02:46:01Z
TongcyBot
83009
半自動導入非詞元形式
9759205
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyerais
0
3438540
9759206
2026-05-14T02:46:02Z
TongcyBot
83009
半自動導入非詞元形式
9759206
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyeran
0
3438541
9759207
2026-05-14T02:46:03Z
TongcyBot
83009
半自動導入非詞元形式
9759207
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyeras
0
3438542
9759208
2026-05-14T02:46:04Z
TongcyBot
83009
半自動導入非詞元形式
9759208
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyere
0
3438543
9759209
2026-05-14T02:46:05Z
TongcyBot
83009
半自動導入非詞元形式
9759209
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyereis
0
3438544
9759210
2026-05-14T02:46:06Z
TongcyBot
83009
半自動導入非詞元形式
9759210
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyeren
0
3438545
9759211
2026-05-14T02:46:08Z
TongcyBot
83009
半自動導入非詞元形式
9759211
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyeres
0
3438546
9759212
2026-05-14T02:46:09Z
TongcyBot
83009
半自動導入非詞元形式
9759212
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyeron
0
3438547
9759213
2026-05-14T02:46:10Z
TongcyBot
83009
半自動導入非詞元形式
9759213
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyes
0
3438548
9759214
2026-05-14T02:46:11Z
TongcyBot
83009
半自動導入非詞元形式
9759214
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyese
0
3438549
9759215
2026-05-14T02:46:12Z
TongcyBot
83009
半自動導入非詞元形式
9759215
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyeseis
0
3438550
9759216
2026-05-14T02:46:14Z
TongcyBot
83009
半自動導入非詞元形式
9759216
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyesen
0
3438551
9759217
2026-05-14T02:46:15Z
TongcyBot
83009
半自動導入非詞元形式
9759217
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyeses
0
3438552
9759218
2026-05-14T02:46:16Z
TongcyBot
83009
半自動導入非詞元形式
9759218
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyéramos
0
3438553
9759219
2026-05-14T02:46:17Z
TongcyBot
83009
半自動導入非詞元形式
9759219
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyéremos
0
3438554
9759220
2026-05-14T02:46:18Z
TongcyBot
83009
半自動導入非詞元形式
9759220
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyésemos
0
3438555
9759221
2026-05-14T02:46:20Z
TongcyBot
83009
半自動導入非詞元形式
9759221
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoyó
0
3438556
9759222
2026-05-14T02:46:21Z
TongcyBot
83009
半自動導入非詞元形式
9759222
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoí
0
3438557
9759223
2026-05-14T02:46:22Z
TongcyBot
83009
半自動導入非詞元形式
9759223
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoía
0
3438558
9759224
2026-05-14T02:46:23Z
TongcyBot
83009
半自動導入非詞元形式
9759224
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoíais
0
3438559
9759225
2026-05-14T02:46:24Z
TongcyBot
83009
半自動導入非詞元形式
9759225
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoíamos
0
3438560
9759226
2026-05-14T02:46:25Z
TongcyBot
83009
半自動導入非詞元形式
9759226
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoían
0
3438561
9759227
2026-05-14T02:46:26Z
TongcyBot
83009
半自動導入非詞元形式
9759227
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoías
0
3438562
9759228
2026-05-14T02:46:28Z
TongcyBot
83009
半自動導入非詞元形式
9759228
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoíd
0
3438563
9759229
2026-05-14T02:46:29Z
TongcyBot
83009
半自動導入非詞元形式
9759229
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoída
0
3438564
9759230
2026-05-14T02:46:30Z
TongcyBot
83009
半自動導入非詞元形式
9759230
wikitext
text/x-wiki
==西班牙語==
===分詞===
{{head|es|過去分詞變格形|g=f-s}}
# {{feminine singular of|es|entreoído}}
btbr1cox5m748727atem7gtq3wscwjf
entreoídas
0
3438565
9759231
2026-05-14T02:46:31Z
TongcyBot
83009
半自動導入非詞元形式
9759231
wikitext
text/x-wiki
==西班牙語==
===分詞===
{{head|es|過去分詞變格形|g=f-p}}
# {{feminine plural of|es|entreoído}}
ic26hjxk998tuvhgmhvdq3swo976e3v
entreoído
0
3438566
9759232
2026-05-14T02:46:32Z
TongcyBot
83009
半自動導入非詞元形式
9759232
wikitext
text/x-wiki
==西班牙語==
===分詞===
{{es-past participle}}
# {{past participle of|es|entreoír}}
gr9n7ksaaiui6bah7nptg2vlnwy3dm4
entreoídos
0
3438567
9759233
2026-05-14T02:46:34Z
TongcyBot
83009
半自動導入非詞元形式
9759233
wikitext
text/x-wiki
==西班牙語==
===分詞===
{{head|es|過去分詞變格形|g=m-p}}
# {{masculine plural of|es|entreoído}}
8kcwzw7a0imj8tjs7cjnliyoemwntbd
entreoímos
0
3438568
9759234
2026-05-14T02:46:35Z
TongcyBot
83009
半自動導入非詞元形式
9759234
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoís
0
3438569
9759235
2026-05-14T02:46:36Z
TongcyBot
83009
半自動導入非詞元形式
9759235
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoíste
0
3438570
9759236
2026-05-14T02:46:37Z
TongcyBot
83009
半自動導入非詞元形式
9759236
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entreoísteis
0
3438571
9759237
2026-05-14T02:46:39Z
TongcyBot
83009
半自動導入非詞元形式
9759237
wikitext
text/x-wiki
==西班牙語==
===動詞===
{{head|es|動詞變位形式}}
# {{es-verb form of|entreoír}}
o0d35akjtxnfr8y25i4n5b7cjcdo5mx
entrincheira
0
3438572
9759238
2026-05-14T02:46:40Z
TongcyBot
83009
半自動導入非詞元形式
9759238
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirada
0
3438573
9759239
2026-05-14T02:46:41Z
TongcyBot
83009
半自動導入非詞元形式
9759239
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|entrincheirado}}
sao36chdcn39w75dnkexdfg284n9uj3
entrincheiradas
0
3438574
9759240
2026-05-14T02:46:42Z
TongcyBot
83009
半自動導入非詞元形式
9759240
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|entrincheirado}}
lhw0qc9rbf5vzbchuq7zztmhmnwmug4
entrincheirado
0
3438575
9759241
2026-05-14T02:46:43Z
TongcyBot
83009
半自動導入非詞元形式
9759241
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{pt-pp}}
# {{past participle of|pt|entrincheirar}}
t54tz5ur41qcpah1v8uwb89p95m9aig
entrincheirados
0
3438576
9759242
2026-05-14T02:46:45Z
TongcyBot
83009
半自動導入非詞元形式
9759242
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|entrincheirado}}
hdbinkrqvtxx0m82562fspe0dmj2uae
entrincheirai
0
3438577
9759243
2026-05-14T02:46:46Z
TongcyBot
83009
半自動導入非詞元形式
9759243
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirais
0
3438578
9759244
2026-05-14T02:46:47Z
TongcyBot
83009
半自動導入非詞元形式
9759244
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiram
0
3438579
9759245
2026-05-14T02:46:48Z
TongcyBot
83009
半自動導入非詞元形式
9759245
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiramos
0
3438580
9759246
2026-05-14T02:46:50Z
TongcyBot
83009
半自動導入非詞元形式
9759246
wikitext
text/x-wiki
{{also|entrincheirámos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
c859r690w1goxvc4aniz3680jcn7qlj
entrincheirando
0
3438581
9759247
2026-05-14T02:46:51Z
TongcyBot
83009
半自動導入非詞元形式
9759247
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|entrincheirar}}
kqqu7o06nqs07sbx6k8g2ldxkli2m03
entrincheirara
0
3438582
9759248
2026-05-14T02:46:53Z
TongcyBot
83009
半自動導入非詞元形式
9759248
wikitext
text/x-wiki
{{also|entrincheirará}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
hmxmiasoefv7e5wd05dtm3b3zmkx01p
entrincheiraram
0
3438583
9759249
2026-05-14T02:46:53Z
TongcyBot
83009
半自動導入非詞元形式
9759249
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiraras
0
3438584
9759250
2026-05-14T02:46:55Z
TongcyBot
83009
半自動導入非詞元形式
9759250
wikitext
text/x-wiki
{{also|entrincheirarás}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
qp72qiy8dv98zsm8xxy8p02nicqe8g2
entrincheirardes
0
3438585
9759251
2026-05-14T02:46:56Z
TongcyBot
83009
半自動導入非詞元形式
9759251
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirarei
0
3438586
9759252
2026-05-14T02:46:58Z
TongcyBot
83009
半自動導入非詞元形式
9759252
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirareis
0
3438587
9759253
2026-05-14T02:46:59Z
TongcyBot
83009
半自動導入非詞元形式
9759253
wikitext
text/x-wiki
{{also|entrincheiráreis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
pml1pdlo1adqlvrxs5o8tqr8nqg0ff3
entrincheirarem
0
3438588
9759254
2026-05-14T02:47:01Z
TongcyBot
83009
半自動導入非詞元形式
9759254
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiraremos
0
3438589
9759255
2026-05-14T02:47:01Z
TongcyBot
83009
半自動導入非詞元形式
9759255
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirares
0
3438590
9759256
2026-05-14T02:47:03Z
TongcyBot
83009
半自動導入非詞元形式
9759256
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiraria
0
3438591
9759257
2026-05-14T02:47:04Z
TongcyBot
83009
半自動導入非詞元形式
9759257
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirariam
0
3438592
9759258
2026-05-14T02:47:05Z
TongcyBot
83009
半自動導入非詞元形式
9759258
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirarias
0
3438593
9759259
2026-05-14T02:47:06Z
TongcyBot
83009
半自動導入非詞元形式
9759259
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirarmos
0
3438594
9759260
2026-05-14T02:47:07Z
TongcyBot
83009
半自動導入非詞元形式
9759260
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirará
0
3438595
9759261
2026-05-14T02:47:09Z
TongcyBot
83009
半自動導入非詞元形式
9759261
wikitext
text/x-wiki
{{also|entrincheirara}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
dnnw9njfuutfdg6hx73aq8rftoxx1jx
entrincheirarás
0
3438596
9759262
2026-05-14T02:47:10Z
TongcyBot
83009
半自動導入非詞元形式
9759262
wikitext
text/x-wiki
{{also|entrincheiraras}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
obk2qi5r0e6dotghvcbzsd58crwr0qd
entrincheirarão
0
3438597
9759263
2026-05-14T02:47:12Z
TongcyBot
83009
半自動導入非詞元形式
9759263
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiraríamos
0
3438598
9759264
2026-05-14T02:47:13Z
TongcyBot
83009
半自動導入非詞元形式
9759264
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiraríeis
0
3438599
9759265
2026-05-14T02:47:14Z
TongcyBot
83009
半自動導入非詞元形式
9759265
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiras
0
3438600
9759266
2026-05-14T02:47:15Z
TongcyBot
83009
半自動導入非詞元形式
9759266
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirasse
0
3438601
9759267
2026-05-14T02:47:16Z
TongcyBot
83009
半自動導入非詞元形式
9759267
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirassem
0
3438602
9759268
2026-05-14T02:47:17Z
TongcyBot
83009
半自動導入非詞元形式
9759268
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirasses
0
3438603
9759269
2026-05-14T02:47:19Z
TongcyBot
83009
半自動導入非詞元形式
9759269
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiraste
0
3438604
9759270
2026-05-14T02:47:20Z
TongcyBot
83009
半自動導入非詞元形式
9759270
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirastes
0
3438605
9759271
2026-05-14T02:47:22Z
TongcyBot
83009
半自動導入非詞元形式
9759271
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirava
0
3438606
9759272
2026-05-14T02:47:23Z
TongcyBot
83009
半自動導入非詞元形式
9759272
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiravam
0
3438607
9759273
2026-05-14T02:47:24Z
TongcyBot
83009
半自動導入非詞元形式
9759273
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiravas
0
3438608
9759274
2026-05-14T02:47:26Z
TongcyBot
83009
半自動導入非詞元形式
9759274
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheire
0
3438609
9759275
2026-05-14T02:47:27Z
TongcyBot
83009
半自動導入非詞元形式
9759275
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirei
0
3438610
9759276
2026-05-14T02:47:28Z
TongcyBot
83009
半自動導入非詞元形式
9759276
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheireis
0
3438611
9759277
2026-05-14T02:47:29Z
TongcyBot
83009
半自動導入非詞元形式
9759277
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirem
0
3438612
9759278
2026-05-14T02:47:31Z
TongcyBot
83009
半自動導入非詞元形式
9759278
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiremos
0
3438613
9759279
2026-05-14T02:47:32Z
TongcyBot
83009
半自動導入非詞元形式
9759279
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheires
0
3438614
9759280
2026-05-14T02:47:33Z
TongcyBot
83009
半自動導入非詞元形式
9759280
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiro
0
3438615
9759281
2026-05-14T02:47:34Z
TongcyBot
83009
半自動導入非詞元形式
9759281
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirou
0
3438616
9759282
2026-05-14T02:47:35Z
TongcyBot
83009
半自動導入非詞元形式
9759282
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirámos
0
3438617
9759283
2026-05-14T02:47:37Z
TongcyBot
83009
半自動導入非詞元形式
9759283
wikitext
text/x-wiki
{{also|entrincheiramos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
98gss9yuf3kde8ak15y05ms1dy9mi8j
entrincheiráramos
0
3438618
9759284
2026-05-14T02:47:38Z
TongcyBot
83009
半自動導入非詞元形式
9759284
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiráreis
0
3438619
9759285
2026-05-14T02:47:40Z
TongcyBot
83009
半自動導入非詞元形式
9759285
wikitext
text/x-wiki
{{also|entrincheirareis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
j2ys7ozf1dcyyzzoc7ylxt3atn48z9x
entrincheirásseis
0
3438620
9759286
2026-05-14T02:47:41Z
TongcyBot
83009
半自動導入非詞元形式
9759286
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirássemos
0
3438621
9759287
2026-05-14T02:47:42Z
TongcyBot
83009
半自動導入非詞元形式
9759287
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheirávamos
0
3438622
9759288
2026-05-14T02:47:43Z
TongcyBot
83009
半自動導入非詞元形式
9759288
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
entrincheiráveis
0
3438623
9759289
2026-05-14T02:47:44Z
TongcyBot
83009
半自動導入非詞元形式
9759289
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|entrincheirar}}
fpy1a6hayparqz7ga18nk8zzo36pe95
豨薟草
0
3438624
9759292
2026-05-14T03:58:42Z
P1ayer
5118
新詞條
9759292
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=豨莶草|type=21}}
===發音===
{{zh-pron
|m=xī薟cǎo
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} 菊科植物[[豨薟]]({{taxlink|Siegesbeckia orientalis|species}}).以及{{w|腺梗豨薟}}(Siegesbeckia pubescens)、{{w|毛梗豨薟}}({{taxlink|Sigesbeckia glabrescens|species}})的乾燥地上部分,作為[[藥材]]有祛風濕、利關節、解毒之效
leecd4xys235teyqh23pywu5qiugixu
海亂
0
3438625
9759297
2026-05-14T05:38:21Z
Sṳnhien892
127220
[[w:WP:AES|←]]建立內容為「==漢語== {{zh-forms|s=海乱}} ===發音=== {{zh-pron |md=hāi-lóng |cat=n }} ===名詞=== {{head|zh|名詞}} # {{lb|zh|閩東語}} [[海嘯]] ====近義詞==== {{zh-dial|海嘯}}」的新頁面
9759297
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=海乱}}
===發音===
{{zh-pron
|md=hāi-lóng
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|閩東語}} [[海嘯]]
====近義詞====
{{zh-dial|海嘯}}
7s4nbygbn92t5sxg7qgaszus8alsa52
Waschmaschinen
0
3438626
9759310
2026-05-14T07:40:40Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==德語== ===發音=== * {{IPA|de|/ˈvaʃmaˌʃiːnən/}} * {{audio|de|LL-Q188 (deu)-Sebastian Wallroth-Waschmaschinen.wav}} * {{audio|de|De-Waschmaschinen.ogg|a=柏林}} ===名詞=== {{head|de|名詞變格形}} # {{plural of|de|Waschmaschine}}」的新頁面
9759310
wikitext
text/x-wiki
==德語==
===發音===
* {{IPA|de|/ˈvaʃmaˌʃiːnən/}}
* {{audio|de|LL-Q188 (deu)-Sebastian Wallroth-Waschmaschinen.wav}}
* {{audio|de|De-Waschmaschinen.ogg|a=柏林}}
===名詞===
{{head|de|名詞變格形}}
# {{plural of|de|Waschmaschine}}
7ajrzbzisijbup931eunrmzmh9amgpa
convincingness
0
3438627
9759318
2026-05-14T08:05:53Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==英語== ===詞源=== {{ety|en|:af|convincing|-ness|text=+|tree=1}} ===名詞=== {{en-noun|-}} # [[說服力]];[[信服]]性 #: {{syn|en|persuasiveness}} #* {{quote-text|en|year=1931|author={{w|H. P. Lovecraft}}|title={{w|暗夜呢喃|The Whisperer in Darkness}}|chapter=4 |passage=The substance of the note was wholly insane, yet the manner of expression—in view of all that had gone before—had a grimly potent quality of '''convincin…」的新頁面
9759318
wikitext
text/x-wiki
==英語==
===詞源===
{{ety|en|:af|convincing|-ness|text=+|tree=1}}
===名詞===
{{en-noun|-}}
# [[說服力]];[[信服]]性
#: {{syn|en|persuasiveness}}
#* {{quote-text|en|year=1931|author={{w|H. P. Lovecraft}}|title={{w|暗夜呢喃|The Whisperer in Darkness}}|chapter=4
|passage=The substance of the note was wholly insane, yet the manner of expression—in view of all that had gone before—had a grimly potent quality of '''convincingness'''.|t=纸条的内容完全是无稽之谈,但考虑到之前发生的一切,其表达方式却有一种令人毛骨悚然的强大'''说服力'''。}}
===延伸閱讀===
* {{R:OneLook}}
* {{R:GNV|convincingness, persuasiveness}}
gn1et7bb3e1xshnqsnbpw4si19rsf3e
ほしょく
0
3438628
9759322
2026-05-14T08:14:18Z
Fglffer
55252
新詞條
9759322
wikitext
text/x-wiki
==日語==
{{ja-see|捕食|補植|補職|補色}}
90ygxzyjxts8kiyi1t4b12qat8sru0s
起蛟龍
0
3438629
9759328
2026-05-14T08:19:44Z
Fglffer
55252
新詞條
9759328
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=起蛟龙|type=12}}
===發音===
{{zh-pron
|mn=xm,tw:khí-ká-lêng
|cat=v
}}
===動詞===
{{zh-verb|type=vo}}
# {{lb|zh|Xiamen Hokkien|&|Taiwanese Hokkien}} [[海嘯]]
====同義詞====
{{zh-dial|海嘯}}
===來源===
* {{thcwd|14248}}
k750rejzshrugem9w1lov18l8ivocx6
海漲
0
3438630
9759329
2026-05-14T08:21:03Z
Fglffer
55252
新詞條
9759329
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=海涨}}
===發音===
{{zh-pron
|mn=xm,qz,tw:hái-tiòng/twv:hái-tiùⁿ
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|Hokkien}} [[漲潮]]
# {{lb|zh|Hokkien}} [[海嘯]]
====同義詞====
{{zh-dial|海嘯}}
===來源===
* {{thcwd|6211}}
5f9jdvfl3oyovqal05itgb7r3f18d3u
Wiktionary:圖片詞典/hsb:hłowa
4
3438631
9759336
2026-05-14T09:01:24Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「{{picdic |image=Human head and brain diagram.svg |width=310 |labels= {{picdiclabel|hsb|pcolor=black|fontsize=12|posx=150|posy=3|link=nop}} {{picdiclabel|hsb|pcolor=black|fontsize=18|posx=170|posy=90|link=mozy}} {{picdiclabel|hsb|pcolor=black|fontsize=12|posx=80|posy=160|link=woko|align=left}} {{picdiclabel|hsb|pcolor=black|fontsize=12|posx=1|posy=235|link=huba|align=left}} {{picdiclabel|hsb|pcolor=black|fontsize=12|posx=15|posy=190|link=nós|…」的新頁面
9759336
wikitext
text/x-wiki
{{picdic
|image=Human head and brain diagram.svg
|width=310
|labels=
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=150|posy=3|link=nop}}
{{picdiclabel|hsb|pcolor=black|fontsize=18|posx=170|posy=90|link=mozy}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=80|posy=160|link=woko|align=left}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=1|posy=235|link=huba|align=left}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=15|posy=190|link=nós|align=left}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=50|posy=230|link=huba|align=left}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=35|posy=285|link=broda}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=90|posy=270|link=čelesno}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=175|posy=205|link=wucho|align=right}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=120|posy=140|link=templ}}
{{picdiclabel|hsb|pcolor=black|fontsize=12|posx=185|posy=290|link=tył}}
|detail1=點擊圖片中的標籤。
}}
brpctkqh3srbvpf0poskjj2xfnl6uls
Category:Rhymes:上索布語/ʊs
14
3438632
9759338
2026-05-14T09:01:53Z
TongcyBot
83009
養貓
9759338
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:上索布語/ʊs/1音節
14
3438633
9759339
2026-05-14T09:01:59Z
TongcyBot
83009
養貓
9759339
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:加利西亞語/ɔs
14
3438634
9759340
2026-05-14T09:02:05Z
TongcyBot
83009
養貓
9759340
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:加利西亞語/ɔs/1音節
14
3438635
9759341
2026-05-14T09:02:11Z
TongcyBot
83009
養貓
9759341
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:加泰羅尼亞語已汰換形式
14
3438636
9759342
2026-05-14T09:02:18Z
TongcyBot
83009
養貓
9759342
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:印度葡萄牙語代詞
14
3438637
9759343
2026-05-14T09:02:24Z
TongcyBot
83009
養貓
9759343
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:有同音詞的加利西亞語詞
14
3438638
9759345
2026-05-14T09:02:33Z
TongcyBot
83009
養貓
9759345
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
洋參
0
3438639
9759350
2026-05-14T09:32:22Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==漢語== {{zh-forms|s=洋参|t2=洋蔘}} {{wp|zh:}} ===發音=== {{zh-pron |m=yángshēn |c=joeng4 sam1 |mn=xm,tw:iûⁿ-sim/xm:iûⁿ-song/qz:iûⁿ-serm/twv:iûⁿ-som |cat=n }} ===名詞=== {{head|zh|名詞}} # {{lb|zh|TCM}} [[西洋參]]({{taxfmt|Panax quinquefolius|species}}) ====近義詞==== {{zh-dial|西洋參}}」的新頁面
9759350
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=洋参|t2=洋蔘}}
{{wp|zh:}}
===發音===
{{zh-pron
|m=yángshēn
|c=joeng4 sam1
|mn=xm,tw:iûⁿ-sim/xm:iûⁿ-song/qz:iûⁿ-serm/twv:iûⁿ-som
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|TCM}} [[西洋參]]({{taxfmt|Panax quinquefolius|species}})
====近義詞====
{{zh-dial|西洋參}}
60k08u54fmfe4prmhuyw61vcwlo36ss
Category:Rhymes:阿斯圖里亞斯語/eɾu/3音節
14
3438640
9759368
2026-05-14T11:24:15Z
TongcyBot
83009
養貓
9759368
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:阿斯圖里亞斯語/eɾu
14
3438641
9759369
2026-05-14T11:24:20Z
TongcyBot
83009
養貓
9759369
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英語/æktəl/2音節
14
3438642
9759370
2026-05-14T11:24:27Z
TongcyBot
83009
養貓
9759370
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英語/æktəl
14
3438643
9759371
2026-05-14T11:24:32Z
TongcyBot
83009
養貓
9759371
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:立陶宛語/ɐ/4音節
14
3438644
9759372
2026-05-14T11:24:39Z
TongcyBot
83009
養貓
9759372
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:漢斯立克語/ilt/1音節
14
3438645
9759373
2026-05-14T11:24:45Z
TongcyBot
83009
養貓
9759373
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:漢斯立克語/ilt
14
3438646
9759374
2026-05-14T11:24:50Z
TongcyBot
83009
養貓
9759374
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:德語/ɪlt
14
3438647
9759375
2026-05-14T11:24:57Z
TongcyBot
83009
養貓
9759375
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:巴斯克語/ai̯en/2音節
14
3438648
9759376
2026-05-14T11:25:02Z
TongcyBot
83009
養貓
9759376
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:巴斯克語/ai̯en
14
3438649
9759378
2026-05-14T11:25:07Z
TongcyBot
83009
養貓
9759378
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx